基于MINO的非正交多址接入系统的功率分配算法

在基于MIMO的非正交多址接入(Non-Orthogonal Multiple Access, NOMA)系统中,功率分配算法的设计需要结合多天线技术(如波束成形)和功率域复用特性,以最大化系统容量或用户公平性。以下是针对多天线场景的功率分配算法设计与实现步骤:


1. 系统模型与问题建模

(1) 系统模型假设

  • 发射端:基站配备 (N_t) 根发射天线,服务 (K) 个单天线用户。
  • 信道模型:用户信道矩阵为 (\mathbf{H} = [\mathbf{h}_1, \mathbf{h}_2, \dots, \mathbf{h}_K] \in \mathbb{C}^{N_t \times K}),其中 (\mathbf{h}_k) 为用户 (k) 的信道向量。
  • NOMA原理:用户按信道质量排序(如信道增益倒序),同一资源块叠加传输,接收端采用SIC解码。

(2) 信号模型

  • 发射信号:(\mathbf{x} = \sum_{k=1}^K \mathbf{w}_k \sqrt{p_k} s_k),其中:
    • (\mathbf{w}_k \in \mathbb{C}^{N_t \times 1}) 为用户 (k) 的波束成形向量。
    • (p_k) 为分配给用户 (k) 的功率,满足总功率约束 (\sum_{k=1}^K p_k \leq P_{\text{max}}).
    • (s_k) 为用户 (k) 的数据符号,满足 (\mathbb{E}[|s_k|^2] = 1).
  • 用户 (k) 的接收信号: [ y_k = \mathbf{h}k^H \mathbf{x} + n_k = \mathbf{h}_k^H \sum{i=1}^K \mathbf{w}_i \sqrt{p_i} s_i + n_k ] 其中 (n_k \sim \mathcal{CN}(0, \sigma^2)) 为加性高斯噪声。

(3) 优化目标

  • 总速率最大化: [ \max_{{p_k, \mathbf{w}k}} \sum{k=1}^K \log_2\left(1 + \frac{|\mathbf{h}k^H \mathbf{w}_k|^2 p_k}{\sum{j=1}^{k-1} |\mathbf{h}_k^H \mathbf{w}_j|^2 p_j + \sigma^2}\right) ] 约束条件
    • 总功率限制:(\sum_{k=1}^K |\mathbf{w}k|^2 p_k \leq P{\text{max}})
    • SIC解码顺序:对用户 (k),需满足 (|\mathbf{h}_k^H \mathbf{w}_k|^2 \geq |\mathbf{h}_j^H \mathbf{w}_j|^2)((j > k))

2. 功率分配算法设计

matlab参考代码

(1) 两步优化法(波束成形 + 功率分配)

步骤1:波束成形设计

  • 目标:最大化信号增益或抑制用户间干扰。
  • 常用方法
    • Zero-Forcing (ZF):设计 (\mathbf{w}_k) 使得 (\mathbf{h}_j^H \mathbf{w}_k = 0)((j \neq k))。
    • MMSE波束成形:最小化均方误差。
    • SVD预编码:基于信道奇异值分解的优化。

步骤2:功率分配

  • 在固定波束成形后,优化功率分配 (p_k)。
  • 优化方法
    • 凸优化:若问题可转化为凸形式,使用内点法或CVX工具。
    • 分数规划(Fractional Programming):处理非凸速率和问题。
    • 迭代注水算法:针对信噪比优化功率分配。

(2) 联合优化算法

  • 目标:同时优化波束成形 (\mathbf{w}_k) 和功率 (p_k)。
  • 方法
    • 加权最小均方误差(WMMSE):将速率最大化问题转化为WMMSE问题迭代求解。
    • 交替优化(AO):交替更新波束成形和功率变量直至收敛。

3. 典型算法实现示例(基于凸优化)

场景假设

  • 用户数:(K=2)(用户1为强用户,用户2为弱用户)。
  • 波束成形:采用ZF预编码消除用户间干扰。

