m最小二乘法自适应均衡误码率仿真,对比LS,DEF以及LMMSE三种均衡算法误码率

350 阅读3分钟

1.算法描述

        信道估计是通信系统接收机的重要功能模块,主要是用来估计信号所经历信道的冲击响应,并用于后续的信道均衡处理,以便消除多径信号混叠造成的ISI。

       信道估计的方法有很多种,大体上可分为两类,一类是基于训练序列的信道估计,而另一类是信道的盲估计(自适应估计),其估计过程不依赖已知信息。常见通信系统的信道估计,绝大部分是基于训练序列的估计方法,这里面最最常用的两个信道估计算法就是LS算法和MMSE算法。LS是最小二乘、MMSE是最小均方误差,它们都是所谓的最优化准则,即得到最优信道估计所遵循的准则,有时也被称为代价函数。

 

       均衡技术是对码间干扰进行适当处理,以补偿信道畸变的技术。通常把采用均衡技术来补偿码间干扰的处理器称为均衡器。设计了一种采用递归最小二乘的自适应算法的均衡滤波器,仿真结果显示均衡器可以降低码间干扰,降低误码率。

 

        这种方法的原理就是在发射数据符号外,还需要发射前导(Preamble)或导频(pilot)信号;如最小二乘LS、最小均方误差MMSE等基于训练序列的信道估计算法被广泛应用于信道估计;

 

优点:训练符号能够提供较好的性能;

 

缺点:由于除了发射数据符号外,还需要发射前导或导频信号,由此训练序列过长会降低频谱效率;

1.png

LS 信道估计算法简单,但是对噪声敏感,尤其在深衰落信道中,LS 信道估计算法性能明显恶化。

MMSE 信道估计算法有效地抑制了噪声干扰,性能优于 LS 信道估计算法,但需求解矩阵的逆,复杂度较高,硬件难以实现。

2.仿真效果预览

matlab2022a仿真结果如下:

 

2.png

 

3.MATLAB核心程序 `for j=1:length(SNR_in_dB)

    j

    %通过既有码间干扰又有白噪声信道

    [y,len,h] = func_channel(info,SNR_in_dB(j));

    %初始误码统计数

    numoferr1=0;     

    %从第len个码元开始为真实信号码元

    for i=len+1:N+len  

        decis = 2*[y(i)>=0]-1;      

        %判断是否误码,统计误码码元个数

        if decis~=info(i-5)                          

           numoferr1=numoferr1+1;          

        end;     

    end;      

    %未经均衡器均衡,得到的误码率

    Pe1(j)=numoferr1/N;   

    

    %LS均衡,参考文献

    %wenku.baidu.com/view/3fb6f5…

    Order = 5;

    z     = func_LS(y,info,Order);

    %初始误码统计数

    numoferr2=0;     

    %从第len个码元开始为真实信号码元

    for i=1:N   

        decis(i) = 2*[z(i+Order)>=0]-1;      

        %判断是否误码,统计误码码元个数

        if decis(i)~=info(i)                          

           numoferr2=numoferr2+1;          

        end;     

    end;      

    Pe2(j)=numoferr2/N;

 

    %DEF均衡

    z     = func_DEF(y(6:length(info)+5),info,h);

    decis = [2*[z>=0]-1];

    %初始误码统计数

    numoferr3=0;     

    %从第len个码元开始为真实信号码元

    for i=1:N   

        if decis(i)~=info(i)                          

           numoferr3=numoferr3+1;          

        end;     

    end;      

    Pe3(j)=numoferr3/N;

 

    %LMMSE均衡

    z     = func_LMMSE(y,h,SNR_in_dB(j));

    decis = [2*[z>=0]-1]';

    %初始误码统计数

    numoferr4=0;     

    %从第len个码元开始为真实信号码元

    for i=1:N-5    

        if decis(i+5)~=info(i)                          

           numoferr4=numoferr4+1;          

        end;     

    end;      

    Pe4(j)=numoferr4/N;

end;  

figure;

semilogy(SNR_in_dB,Pe1,'red*-');

hold on;

semilogy(SNR_in_dB,Pe2,'b-s');

hold on;

semilogy(SNR_in_dB,Pe3,'k--','linewidth',2);

hold on;

semilogy(SNR_in_dB,Pe4,'m->','linewidth',2);

grid on

legend('无均衡器','LS均衡器','DEF均衡器','LMMSE均衡器');

xlabel('SNR(dB)');

ylabel('error');

01-139m`