目录
1.算法概述
2.仿真效果预览
3.核心MATLAB代码预览
4.完整MATLAB程序
1.算法概述
恒定包络( Constant Enve-lope,CE) 预编码;
该算法规定,每根天线上的发射功率被限定为一个与信道条件和信号符号均无关的常数,各根天线均发射恒包络信号,符号信息由其相位携带,接收端通过将各根天线发出的恒包络信号进行矢量合成后,即可得到一个与之相应的星座点,同时也就降低了 PAPR。
脏纸编码 ( Dirty Paper Coding,DPC) 算法
脏纸编码( Dirty - Paper Coding,DPC) 算法的基本思想是:假设一张纸上有许多相互独立的污点,且书写者准确知道它们的分布状况(即完美的CSI),那么,只要书写者采用一种与之相适应的书写方式,就可以使得阅读者在不知道污点分布状况的情形下,仍旧可以获取书写者想要传递的信息,这就可以使信道容量达到最大。 简单说就是在节省资源的条件下,将多用户信息叠加在一起。
如果基站端掌握了完备的 CSI,那么使用 DPC 预编码是最佳的选择,因为它可以使信道的利用率达到最大。同时,虽然在实际系统中获取完备的 CSI 非常困难,即 DPC 算法几乎不可能得到应用,但其理论性能指标可以作为ZF 和 MMSE 等传统预编码算法的参考基准 。
THP 预编码算法
它是一种连续的非线性预编码技术,可以对下行链路子信道间产生的相互干扰进行均衡。与 DPC 算法极其类似,是一个串行进行的过程,经过反馈之后,第二个用户可以消除来自第一个用户的干扰,第三个用户可以消除来自第一个和第二个用户的干扰,如此类推下去,就可以达到消除符号间干扰、提高误符号率性能的目的,是一种具有实际意义的预编码算法。
与 DPC 的不同之处在于 THP 预编码算法中加入了模运算,虽然 THP 预编码算法在性能上不如DPC,但它可以有效降低发射功率。当然,它也需要基站端掌握完备的信道状态信息 。
矢量预编码算法
相对于 THP 而言,向量扰动预编码是更广义的脏纸编码算法。它的算法原理是:在原本要发射的信号上加上一个扰动矢量,可以使原发射信号的发射功率最小化。向量扰动预编码算法面临的问题就转换成为寻找最优扰动矢量的最优化问题 。
在多输入多输出(MIMO)应用中,大规模 MIMO 和传统 MIMO 相比,除了可以通过预编码提升误比特性能外,还可以大幅提升系统容量。
现有的多用户预编码可以分为线性和非线性预编码两类,两类预编码有各自的优点,线性预编码实现简单并且性能可观,非线性预编码实现稍显复杂但是性能要远优于线性预编码。与线性预编码相对应,非线性模代数(THP)预编码可以基于迫零准则设计也可以基于最小均方误差准则设计。
THP预编码算法是基于DPC编码的,相比之下,THP复杂度更低,并同时延续了DPC的诸多优点,由于采用了取模操作,因而属于一种非线性预编码方式。在MIMO系统中,THP能够近似达到系统容量上限,但是,其实现前提是能有效获取到CSI。在目前的THP算法中,主要基于ZF与MMSE准则设计。
下面针对THP的原理和实现展开详细描述,图1给出了多用户MIMO系统下的THP框图,较传统线性预编码而言,THP较为复杂。
发送方的预编码主要有两种类型:线性和非线性.线性预编码的典型例子是匹配滤波预编码(MFP)和迫零滤波预编码(ZFP).MFP受制于残留干扰(remaining interference),ZFP受制于发送功率的增强.
非线性预编码的例子:(THP)原本是用于单用户系统中均衡以消除ISI,它等效于在接收端的判决反馈均衡器.通过部分信号处理由接收端转移到发送端,降低了MS的计算复杂度,可以避免错误传递(error propagation)和立即判决(immediate decision)。
多入多出技术(MIMO)以满足快速增长的用户需求,而在采用MIMO系统的点对多点通信中,需要采用预编码以抑制用户间干扰,THP预编码就是一种有效的非线性预编码方式,可以获得很好的系统性能.本文从多用户MIMO-THP系统结构模型出发,介绍了基于ZF准则以及MMSE准则的THP预编码算法,并比较两者性能;同时在此基础上,对加入了功率分配的多用户MIMO-THP系统以多用户及排序MIMO-THP进行深入研究,分析和仿真.
2.仿真效果预览
matlab2022a仿真结果如下:
3.核心MATLAB代码预览
for index = 1:Len;%不同信噪比的循环
index
snr = 10.^(SNR(index)/10);
ea = 1;% 每个天线发射的功率,也即信号向量中每个元素的功率
es = ea*Nt; % 总共的发射功率
sigma_n2 = es/snr;% noise power
for cnt = 1:Iter_num;% 信道的实现次数的循环
H = sqrt(1/2)*(randn(Nr,Nt)+j*randn(Nr,Nt));% H
for sym_index = 1:num; %在一帧数据符号中,信道保持不变
Source = floor(M*rand(Nt,1));% random data generator
Sym = pskmod(Source,M,pi/4,'gray'); % qpsk modulator
[d_thp,beta] = THP_encoder(Sym,H,period);% 对符号进行THP预编码
noise = sqrt(sigma_n2/2)*(randn(Nr,1)+j*randn(Nr,1));%生成噪声功率为sigma_n2
y_thp = H*d_thp + noise(:,1);% 通过信道并加噪声
r_thp = beta*y_thp;% 进行接收端的缩放
Rec_thp = mod_thp(r_thp,period);
Rec_Data_thp = pskdemod(Rec_thp,M,pi/4,'gray');% 对接收信号进行判决
[err ratio] = biterr(Rec_Data_thp,Source,log2(M));% ber
ber_thp(1,index) = ber_thp(1,index) + ratio;
end; % loop for num
end; % loop for iteration
end % loop for snr
A008
4.完整MATLAB程序
matlab源码说明_我爱C编程的博客-CSDN博客
V