m基于MIMO中继通信和非规则LDPC编译码的matlab仿真,其中波束形成为SVD,MMSE,中继包括AF,DF,CF

1.算法概述

即在非规则LDPC下,且源节点1个,中继一个,目标节点一个,天线也是1的情况对比三种中继协作协议的误码率。   


做非规则LDPC码的以编码协作形式中继协议,比较以下三种情况下误码率图和中断概率图:


源节点一个(配置一根天线),中继节点4个(每个节点配置一根天线),目的节点一个(节点配置一根天线)(1:4:1)


源节点2个,中继节点4个,目的节点1个(2:4:1)


源节点1个,中继节点4个,目的节点2个(1:4:2)


·141·241·142






2.仿真效果预览

matlab2022a仿真


·接收天线数量一定,噪比不变时性能随着发射天线数的增多而增大,但是提高的能力愈来愈慢。




中继节点的波束成形算法分别使用SVD,MMSE和SVD-MMSE混合算法,将这三种算法应用到该系统中,比较它们的误码率。




3.MATLAB部分代码预览

%LDPC参数

N        = 2*data_Numbers;%设置奇偶校验矩阵大小     

M        = N*R;

max_iter = 100;                 %最大迭代次数


load H;%H=getH(M,N)

load G;%G=getG(M,N);


figure;

imshow(H,[]);title('奇偶校验均值H直观图');



for i=1:length(EbN0)


N0            = 2*10^(-EbN0(i)/10);

Bit_err(i)    = 0;

Num_err       = 0;

Numbers       = 0; %误码率累加器


Dsd=5;          %db数

Dsr=4;

Drd=1;

Qsd=sqrt(10^(Dsd/10));

Qsr=sqrt(10^(Dsr/10));

Qrd=sqrt(10^(Drd/10));


while Num_err <= Times

Num_err

fprintf('Eb/N0 = %f\n', EbN0(i));

%产生需要发送的随机数

Trans_data  = round(rand(1,N-M));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%LDPC编码

u  = mod(Trans_data*G,2); %LDPC编码

%LDPC编码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%BPSK

Trans_BPSK  = 2*u-1;

%---------------------协作MIMO----------------------------------

%作为发送信源

MIMO_Tx(1,:) = sqrt(Pt)*Trans_BPSK;

%将源信号发送其他几个协作天线上,


%MIMO信道,期间考虑到路径损耗问题。

H_Ray = randn(Ra_num,Ta_num);

for r = 1:Ra_num

for s = 1:Ta_num

H_Ray(s,r) = k2(1)*H_Ray(s,r);

end

end       

x     = [];

HH    = H_Ray;

r     = N0;

w     = inv(HH'*HH+(1/EbN0(i))*eye(Ta_num))*HH';

y     = w*r;

xtemp = (y>=0)-(y<0)+0;

x     = [x,xtemp];   

a     = (x+1)/2;            


%进行AF中继

%信道增益

Hsd=Qsd*(randn);

Hsr=Qsr*(randn);

Hrd=Qrd*(randn);

%协作节点的放大增益

B=sqrt(1/(abs(Qsr)^2*1));

%===============================

%最大合并比加权因子计算(第i个支路的可变增益加权系数为该分集之路的信号幅度与噪声功率之比)

%计算增益

A0=conj(Hsd)/(1/EbN0(i));

A1=B*conj(Hsr)*conj(Hrd)/((B^2*(abs(Hsr))^2+1)*(1/EbN0(i)));           

%接收

MIMO_Rx =  MIMO_Tx/max(max(MIMO_Tx))+ sqrt(N0/2)*randn(size(MIMO_Tx));

Ysr      = Hsr*MIMO_Rx;

Yrd      = Hrd*Ysr*B;

Ysd      = Hsd*MIMO_Rx;

Y        = A0*Ysd+A1*Yrd;   

Y        = k3(1)*Y;       

Ysum(1,:,:) = Y;

Y2(:,:) = Ysum(1,:,:);


%接收到的二进制信号

MIMO_Rxs = a*Y2;

MIMO_Rx2 = k3(1:Ta_num)*MIMO_Rxs(:,:);    

Rec_data = sign(MIMO_Rx2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%LDPC译码

z_hat = func_Dec(Rec_data,N0,H,max_iter);

x_hat = z_hat(size(G,2)+1-size(G,1):size(G,2));                     

%LDPC译码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%           

if sum(Rec_data) == 0

nberr = 0;

disp('not count');

else

[nberr,rat]  = biterr(Trans_data,x_hat')

end         

Num_err     = Num_err+nberr;

Numbers     = Numbers+1;    

end

Bit_err(i)=Num_err/(N*Numbers);

end

01_038_m

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容