基于MATLAB的MIMO系统ZF破零均衡仿真

185 阅读5分钟

1.算法描述

       MIMO的空分复用技术可以使得系统在系统带宽和发射带宽不变的情况下容易地获得空间分集增益和信道的容量增益。OFDM技术采用多个正交的子载波并行传输数据,使得每一路上的数据速率大大降低,并且加入了时间保护间隔,因此具有较强的抗多径干扰和频率选择性衰落的能力。MIMO和OFDM技术将是未来无线通信中极具竞争力的技术。信号检测是MIMO-OFDM系统的关键任务之一。目前针对MIMO-OFDM系统中信号检测技术的研究主要集中在线性检测、非线性检测和最优检测三个方面。

 

       在无线通信中。 无线信道由各种类型的损伤组成,例如延迟扩展、衰落和多普勒扩展等。信道中的多径传播引入延迟扩展,导致 ISI、ICI等等问题,在信号接收端,我们需要进行均衡以减少失真,减轻 ISI 和噪声的综合影响。 因此为了恢复原始信号,使用滤波器,常用基本的滤波器有破零(Zero Forcing,ZF) 和最小均方误差( Minimum Mean Square Error,MMSE)算法。ZF算法使用一个加权矩阵W消除信道的干扰,根据估计的信道响应H初始化矩阵W,其中x表示发送的信号,,h表示信道冲击响应,H是估计的信道冲击响应,z表示恢复的信号。

 

        MIMO桌接收的时候,把这三种算法比作把一个信号映射到某个平面上的问题,MRC(Maximal Ratio Combining,最大比合并)是偏心信号,ZF(Zero Foring,迫零)是偏心干扰消除(即最小化干扰,使得干扰接近0),MMSE(Minimum Mean Squared Error,最小均方误差)是将两者折中。

       ZF的原理如下:  

 

1.png  

       MIMO系统(Multiple-Input Multiple-Output)是指在发射端和接收端分别使用多个发射天线和接收天线,使信号通过发射端与接收端的多个天线传送和接收,从而改善通信质量。它能充分利用空间资源,通过多个天线实现多发多收,在不增加频谱资源和天线发射功率的情况下,可以成倍的提高系统信道容量,显示出明显的优势、被视为下一代移动通信的核心技术。

 

      MIMO系统却能有效地利用多径的影响来提高系统容量。系统容量是干扰受限的,不能通过增加发射功率来提高系统容量。而采用MIMO结构不需要增加发射功率就能获得很高的系统容量。因此,将MIMO技术与OFDM技术相结合是下一代无线局域网发展的趋势。在OFDM系统中,采用多发射天线实际上就是根据需要在各个子信道上应用多发射天线技术,每个子信道都对应一个多天线子系统、一个多发射天线的OFDM系统。

 

       MIMO(Multiple-Input Multiple-Output)技术指在发射端和接收端分别使用多个发射天线和接收天线,使信号通过发射端与接收端的多个天线传送和接收,从而改善通信质量。它能充分利用空间资源,通过多个天线实现多发多收,在不增加频谱资源和天线发射功率的情况下,可以成倍的提高系统信道容量,显示出明显的优势、被视为下一代移动通信的核心技术。

 

1无限长迫零(Zero force\ZF)均衡器

直接由上式,可得B(f)=\frac{1}{H(z)}B(f)=H(z)1​因为H(z)H(z)是FIR滤波器,所以B(f)B(f)是IIR滤波器。

但是,IIR滤波器缺点是很多的,比如不稳定,相位不线性,复杂等缺点,因此,我们需要FIR滤波器

 

2有限长时域迫零(ZF)均衡器

将无限长迫零均衡器截断,使之成为FIR滤波器,但是会残余ISI(码间干扰)。

有限长时域迫零(ZF)均衡器有什么缺点呢?会放大噪声,因此,在信噪比大的时候,有限长时域迫零(ZF)均衡器是可以接受的,但是信噪比一旦变小,有限长时域迫零(ZF)均衡器性能就会很差。

 

MLSE(最大似然序列估计)的性能接近AWGN信道,就像没有多径的情况一样。

ZF均衡器在信噪比高的时候性能好,在信噪比低的时候性能差。

MSE在信噪比高的时候性能比ZF差,在信噪比低的时候性能比ZF好。

2.仿真效果预览

matlab2022a仿真结果如下:

 

2.png

 

3.MATLAB核心程序 `errZF=0;

  errZF_DFE=0;

  ro=10^(snr(bi)/10);

  for n=1:No_uncode

       S_out=[];                                 % Symbol stream output_estimate

       S_in = randsrc(mTx,1,xcodebook)+ i*(randsrc(mTx,1,ycodebook)); % Symbol stream input

       S_in1=S_in/sqrt(Es);

       noise=(randn(nRx,1)+i*randn(nRx,1))/sqrt(2);%Get noise

       uncode_H=(randn(nRx,mTx)+i*randn(nRx,mTx))/sqrt(2);%Get Rayleigh channel

             

       y=sqrt(ro/mTx)uncode_HS_in1 + noise; % At receiver

     

%Demodulate via ZF Equalizer

       G_ZF = sqrt(mTx/ro)*pinv(uncode_H);

       S_out=sqrt(Es)G_ZFy; % Symbol out of equalizer

      % Decoder

         for ii=1:mTx % detector

            [o,a(ii)]=quantiz(real(S_out(ii)),partition,xcodebook);

            [o,b(ii)]=quantiz(imag(S_out(ii)),partition,ycodebook);

         end

        S_out_dec = a + i*b;

        err_real= sum (real(S_out_dec)~=real(S_in.'));

        err_imag= sum (imag(S_out_dec)~=imag(S_in.'));

        errZF=errZF+err_real+err_imag;

%End ZF only

 

%ZF-DFE or V-Blast ----------------------------------------------------------------

        H=uncode_H;

        r=sqrt(Es)*y;

        G=sqrt(mTx/ro)*pinv(H);

        for j=1:mTx %i loop

            for J=1:mTx

                n(J)=(norm(G(J,:)))^2;

            end

            for t=1:j-1

                n(k(t))= Inf;

            end

            [ Y,I]=min(n);

            k(j)=I;

            w=G(I,:);

            yy=w*r;

            [ o,n1]=quantiz(real(yy),partition,xcodebook);

            [ o,n2]=quantiz(imag(yy),partition,ycodebook);

            b(I)=n1+i*n2;

            r=r-sqrt(ro/mTx)*H(:,I)*b(I);

            H(:,I)=0;

          G=sqrt(mTx/ro)*pinv(H);

        end % end i loop

        err_real= sum (real(b)~=real(S_in.'));

        err_imag= sum (imag(b)~=imag(S_in.'));

        errZF_DFE=errZF_DFE+err_real+err_imag;`