m在VBLAST协作MIMO系统分部使用LDPC,Turbo,卷积三种信道编译码进行误码率matlab仿真

简介: m在VBLAST协作MIMO系统分部使用LDPC,Turbo,卷积三种信道编译码进行误码率matlab仿真

1.算法描述

1.png
2.png

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

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

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

3.png

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

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

参数指标:

4.png

2.仿真效果预览
matlab2013B仿真结果如下:
5.png
6.png
7.png

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); 
        %BPSK
        tx         = 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_Iter
            if Nout == 1
               LA = zeros(1,Frame_Length/2);
            else
               LA = LA2; 
            end
            %球形map
            for 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:Nt
                    y_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)~=0
                   DM_msg2(ii2) = abs(DM_msg(ii2)+1)/2;
                else
                   DM_msg2(ii2) = 0; 
                end
            end       
            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);
    end
    BERs(kk) = totalNumErr/(count*Frame_Length);
end
01_054_m
相关文章
|
26天前
|
数据可视化 数据安全/隐私保护 C++
开关磁阻电机(SRM)系统的matlab性能仿真与分析
本课题基于MATLAB 2022a对开关磁阻电机(SRM)系统进行性能仿真与分析,涵盖平均转矩、转矩脉动、自感与互感、功率及效率等关键参数的对比研究。通过程序仿真,生成了相电流、转子角度、机械转速等多维度数据关系图。SRM以其无刷、无永磁体的特点,具备高可靠性和低成本优势,其工作原理基于磁阻最小原则,通过控制定子绕组电流实现连续旋转运动。核心程序实现了不同电流下平均转矩的计算与可视化,为SRM优化设计提供了理论依据。
|
1月前
|
算法 数据安全/隐私保护
基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真
本程序基于二次规划优化的OFDM系统PAPR抑制算法,旨在降低OFDM信号的高峰均功率比(PAPR),以减少射频放大器的非线性失真并提高电源效率。通过MATLAB2022A仿真验证,核心算法通过对原始OFDM信号进行预编码,最小化最大瞬时功率,同时约束信号重构误差,确保数据完整性。完整程序运行后无水印,展示优化后的PAPR性能提升效果。
|
1月前
|
算法 数据安全/隐私保护
基于GARCH-Copula-CVaR模型的金融系统性风险溢出效应matlab模拟仿真
本程序基于GARCH-Copula-CVaR模型,使用MATLAB2022A仿真金融系统性风险溢出效应。核心功能包括计算违约点、资产价值波动率、信用溢价及其直方图等指标。GARCH模型用于描述资产收益波动性,Copula捕捉依赖结构,CVaR度量极端风险。完整代码无水印输出。 具体步骤:首先通过GARCH模型估计单个资产的波动性,再利用Copula方法构建多资产联合分布,最后应用CVaR评估系统性风险。程序展示了详细的运行结果和图表分析,适用于金融市场风险量化研究。
|
2月前
|
监控 算法 数据安全/隐私保护
基于扩频解扩+turbo译码的16QAM图传通信系统matlab误码率仿真,扩频参数可设置
本项目基于MATLAB 2022a实现图像传输通信系统的仿真,涵盖16QAM调制解调、扩频技术和Turbo译码。系统适用于无人机图像传输等高要求场景,通过扩频解扩和Turbo译码提升抗干扰能力。核心程序包括图像源处理、16QAM调制、扩频编码、信道传输、解扩及Turbo译码,最终还原并显示RGB图像。仿真结果无水印,操作步骤配有视频指导。
55 5
|
2月前
|
监控 算法 数据安全/隐私保护
基于扩频解扩+turbo译码的QPSK图传通信系统matlab误码率仿真,扩频参数可设置
本项目基于MATLAB 2022a实现图像传输通信系统的仿真,涵盖QPSK调制解调、扩频技术和Turbo译码。系统适用于无人机图像传输等高要求场景,确保图像质量和传输稳定性。通过仿真,验证了系统在不同信噪比下的性能,展示了图像的接收与恢复效果。核心代码实现了二进制数据到RGB图像的转换与显示,并保存不同条件下的结果。
43 6
|
2月前
|
算法 数据安全/隐私保护
基于AutoEncode自编码器的端到端无线通信系统matlab误码率仿真
本项目基于MATLAB 2022a实现自编码器在无线通信系统中的应用,仿真结果无水印。自编码器由编码器和解码器组成,通过最小化重构误差(如MSE)进行训练,采用Adam等优化算法。核心程序包括训练、编码、解码及误码率计算,并通过端到端训练提升系统性能,适应复杂无线环境。
139 65
|
8月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
319 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
8月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
257 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
8月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
198 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
11月前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度

热门文章

最新文章