大家好,欢迎来到IT知识分享网。
NOMA(非正交多址接入技术)
NOMA基本概念
NOMA,全称是Non-Orthgonal Multiple Access,对应中文是非正交多址接入。
基本思想是在发送端采用非正交发送,主动引入干扰信息,在接收端通过串行干扰消除(SIC)接收机实现正确解调。
NOMA是非正交多址,而并非非正交频分,即NOMA的子信道传输仍然采用OFDM,子信道之间是正交的。但是一个子信道上不再只分配给一个用户,而是多个用户共享,同一子信道上不同用户之间是非正交传输。
在发送端,对同一子信道上的不同用户采用功率复用技术进行发送,不同用户的信号功率按照相关的算法进行分配,这样到达接受端每个用户的信号功率都不一样,SIC接收机再根据不同用户信号功率大小按照一定的顺序进行干扰消除,实现正确解调,同时也达到了区分用户的目的。
上行NOMA与下行NOMA
上行NOMA(MAC信道)
特点:多点发送、单点接收,单用户功率受限,同时发送的用户数越多则总功率越高,发送端难以联合处理而接收端可以联合处理。
下行NOMA(BC广播信道)
特点:单点发送、多点接收,总发送功率受限,发送端可以联合处理而接收端难以联合处理。
对于信道质量差即信道增益低的用户,给之分配更高的功率,反之,分配更低的功率。这便引出了功率分配问题。
可行的优化目标:
- 总功率受限,最大化下行速率
SIC解码顺序
下行NOMA中,基站将不同用户的信号叠加在一起,UE来实现连续干扰消除技术;而在上行中,基站来实现多用户检测和连续干扰消除技术。
在NOMA下行场景中,基站侧将用户1和2的信号叠加在一起,即
对于User1,接收信号y1=h1x+n1,对于User2,接收信号y2=h2x+n2。
弱用户User1直接解出自己的信号即可,此时将User2的信号当做干扰。
强用户User2先解出User1的信号,然后User2从其接收信号中减去User1的信号,再解自己的信号。
由于基站进行功率分配时,需要用到下行信道状态信息h1和h2,那基站是怎么知道下行CSI的?可以利用信道互易性或者UE利用上行信道进行反馈。
在NOMA上行场景中,基站侧解码顺序:
基站先解码出强用户User2的信号,然后从接收信号减去恢复出来的强用户的信号,之后再解弱用户User1的信号。
UE侧的处理能力有限,且缺少中心处理单元,因此上行链路相较于下行链路中更容易实现。
叠加编码(SC)与串行干扰消除(SIC)
叠加编码(superposition code,SC)
基站侧将不同用户信号进行叠加:
手机侧进行解码:
对于User1来说,收到叠加信号时,先进行均衡(即通过信道估计出h1,并对接收信号乘以h1的逆),然后直接解调出自己信号即可。
对于User2来说,收到叠加信号时,先进行均衡(即通过信道估计出h2,并对接收信号乘以h2的逆),先解调出User1的信号,随后重构出User1的信号,再从接收信号减去重构的User1信号,然后解调出User2的信号。
下面这段代码,是下行NOMA中,User1和User2在总功率约束的情况下,进行功率分配的过程。
% Calculate Power coefficients for each pair txParams.powerCoeffs = zeros(txParams.numUsers, 1); if (txParams.pwrAllocMthd == 1) for iter_pairs = 1: txParams.numUsers / 2 txParams.powerCoeffs(txParams.userPairs(iter_pairs, 1), 1) = (sqrt(1 + txParams.sysPower * abs(txParams.est_CSI(txParams.userPairs(iter_pairs, 2), 1)) .^ 2) - 1) / (txParams.sysPower * abs(txParams.est_CSI(txParams.userPairs(iter_pairs, 2), 1))); txParams.powerCoeffs(txParams.userPairs(iter_pairs, 2), 1) = txParams.sysPower - txParams.powerCoeffs(txParams.userPairs(iter_pairs, 1), 1); end elseif (txParams.pwrAllocMthd == 2) for iter_pairs = 1: txParams.numUsers / 2 txParams.powerCoeffs(txParams.userPairs(iter_pairs, 1), 1) = (sqrt(1 + txParams.sysPower * abs(txParams.est_CSI(txParams.userPairs(iter_pairs, 2), 1)) .^ 2) - 1) / (txParams.sysPower * abs(txParams.est_CSI(txParams.userPairs(iter_pairs, 2), 1))); txParams.powerCoeffs(txParams.userPairs(iter_pairs, 2), 1) = txParams.sysPower - txParams.powerCoeffs(txParams.userPairs(iter_pairs, 1), 1); end end
接下来是叠加编码:
%%%%%%叠加编码 superposition code for iter_pairs = 1: txParams.numUsers / 2 modDataMat(iter_pairs, :) = sqrt(txParams.powerCoeffs(txParams.userPairs(iter_pairs, 1), 1)) * modData(:, txParams.userPairs(iter_pairs, 1)); modDataMat(iter_pairs, :) = modDataMat(iter_pairs, :) + sqrt(txParams.powerCoeffs(txParams.userPairs(iter_pairs, 2), 1)) * modData(:, txParams.userPairs(iter_pairs, 2))'; end
对于接受端:
% SIC for iter_pairs = 1: txParams.numUsers / 2 pair_data = modDataMat(iter_pairs, :)'; for iter_user = 1: 2 H = txParams.CSI(txParams.userPairs(iter_pairs, iter_user)); H_hat = txParams.est_CSI(txParams.userPairs(iter_pairs, iter_user)); pair_data = H * pair_data; % Adding Channel effect pair_data = pair_data / H_hat; % Equalising Channel effect for iter_sic = 1: iter_user P = txParams.powerCoeffs(txParams.userPairs(iter_pairs, iter_sic), 1); %%%%解调、信道译码 -> 信道质量好的强用户 demodData = qamdemod(pair_data ./ sqrt(P), txParams.QAM, 'UnitAveragePower', 1, 'OutputType', 'approxllr'); usr_data = channelDecoding(demodData, txParams); %%%%信道编码、调制 -> 重构强用户的信号 enc_data = channelEncoding(usr_data, txParams); modData = qammod(enc_data, txParams.QAM, 'UnitAveragePower', 1, 'InputType', 'bit'); %%%%接收信号-强用户信号 == 弱用户信号,准备解调 pair_data = pair_data - H_hat * sqrt(P) * modData; end data(:, txParams.userPairs(iter_pairs, iter_user)) = usr_data; end end
串行干扰消除(SIC)
待补充
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/138498.html