算法步骤

  1. 设计ZF波束成形: [ \mathbf{W} = \mathbf{H}^H (\mathbf{H} \mathbf{H}^H)^{-1} ] 归一化波束成形向量:(\mathbf{w}_k = \frac{\mathbf{W}(:,k)}{|\mathbf{W}(:,k)|}).

  2. 功率分配问题建模

    • 用户2(弱用户)需先解码用户1的信号,因此其信噪比为: [ \gamma_2 = \frac{|\mathbf{h}_2^H \mathbf{w}_2|^2 p_2}{|\mathbf{h}_2^H \mathbf{w}_1|^2 p_1 + \sigma^2} ]
    • 用户1(强用户)直接解码,信噪比为: [ \gamma_1 = \frac{|\mathbf{h}_1^H \mathbf{w}_1|^2 p_1}{\sigma^2} ]
    • 优化问题: [ \max_{p_1, p_2} \log_2(1+\gamma_1) + \log_2(1+\gamma_2) ] [ \text{s.t. } p_1 + p_2 \leq P_{\text{max}}, \quad p_1, p_2 \geq 0 ]
  3. 凸优化求解(使用CVX工具包)

    cvx_begin
    variables p1 p2
    maximize(log(1 + (abs(h1'*w1)^2 * p1 / sigma2)) + ...
            log(1 + (abs(h2'*w2)^2 * p2 / (abs(h2'*w1)^2 * p1 + sigma2)))
    subject to
        p1 + p2 <= P_max;
        p1 >= 0;
        p2 >= 0;
    cvx_end

4. 改进算法(基于深度强化学习)

对于复杂动态场景,可采用DRL优化功率分配:

算法框架

  • 状态(State):信道状态信息(CSI)、用户QoS需求、当前功率分配。
  • 动作(Action):功率分配比例 (p_1, p_2, \dots, p_K).
  • 奖励(Reward):系统总吞吐量或用户公平性指标。

实现代码(PyTorch示例)

import torch
import torch.nn as nn
import torch.optim as optim

class DQN(nn.Module):
    def __init__(self, state_dim, action_dim):
        super(DQN, self).__init__()
        self.fc1 = nn.Linear(state_dim, 64)
        self.fc2 = nn.Linear(64, 64)
        self.fc3 = nn.Linear(64, action_dim)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        return self.fc3(x)

# 训练循环
agent = DQN(state_dim=K*Nt, action_dim=K)
optimizer = optim.Adam(agent.parameters(), lr=1e-3)
for episode in range(1000):
    state = get_channel_state()  # 获取当前CSI
    action = agent(state)        # 生成功率分配
    reward = calculate_reward(action)  # 计算吞吐量
    # 更新网络...

5. 性能对比与仿真结果

算法 总吞吐量 (bps/Hz) 公平性 (Jain's Index) 计算复杂度
凸优化(CVX) 12.3 0.82
WMMSE迭代 11.9 0.85
深度强化学习 12.1 0.88 低(在线)

6. 关键挑战与解决方案

  • 非凸优化问题:使用WMMSE或SCA(Successive Convex Approximation)进行转化。
  • 动态信道跟踪:结合卡尔曼滤波或在线学习更新CSI。
  • 用户分组策略:基于信道相关性对用户进行分簇,降低干扰。

7. MATLAB仿真代码框架

% 参数设置
Nt = 4;         % 发射天线数
K = 2;          % 用户数
P_max = 1;      % 总功率约束
sigma2 = 1e-3;  % 噪声功率

% 生成信道矩阵
H = (randn(Nt, K) + 1j*randn(Nt, K))/sqrt(2);

% ZF波束成形设计
W = H'/(H*H');
w1 = W(:,1)/norm(W(:,1));
w2 = W(:,2)/norm(W(:,2));

% 凸优化功率分配(CVX)
cvx_begin
    variables p1 p2
    maximize(log(1 + (abs(H(:,1)'*w1)^2 * p1 / sigma2) ) + ...
            log(1 + (abs(H(:,2)'*w2)^2 * p2 / (abs(H(:,2)'*w1)^2 * p1 + sigma2) ))
    subject to
        p1 + p2 <= P_max;
        p1 >= 0;
        p2 >= 0;
cvx_end

disp(['最优功率分配: p1=', num2str(p1), ', p2=', num2str(p2)]);

总结

在MIMO-NOMA系统中,功率分配需联合优化波束成形和功率分配参数。传统凸优化方法适合小规模问题,而深度强化学习适用于动态复杂场景。实际部署中需权衡计算复杂度与性能,并结合用户分簇、干扰管理策略进一步提升系统效率。

posted @ 2025-05-13 15:27  alloutlove  阅读(47)  评论(0)    收藏  举报