NOMA学习笔记——权重分配以及MATLAB实现

NOMA 容量方程

首先,对于两用户的传输方案中,分为远和近两个用户,器容量方程可以写为:

其中Rn是通过SIC算法去除远端用户干扰后的得到的。

功率分配系数的推导αn和αf

设R*为远用户的目标速率,即我们需要Rf>=R*,设Rf=R*即

 已知an+af=1

 由于af不能超过1,故规定

 这样,就利用动态功率分配方案导出了功率分配系数

 

存在的问题

由上述公式,每当计算出af>1时,,就限制其等于 1,例如如果af算出来等于50,必须设置为50 才能满足远端用户的目标率,实际上我们设置为了1,这是没有意义的,an=0,传输的信号不包括任何近端用户的信息,远端用户由于an<50导致其中断,都无法满足要求。

做出调整

为了解决这个问题,添加一个简单的调整。 

每当af值超过1时,设置af=0,因为即使我们给他赋值为1,都无法解决其中断,不如将功率全部用在近端用户上,添加这个调整后,中断趋势为下:

 下面是改进的功率分配方案与固定功率分配方案的和速率进行比较

 可以清楚地看到,就可实现的容量而言,改进的功率分配方案优于固定功率分配方案。

以下是仿真代码:

clc; clear variables; close all;

N = 10^5;
df = 5000; dn = 1000; %Distances

eta = 4;
hf = sqrt(df^-eta)*(randn(1,N) + 1i*randn(1,N))/sqrt(2);
hn = sqrt(dn^-eta)*(randn(1,N) + 1i*randn(1,N))/sqrt(2);

gf = (abs(hf)).^2;
gn = (abs(hn)).^2;

R1 = 1;  %Target rate bps/Hz

epsilon = (2^(R1))-1; %Target SINR

%Transmit power
Pt = 0:30;
pt = (10^-3)*db2pow(Pt);

%Noise power
No = -114;
no = (10^-3)*db2pow(No);

b1 = 0.75; b2 = 0.25; %Fixed PA for comparison
for u = 1:length(pt)
    a1 = epsilon*(no + pt(u)*gf)./(pt(u)*gf*(1+epsilon));
    a1(a1>1) = 0;
    a2 = 1 - a1;
    
    %Sum rate of fair PA
    C1 = log2(1 + pt(u)*a1.*gf./(pt(u)*a2.*gf + no));
    C2 = log2(1 + pt(u)*a2.*gn/no);
    
    C_sum(u) = mean(C1+C2);
    
    %Sum rate of fixed PA
    C1f = log2(1 + pt(u)*b1.*gf./(pt(u)*b2.*gf + no));
    C2f = log2(1 + pt(u)*b2.*gn/no);
    C_sumf(u) = mean(C1f+C2f);
end

plot(Pt,C_sum,'linewidth',1.5); hold on; grid on;
plot(Pt,C_sumf,'linewidth',1.5);
legend('Fair PA','Fixed PA \alpha_1 = 0.75, \alpha_2 = 0.25')
xlabel('Transmit power (dBm)');
ylabel('Sum rate (bps/Hz)');









参考:

  1. "The impact of power allocation on cooperative non-orthogonal multiple access with SWIPT", Z. Yang, Z. Ding, P. Fan and N. Al-Dhahir, IEEE transactions on wireless communications, vol.6, no.7, July 2017
  2. F. Kara, H. Kaya, BER Performances of Downlink and Uplink NOMA in the Presence of SIC Errors over Fading Channels. IET Communications. Vol. 12, no. 15, pp. 1834-1844.
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的MATLAB代码实现NOMA传输的例子: ``` % 定义参数 N = 4; % 用户数 M = 16; % 调制阶数 Ptot = 1; % 总功率 P1 = 0.6; % 用户1的功率比例 P2 = 0.3; % 用户2的功率比例 P3 = 0.1; % 用户3的功率比例 P4 = 0; % 用户4的功率比例 % 生成随机信息 b1 = randi([0 1], 1, 2*N); % 用户1的信息 b2 = randi([0 1], 1, 2*N); % 用户2的信息 b3 = randi([0 1], 1, 2*N); % 用户3的信息 b4 = randi([0 1], 1, 2*N); % 用户4的信息 % 生成QPSK调制信号 x1 = qammod(b1, M); x2 = qammod(b2, M); x3 = qammod(b3, M); x4 = qammod(b4, M); % 做NOMA功率分配 Ptot1 = Ptot * P1; % 用户1的功率 Ptot2 = Ptot * P2; % 用户2的功率 Ptot3 = Ptot * P3; % 用户3的功率 Ptot4 = Ptot * P4; % 用户4的功率 % 生成NOMA信号 s1 = sqrt(Ptot1) * x1 + sqrt(Ptot2) * x2 + sqrt(Ptot3) * x3 + sqrt(Ptot4) * x4; s2 = sqrt(Ptot2) * x2 + sqrt(Ptot3) * x3 + sqrt(Ptot4) * x4; s3 = sqrt(Ptot3) * x3 + sqrt(Ptot4) * x4; s4 = sqrt(Ptot4) * x4; % 添加高斯噪声 SNR = 15; % 信噪比 s1_noise = awgn(s1, SNR); s2_noise = awgn(s2, SNR); s3_noise = awgn(s3, SNR); s4_noise = awgn(s4, SNR); % 解码NOMA信号 b1_hat = qamdemod(s1_noise - sqrt(Ptot2) * x2 - sqrt(Ptot3) * x3 - sqrt(Ptot4) * x4, M); b2_hat = qamdemod(s2_noise - sqrt(Ptot3) * x3 - sqrt(Ptot4) * x4, M); b3_hat = qamdemod(s3_noise - sqrt(Ptot4) * x4, M); b4_hat = qamdemod(s4_noise, M); % 计算误码率 BER1 = sum(b1 ~= b1_hat) / length(b1); BER2 = sum(b2 ~= b2_hat) / length(b2); BER3 = sum(b3 ~= b3_hat) / length(b3); BER4 = sum(b4 ~= b4_hat) / length(b4); ``` 这个例子中,我们假设有4个用户,使用QPSK调制,通过NOMA进行传输。我们生成了随机信息并进行QPSK调制,然后进行NOMA功率分配,生成NOMA信号。接着我们添加高斯噪声,并对NOMA信号进行解码,最后计算误码率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值