m基于MIMO-OFDM-LDPC-STBC的通信链路matlab误码率仿真

简介: m基于MIMO-OFDM-LDPC-STBC的通信链路matlab误码率仿真

1.算法仿真效果
matlab2013b仿真结果如下:

dac30433f8815bfe2a4789ea4b35ce66_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
76c44f2d97ac8ed7d29e941509b274a5_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
39fb523b3ba9f58fcf3f5dc5fac1a3d1_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

使用一个二值图进行测试,并加入不同的均衡算法进行对比:

8416334a04e5e721e4ede2ad55889fae_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.算法涉及理论知识概要
c1c541a81110b172dff15f600dab6b89_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

   LDPC码是麻省理工学院Robert Gallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和实现简单,易于进行理论分析和研究,译码简单且可实行并行操作,适合硬件实现。

   LDPC 码可以通过校验矩阵 H 来唯一确定,校验矩阵 H 是大小为m*n 的稀疏矩阵,其中m 为校验位长度,n 为 LDPC 码码长,信息位长度为 k =n-m 。LDPC 码可以分为规则 LDPC 码和非规则 LDPC 码两种[3]。规则 LDPC 码的校验矩阵中不仅每一行中非零元素的个数是相同的,而且每一列中非零元素的个数也是相同的,而非规则LDPC码则不受到该条件的限制。下图给出的是一种规则LDPC码的校验矩阵。

    除了使用校验矩阵的方式来表示 LDPC 码之外,Tanner 在 1981 年提出的用 Tanner图来描述码字的方法可以形象的表示 LDPC 码的特性[4]。下图中表示的 Tanner 图与上图中的校验矩阵相对应。

b9fe25a93ae7f0e80f4fbc9f01a67815_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

   空时分组码(STBC)是一种在无线通信中使用的技术,用于在多个天线上发送数据流的多个副本,并利用各种接收的数据版本来提高数据传输的可靠性。 

 空时分组码(STBC)与正交频分复用(OFDM)相结合的STBC-OFDM技术可以有效对抗多径效应和频率选择性衰落,在复杂通信环境中提高传输效率,降低误码率,并且编译码简单。在Matlab中构建STBC-OFDM系统仿真平台,进行了仿真系统参数的选择,并根据各种不同的信道环境,对系统误码特性进行了评估。仿真结果主要仿真了不同天线数、不同调制、不同多普勒、不同时延扩展的影响.
   在通信系统中,信道所能提供的带宽通常比传送一路信号所需的带宽要宽得多。如果一个信道只传送一路信号是非常浪费的,为了能够充分利用信道的带宽,就可以采用频分复用的方法。

OFDM主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。正交信号可以通过在接收端采用相关技术来分开,这样可以减少子信道之间的相互干扰(ISI) 。每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上可以看成平坦性衰落,从而可以消除码间串扰,而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。
通常的数字调制都是在单个载波上进行,如PSK、QAM等。这种单载波的调制方法易发生码间干扰而增加误码率,而且在多径传播的环境中因受瑞利衰落的影响而会造成突发误码。若将高速率的串行数据转换为若干低速率数据流,每个低速数据流对应一个载波进行调制,组成一个多载波的同时调制的并行传输系统。这样将总的信号带宽划分为N个互不重叠的子通道(频带小于Δf),N个子通道进行正交频分多重调制,就可克服上述单载波串行数据系统的缺陷。在向B3G/4G演进的过程中,OFDM是关键的技术之一,可以结合分集,时空编码,干扰和信道间干扰抑制以及智能天线技术,最大限度的提高了系统性能。包括以下类型:V-OFDM, W-OFDM, F-OFDM, MIMO-OFDM,多带-OFDM。OFDM中的各个载波是相互正交的,每个载波在一个符号时间内有整数个载波周期,每个载波的频谱零点和相邻载波的零点重叠,这样便减小了载波间的干扰。由于载波间有部分重叠,所以它比传统的FDMA提高了频带利用率。
空时分组码是一种在无线通信中使用的技术,用于在多个天线上发送数据流的多个副本,并利用各种接收的数据版本来提高数据传输的可靠性。 传输信号必须穿过具有散射,反射,折射等的潜在困难环境,然后可能被接收器中的热噪声进一步破坏,这意味着一些接收到的数据副本将比其他更好。 这种冗余导致能够使用一个或多个接收到的副本来正确解码接收信号的机会更高。 实际上,空时编码以最佳方式组合所接收信号的所有副本,以尽可能多地从每个副本中提取信息。

   STBC通常由矩阵表示。每行代表一个时隙,每列代表一个天线随时间的传输。

