m在VBLAST协作MIMO系统分部使用LDPC,Turbo,卷积三种信道编译码进行误码率matlab仿真
创始人
2024-02-08 12:38:29
0

目录

1.算法描述

2.仿真效果预览

3.MATLAB部分代码预览

4.完整MATLAB程序


1.算法描述

 

       从上面的结构可知,整个卷积编码的结构可由CRC校验,卷积编码,打孔组成,其中打孔的作用就是讲卷积编码后的码率变为所需要的码率进行发送。

这里,我们采用如下的数据帧方式进行:

       首先,每次发送的数据长度为:221,进行CRC校验之后为253,然后通过卷积编码之后的长度为512,注意,这里对于213卷积编码,需要将编码前的数据自动加3个0进行补偿。

 

 里,我们使用卷积编码的参数为213系统,编码码率为1/2,所以这里就不需要打孔了。

所以整个卷积编码的结构为校验,编码,译码,校验,四个部分构成。

参数指标:

2.仿真效果预览

matlab2013B仿真结果如下:

 

 

3.MATLAB部分代码预览

........................................................................
for kk = 1:length(EbNo)disp('当前EbNo:');EbNo(kk)totalNumErr = 0;count       = 0;SNR         = 10^(EbNo(kk)/10);N0          = 2*10^(-EbNo(kk)/10);sigma       = 1/(sqrt(SNR)/2);   ii          = 0;Dsd         = 36;          %db数Dsr         = 36;Drd         = 36;Qsd         = sqrt(10^(Dsd/10));Qsr         = sqrt(10^(Dsr/10));Qrd         = sqrt(10^(Drd/10));     LL          = 2;while (totalNumErr < Error_Num)totalNumErr%%RandStream.setDefaultStream(RandStream('mt19937ar','seed',sum(count)));%%%发送端%发送端%产生数据data       = round(rand(1,N-M)); %卷积213编码u          = turbo_encode(data) ;u          = [u 0 0];%交织u1         = interlace(u,16,16); %BPSKtx         = 2*u1 - 1;    %%%编码协作协议%编码协作协议%安论文中的卷积编码协作的结构框图进行设计%首先对于 发送信息分为两路进行发送Trans_N1    = tx;        Trans_N2    = tx;%ii=1的时候,发送自身的码字,而ii=2的时候发送协作的码字,从而达到时隙的效果ii          = ii + 1;        %将N1发送给目的地%将N1发送给目的地%作为发送信源%进行AF中继%信道增益Hsd=Qsd*(randn);Hsr=Qsr*(randn);Hrd=Qrd*(randn);%协作节点的放大增益B=sqrt(1/(abs(Qsr)^2*1));%===============================%最大合并比加权因子计算(第i个支路的可变增益加权系数为该分集之路的信号幅度与噪声功率之比)%计算增益A0=conj(Hsd)/(1/(sqrt(LL)*EbNo(kk)));A1=B*conj(Hsr)*conj(Hrd)/((B^2*(abs(Hsr))^2+1)*(1/(sqrt(LL)*EbNo(kk))));           %接收MIMO_Rx =  Trans_N1/max(abs(Trans_N1))+ 1/(sqrt(SNR))*randn(size(Trans_N1));Ysr      = Hsr*MIMO_Rx;Yrd      = Hrd*Ysr*B;Ysd      = Hsd*MIMO_Rx;Y        = A0*Ysd+A1*Yrd; %接收到的二进制信号MIMO_Rx1 = Y;    Rec_data1= sign(MIMO_Rx1); %将N1发送给用户2%将N1发送给用户2              %接收MIMO_Rx2   = Trans_N1/max(max(Trans_N1))+ 1/(sqrt(SNR))*randn(size(Trans_N1));Ysr        = Hsr*MIMO_Rx2;Yrd        = Hrd*Ysr*B;Ysd        = Hsd*MIMO_Rx2;Y          = A0*Ysd+A1*Yrd;       %接收到的二进制信号MIMO_Rx12  = Y;   Rec_data12 = sign(MIMO_Rx2);                     %第二时隙,用户2向目的端发送用户1的第二帧信号,即用户2重新编码得到的关于U1分组的N2比特校验码字对应的调制信号%在USER2中,将接收到的N1序列重新进行编码,然后将其中的序列N2发送给目的地%译码+校验:[Data_CRC2,LQs]         = turbo_decode(Rec_data12(1:end-2),zeros(N-M+3,1),Frame_Length); %编码Ldpc_trans_data_user2  = turbo_encode(Data_CRC2) ;Ldpc_trans_data_user2  = [Ldpc_trans_data_user2 0 0];Trans_N2_user2         = Ldpc_trans_data_user2;%N2序列Trans_N2_user3         = 2*Trans_N2_user2-1;%---------------------协作MIMO----------------------------------Hsd=Qsd*(randn);Hsr=Qsr*(randn);Hrd=Qrd*(randn);%协作节点的放大增益B=sqrt(1/(abs(Qsr)^2*1));%===============================%最大合并比加权因子计算(第i个支路的可变增益加权系数为该分集之路的信号幅度与噪声功率之比)%计算增益A0=conj(Hsd)/(1/(sqrt(LL)*EbNo(kk)));A1=B*conj(Hsr)*conj(Hrd)/((B^2*(abs(Hsr))^2+1)*(1/(sqrt(LL)*EbNo(kk))));           %接收MIMO_Rx =  Trans_N2/max(abs(Trans_N2))+ 1/(sqrt(SNR))*randn(size(Trans_N2));Ysr      = Hsr*MIMO_Rx;Yrd      = Hrd*Ysr*B;Ysd      = Hsd*MIMO_Rx;Y        = A0*Ysd+A1*Yrd; %接收到的二进制信号MIMO_Rx2 = Y;Rec_data2= sign(MIMO_Rx2);   YY1 = [MIMO_Rx12,MIMO_Rx2]';               YY2 = [Rec_data12]';        Tx  = reshape(YY2 - sqrt(-1)*YY2,Nt, Frame_Length/Nt);    RayleighMat = (rand(Nr, Nt) + j*rand(Nr, Nt));   rr          = size(RayleighMat*Tx,1);cc          = size(RayleighMat*Tx,2);r           = RayleighMat*Tx;  Hs          = RayleighMat;                                    HQ          = Hs*Q;         %%%下面开始联合迭代%下面开始联合迭代rr = r;     %初始半径,这里将搜索的范围变大,就是将系数alpha定为12.RR =(12*Nt)*(2/(10^(SNR/10)));                                   %按英文论文所示转变为实信号rev1=[real(rr);imag(rr)];  H1  = RayleighMat;%按英文论文所示信道转变为实矩阵HH=[real(H1(:,:)) -imag(H1(:,:));imag(H1(:,:))  real(H1(:,:))];              LA  = zeros(1,Frame_Length/2);LDs = 0;LD  = zeros(1,Frame_Length/2);LE  = zeros(1,Frame_Length/2);for Nout = 1:OUT_Iterif Nout == 1LA = zeros(1,Frame_Length/2);elseLA = LA2; end%球形mapfor J=1:Frame_Length/2                                            rev          = rev1(:,J);                %先计算|r-g*Si|^2[y_norm,LDs] = func_FP_MAP(rev,RR,HH,[-1,1],SNR);for jj=1:Nty_2norm(Nt*J+jj-Nt)=y_norm(jj)+j*y_norm(jj+Nt);                  end%每一个比特的后验似然比信息为LD(J) = LDs;end   %外部迭代主要计算 LE = LD - LA;%解交织LE_itrlac_code = de_interlace(LE,16,16); %用于LDPC译码节点更新DM_msg  = reshape(real(y_2norm),log2(P),Nt*Frame_Length/2);for ii2 = 1:length(DM_msg)if DM_msg(ii2)~=0DM_msg2(ii2) = abs(DM_msg(ii2)+1)/2;elseDM_msg2(ii2) = 0; endend       DM_msg3 = de_interlace(DM_msg,16,16); %用于LDPC译码节点更新%内部迭代卷积里面[z_hat,LQ] = turbo_decode(DM_msg3(1:end-2),LE_itrlac_code',Frame_Length);x_hat      = z_hat;%交织tmp = LQ(1:length(LE_itrlac_code)) - LE_itrlac_code;%交织LA2 = interlace(tmp,16,16);             end%===========================================================================count       = count + 1;totalNumErr = totalNumErr + biterr(round(x_hat), data);endBERs(kk) = totalNumErr/(count*Frame_Length);
end
01_054_m

4.完整MATLAB程序

matlab源码说明_我爱C编程的博客-CSDN博客

V

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...