1.算法描述

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

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

 

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

 

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

 

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

 

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

信道估计的python实现 信道估计算法有哪些_信道估计的python实现

 

 

 

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

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

2.仿真效果预览

matlab2022a仿真结果如下:

 

信道估计的python实现 信道估计算法有哪些_码元_02

 

 

 

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均衡,参考文献
    %https://wenku.baidu.com/view/3fb6f52f195f312b3069a5a6.html
    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