1a7d9e4588f68c675761d7c33fa18bc0_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

     这是一个非常特殊的STBC。它是唯一达到率-1的正交STBC。也就是说,它是唯一能够在不需要牺牲数据速率的情况下实现其全部分集增益的STBC。严格地说,这仅适用于复杂的调制符号。由于几乎所有的星座图都依赖于复数,因此该属性通常使Alamouti的代码比高阶STBC具有显着的优势,即使它们实现了更好的错误率性能。

    Alamouti在1998年提出的建议的重要性在于它首次证明了一种编码方法,它能够在接收机上实现线性处理的完全多样性。早期关于发射分集的提议需要处理方案,其与发射天线的数量成指数地缩放。此外,它是第一个具有这种能力的开环发射分集技术。随后对Alamouti概念的概括已经对无线通信行业产生了巨大影响。

3.MATLAB核心程序
```SNRs = 10;%可修改参数

Modes = 4; %只支持QPSK
isldpc = 1;
%OFDM长度
Nfft = 512;
%子载波数目
NCarrier = 64;
%符号数/载波
Nsymbols = 8;
%循环前缀长度
Ncp = 10;
Nadder = Nfft+Ncp;

%位数/符号
Nbits = log2(Modes);
%LDPC相关参数
Rl = 0.5;%设置码率为
Nl = Nsymbols*NCarrier;

Ml = Nl*Rl;
Hl = mackay(Ml,Nl);

%发送天线矩阵
Tr_matrix =[1 2;-2+j 1+j];
NTr_matrix= size(Tr_matrix,1);
Nt = size(Tr_matrix',2); %发射天线数目
Nr = 2; %接收天线数目
%发射
[Nxx,data_eta,data_delta,data_eps,data_cojm] = func_trans_x(Nt,Tr_matrix,NTr_matrix);
%子载波
Carriers = (1: NCarrier) + (floor(Nfft/4) - floor(NCarrier/2));
Len_carriers = Nfft-Carriers+2;
Tx_training = func_training_symbol(Nt,NCarrier);
Nbase = NCarrier * Nsymbols;
LENS = 1000;
II = im2bw(imresize(rgb2gray(imread('a.jpg')),[Nbase/2,Nbase/2]));
%绘图信息存储矩阵
IMAGE = zeros(Nbase/2,Nbase/2);
IMAGE = II;
figure;
subplot(121);
imshow(IMAGE);
title('原始图像');
IMAGE2 = zeros(Nbase/2,Nbase/2);
Bers=zeros(length(SNRs),1);

for j_snr = 1:length(SNRs)

CNT   = 0;
error = 0;
while CNT <= 127;
      SNRs(j_snr)
      error

        CNT = CNT + 1;

        Nerror       = zeros(1,Nr); 
        data_buffer1 = zeros(NCarrier,Nsymbols,Nr); 
        data_bits    = zeros(Nbase,Nbits,Nr);  
        N0           = 2*10^(-SNRs(j_snr)/10);
        %生成随机数用于仿真
        if  isldpc == 1; 
            %Tsignal0     = round(rand(Nbase/2,Nbits));  
            Tsignal0     = IMAGE(:,2*CNT-1:2*CNT);  

            Tsignal      = [Tsignal0;Tsignal0];
            %LDPC
            HS           = cell(1,Nbits);
            for ix = 1:Nbits
                [ldpc_code,newH] = func_Enc(Tsignal0(:,ix),Hl);
                Tsignal(:,ix)    = [ldpc_code;Tsignal0(:,ix)];
                HS{ix}           = newH;
            end
        end
        if  isldpc == 0; 
            Tsignal0     = round(rand(Nbase,Nbits));  
            Tsignal      = [Tsignal0];
        end



        Tsignal2     = bi2de(Tsignal); 
        %PSK/QAM调制 
        if Modes == 2 | Modes == 4
           Tsignal_mod  = pskmod(Tsignal2,Modes,0); 
        end
        if Modes == 16 | Modes == 64
           Tsignal_mod  = qammod(Tsignal2,Modes,0); 
        end            


        Tcar_mat     = reshape(Tsignal_mod,NCarrier,Nsymbols);                     
        for st1=1:Nt:Nsymbols                              
            data = []; 
            for st2=1:Nt 
                data=[data;Tcar_mat(:,st1+st2-1)]; 
            end 
            %STBC 
            data_stbc = func_stbc(data,Tr_matrix,NTr_matrix,NCarrier,Nt);
            %添加训练序列       
            data_stbc = [Tx_training;data_stbc];                                            
            data_rec    = zeros(1,Nadder*(NTr_matrix+1),Nr); 
            for st11=1:Nr 
                for st2=1:Nt 

...........................................................................

                %解调
                if Modes == 2 | Modes == 4
                   r_sym  = pskdemod(data_recf,Modes,0); 
                end
                if Modes == 16 | Modes == 64
                   r_sym  = qamdemod(data_recf,Modes,0); 
                end     


                data_buffer1(:,st1:st1+Nt-1,st11) = r_sym; 
            end
        end
        data_bufferf = zeros(Nbase,Nr); 



        for st11=1:Nr 
            tmps1                = data_buffer1(:,:,st11); 
            data_bufferf(:,st11) = tmps1(:); 
            data_bits(:,:,st11)  = de2bi(data_bufferf(:,st11)); 
            if  isldpc == 1; 
                Recfind = [];
                %LDPC译码
                for ix = 1:Nbits
                    [vhatsd,nb_itersd,successsd] = func_Dec(2*data_bits(:,ix,st11)-1,HS{ix},N0,30);
                    Recfind(:,ix) = vhatsd(Ml+1:Nl)';
                end
            end
            if  isldpc == 0; 
                Recfind = [];
                Recfind(:,:) = data_bits(:,:,st11);
            end                



            for st22=1:Nbase/2                                              
                for st33=1:Nbits 
                    if Recfind(st22,st33)~=Tsignal0(st22,st33) 
                       Nerror(st11) = Nerror(st11) + 1; 
                    end 
                end 
            end
        end
        error = error + mean(Nerror);
        IMAGE2(:,2*CNT-1:2*CNT) = Recfind;
end

Bers(j_snr)=error/(Nbase)/CNT/Nbits;

end
```

