MIMO系统Vblast检测算法误码率matlab仿真,对比了zf,mmse,mmse-sic,zf-sic,osic

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

2.算法涉及理论知识概要

        移动通信系统的性能在很大程度上决定于无线信道的特性。单发单收系统无线信道的特性已经研究得很透彻,针对其各通信标准所采用的载频、带宽、环境等都有权威机构给出实测的信道模型。对于多天线信道而言,许多单天线的概念都被继承了下来,如路径传播损耗、阴影衰落、多径衰落 损耗、长期衰落、短期衰落、相干时间、相干带宽、频率选择性衰落、平坦衰落等 , 所采用的信道模型也基本都是单天线情况下的一些拓展。本实验采用独立的慢衰落环境中的多输入多输出 MIMO 系统,假设发送端的天线数目为Mt,接收端端的天线数目为 Mr。用hij表示从第 j 个发射天线到第 i 个接收天线的信道增益。接收天线i处的噪声为nij=1,, Mt i=1,, Mr ;则第i个接收天线接收信号为:

 

 

 

2.1zf

      ZF均衡算法是一种根据峰值失真准则推导而来的线性均衡算法。将OFDM系统接收端的频域输出方程组用矩阵表示为

Y=HX+W

       其中W为加性高斯白噪声。为了得到发送端的发送信号X,最简单的实现方法是将Y乘以矩阵的 逆,即:

 

 

 

       ZF算法有个很大的缺点,没有对噪声进行消除,反而会放大噪声,当信噪比比较低时,性能会非常不好。

 

2.2mmse

      mimo系统通过在不同天线上发送相互独立的数据流显著提高系统的频谱效率,接收端可以采用线性或者非线性的方式进行mimo信号的检测。MMSE能够最大化检测后的SINR(Signal to Interference plus Noise Ratio,干扰信噪比,即期望信号与无用噪声的比值)。即,MMSE检测是期望最小化噪声干扰。

 

 

 

2.3osic

        一般情况下,线性检测方法的性能比非线性检测方法要差,但是线性检测方法的硬件实现复杂度低。通过排序的连续干扰消除(Ordered Successive Interference Cancellation,OSIC)方法可以改善线性检测方法的性能,而不会显著提高复杂度。它采用一组线性接收机,每个接收机检测并行数据流中的一个流,在每个阶段能够成功的从接收信号中删除检测出的信号成分。即在每个阶段将检测出来的信号从接收信号中减去,使得用于后续阶段的剩余信号具有更少的干扰。如下图给出4个空间数据流的OSIC信号检测过程。

 

 

 

 

3.MATLAB核心程序

 

for i=1:length (SNRs)
      SNR(i) = 10^(SNRs(i)/10);
      sigma  = 1/sqrt(SNR(i));
      for times=1:Meantimes
          [i,times]
          %信源
........................................................
 
               %ZF
               det_zf = G*R(:, ijk);
               dec1((ijk-1)*tx+[1:tx],:) = func_demod(det_zf.',index).';
        
               %MMSE
               det_MMSE=G1*R(:, ijk);
               dec2((ijk-1)*tx+[1:tx],:) = func_demod(det_MMSE.',index).';
               % MMSE-SIC
               dec3((ijk-1)*tx+[1:tx],:) = func_mmsesic (tx,G1,r, h_mmse_sic,rx,sigma,index);       
               % ZF_SIC 
               dec4((ijk-1)*tx+[1:tx],:) = func_zfsic(tx,G,r_zf_sic,h_zf_sic,rx,index); 
               % OSIC
               dec5((ijk-1)*tx+[1:tx],:) = func_osic(tx,r_osic, h_osic,p0,g1,index,sigma);
            
             end     
           NumErr1(i,times)=sum(abs(dec1.'~=signals));    
           NumErr2(i,times)=sum(abs(dec2.'~=signals));
           NumErr3(i,times)=sum(abs(dec3.'~=signals));
           NumErr4(i,times)=sum(abs(dec4.'~=signals));
           NumErr5(i,times)=sum(abs(dec5.'~=signals));
      end
end
Ber1=mean(NumErr1.')/lens;                      
Ber2=mean(NumErr2.')/lens;
Ber3=mean(NumErr3.')/lens;
Ber4=mean(NumErr4.')/lens;
Ber5=mean(NumErr5.')/lens;

 

  

 

posted @ 2023-05-14 23:32  我爱C编程  阅读(87)  评论(0编辑  收藏  举报