1.算法描述
基于matlab的协作mimo分布式空时编码技术的仿真,包括规则LDPC级联D-STBC,ML,ZF,DFE均衡,Fincke-Pohst-MAP算法检测。将规则LDPC加入这个协作MIMO的D-STBC里,即是将LDPC码与D-STBC级联,发送端用LDPC编码发送到协作节点,然后协作节点用D-STBC码形式转发到发送端。做出 ML、ZF-OSIC和 ,RLS-MIMO-DFE三种检测算法误码率的性能比较(注意:发送端到中继协作节点过程中,中继协作节点对源信号的处理三种协议:放大转发,解码转发和编码协作,所以这分别三种协议下的三种检测算法要分别做),以及LDPC与D-STBC结合的协作MIMO系统与没有LDPC码的协作MIMO的D-STBC系统在ML检测算法下性能比较(只做“编码协作协议”下)。比较LDPC级联D-STBC的协作MIMO系统下,接收端检测分别采用ML算法和Fincke-Pohst MAP。
多中继放大转发(AF, Amplify and Forward)和译码转发(DF, Decode and Forward)协议的主要缺点是中继采用正交子信道传输降低了频谱利用率。这引发了人们对分布式空时编码(DSTC, Distributed Space Time Coding)的研究。 目前多中继AF协议的中继选择和功率分配算法研究较多,但是通常只考虑不同中继使用正交信道传输的情况,而结合DSTC进行中继选择和功率分配算法的研究还不多。本文在研究多中继AF协议的基础上,针对DSTC系统的中继选择算法和功率分配算法开展研究。 首先,介绍分集技术、协作通信和空时编码相关知识,在此基础上引入DSTC,重点分析基于AF的DSTC,并给出对应的准正交空时编码(QOSTC, Quasi-Orthogonal Space Time Code)。 然后,针对DSTC系统中最大似然(ML, Maximum Likelihood)检测计算复杂度高的问题,我们利用线性分散码(LD, Linear Dispersion)的线性性质,将迫零(ZF, Zero Forcing)检测算法用于基于LD的DSTC。该ZF检测算法在基本保持误比特率(BER, Bit Error Rate)性能的同时,降低了检测的计算复杂度。 接着,研究DSTC系统的中继选择算法,推导DSTC系统中信宿的接收信噪比(SNR, Signal to Noise Ratio)表达式,研究基于SNR准则的中继选择算法,为了降低算法的计算复杂度,使用一种次优中继选择算法,减少中继选择搜索次数。最后将该算法与已有算法作仿真比较。 最后,研究DSTC系统的功率分配算法,研究一种最大化信宿接收SNR的功率分配算法,该算法利用调和平均准则对多个中继进行功率分配,将信源和中继的功率分配问题转化为对信源功率的一维搜索问题。该算法能够根据信道条件调整信源和中继的发射功率。最后仿真对比中继选择和功率分配的两种结合方案:中继选择之后功率分配和中继选择同时功率分配,从仿真结果可以看出两种结合方案的BER性能接近,但是中继选择同时功率分配的方案具有更高的计算复杂度。
在实际的系统中,collocated MIMO (集中式 MIMO)技术的优点是有限的。造成这种限制的原因有两方面:
首先,空间相关性会导致性能下降。在一个 collocated MIMO 系统中,每个节点的天线必须放置得很近。在 collocated antennas 处的无线电信号经历了类似的散射环境,而且信道可能是相关的,特别是当发射机和接收机之间的视线信道占主导地位时。信道矩阵可能是 ill conditioned 的,导致显著的容量下降。
其次,由于终端尺寸的限制,节点不能配备很多天线。由于分集增益与天线数目成正比,天线数目少的 collocated MIMO 系统无法达到预期的性能。
为了缓解 collocated MIMO 系统的上述缺点,提出了一种新的分布式 MIMO (distributed MIMO)技术。分布式 MIMO 与 collocated MIMO 的主要区别在于,无线网络前端的多个天线分布在距离较远的无线节点之间。
在分布式MIMO系统中,每个节点只能配备一个天线。位于不同位置的多个节点将相同的信息发送给接收器。
这样,多个节点组成虚拟天线阵列,实现更高的空间分集增益。这种空间多样性称为用户协作多样性(user cooperation diversity),或简称协作多样性(cooperative diversity)。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
%L = 20; % RAU个数
M = 1; % RAU 天线数
K = 4; %用户个数
Ns = [2,4]; %用户天线数
% Mt = M*L; %发送总的天线数
% Nt = K * N; %接收总的天线数
c=1;
sigma_z2_dBm = -104;
sigma_z2 = 10^(sigma_z2_dBm/10)*0.001;
delta_sh_dB = 8;
detal_sh = 10^(delta_sh_dB/10);
alpha = 4;
% ---------------能量消耗参数--------------
tao = 0.38;
Pd_dBm = 30;
Pd = 10^(Pd_dBm/10)*0.001;
Ps_dBm = 40;
Ps = 10^(Ps_dBm/10)*0.001;
Po_dB = 0.1484;
Po = 10^(Po_dB/10);
iterNum = 1000;
Ptm = 46;
Pt = 10^(Ptm/10)*0.001/K;
Ls = [1:2:10,15:10:200];
for n = 1:length(Ns)
n
N = Ns(n);
for p = 1 :length(Ls)
L = Ls(p);
%P_Ideal = Pt/tao;
P_D_real = K*Pt/tao + M*L*Pd + Ps + Po;
P_C_real = K*Pt/tao + M*L*Pd + Ps;
for iter = 1:iterNum
[x_RAU, y_RAU, x_User, y_User] = SingleCell(L,K,Rc);
% ----------------------D_MIMO ------------------------------------
H = DAS_Channel(L, K, N, M, x_RAU, y_RAU, x_User, y_User, detal_sh, c, alpha);
%--计算理论值
for k = 1:K
h = H((k-1)*N+1:k*N,:);
I_D_ALL(k) = real(log2(det(eye(N) + (Pt * h * h')/(M*L*sigma_z2))));
end
I_D(n,p,iter) = sum(I_D_ALL);
%--计算近似值
lambda = log(10)/10;
tmp1 = 0;
tmp2 = 0;
for i = 0:M-1
tmp1 = tmp1 + log2(gamma(M - i + 1/N));
tmp2 = tmp2 + log2(gamma(M - i));
end
C_D(n,p,iter) = N*(log2(c*Pt/(Rc^alpha*sigma_z2)) + log2(exp(-(4-sqrt(3))*alpha/4)) + ...
+ log2(L) + tmp1 + ...
+ (alpha + lambda^2*detal_sh^2)/(2*log(2)) - tmp2);
C_D(n,p,iter)=K*C_D(n,p,iter);
end
I_D_avg = mean(I_D,3);
C_D_avg = mean(C_D,3);
EE_C_D_Real(n,p) = C_D_avg(n,p)/P_D_real;
EE_I_D_Real(n,p) = I_D_avg(n,p)/P_D_real;
end
end