相关文章
|
4天前
|
资源调度 监控 算法
基于扩频解扩+LDPC编译码的QPSK图传通信系统matlab误码率仿真,扩频参数可设置
该通信系统主要用于高质量图像传输,如无人机、视频监控等场景。系统采用QPSK调制解调、扩频技术和LDPC译码,确保复杂电磁环境下的稳定性和清晰度。MATLAB仿真(2022a)验证了算法效果,核心程序包括信道编码、调制、扩频及解调等步骤,通过AWGN信道测试不同SNR下的性能表现。
27 6
基于扩频解扩+LDPC编译码的QPSK图传通信系统matlab误码率仿真,扩频参数可设置
|
1天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PPO强化学习的buckboost升降压电路控制系统matlab仿真,对比PID控制器
本项目利用MATLAB 2022a对基于PPO强化学习的Buck-Boost电路控制系统进行仿真,完整代码无水印。通过与环境交互,智能体学习最优控制策略,实现输出电压稳定控制。训练过程包括初始化参数、收集经验数据、计算优势和奖励函数并更新参数。附带操作视频指导,方便用户理解和应用。
25 12
|
5天前
|
算法
基于PSO粒子群优化的配电网可靠性指标matlab仿真
本程序基于PSO粒子群优化算法,对配电网的可靠性指标(SAIFI、SAIDI、CAIDI、ENS)进行MATLAB仿真优化。通过调整电网结构和设备配置,最小化停电频率和时长,提高供电连续性和稳定性。程序在MATLAB 2022A版本上运行,展示了优化前后指标的变化。PSO算法模拟鸟群行为,每个粒子代表一个潜在解决方案,通过迭代搜索全局最优解,实现配电网的高效优化设计。
|
2天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
1天前
|
算法
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
本项目基于梯度流的扩散映射卡尔曼滤波算法(GFDMKF),用于信号预处理的MATLAB仿真。通过设置不同噪声大小,测试滤波效果。核心代码实现数据加载、含噪信号生成、扩散映射构建及DMK滤波器应用,并展示含噪与无噪信号及滤波结果的对比图。GFDMKF结合非线性流形学习与经典卡尔曼滤波,提高对非线性高维信号的滤波和跟踪性能。 **主要步骤:** 1. 加载数据并生成含噪测量值。 2. 使用扩散映射捕捉低维流形结构。 3. 应用DMK滤波器进行状态估计。 4. 绘制不同SNR下的轨迹示例。
|
5月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
240 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
5月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
144 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
5月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
113 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
8月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)

热门文章

最新文章