基于QPSK调制和CoSaMP算法的信道估计均衡算法matlab仿真

目录

1.算法仿真效果

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

3.MATLAB核心程序

4.完整算法代码文件


1.算法仿真效果

matlab2022a仿真结果如下:

 

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


均衡器的分类

   • 均衡处理方法
       时域均衡器:单载波数字通信中多采用时域均衡器,从时域的冲激响应考虑
       正交频分复用OFDM调制:采用频域均衡

   • 是否使用训练序列或导频
      DA(数据辅助)
       DD(判决指向)
      NDA(盲均衡):需要在接收到足够多的数据情况下才能得到一个可靠的估计
导频或训练序列的插入

   地面数字电视一般使用DA方式信道估计和均衡
    • 多径衰落信道可以看成是在时间和频率上的一个二维信号 
    • 训练序列时域的间隔取决于信道的相关时间
    • 训练序列频域的间隔取决于相关带宽 
    • 训练序列对信道在时-频空间的不同点上进行采样,利用采样插值即可得到整个信道的频率响应值
时域均衡器 
   • 均衡器的输出是否用于反馈控制
      线性均衡器:输出未被用于反馈控制
      非线性均衡器:输出用于反馈,如判决反馈均衡器(DFE-decision Feedback Equalizer) 
   • 线性均衡器

        均衡器(Equalizer),是一种可以分别调节各种频率成分电信号放大量的电子设备,通过对各种不同频率的电信号的调节来补偿扬声器和声场的缺陷,补偿和修饰各种声源及其它特殊作用,一般调音台上的均衡器仅能对高频、中频、低频三段频率电信号分别进行调节。

       在通信系统中,在基带系统中插入均衡器能够减小码间干扰的影响。均衡器(equalizer) 通信系统中,校正传输信道幅度频率特性和相位频率特性的部件。将频率为f的正弦波送入传输信道,输出电压与输入电压的幅度比随f变化的特性称为幅度频率特性,简称幅频特性;输出电压与输入电压间的相位差随f变化的特性称为相位频率特性,简称相频特性。

       所谓信道估计,发送端发送已知的、预定义的序列(输入),然后接收端从接收序列拟数据中(输出),将假定的某个信道模型的模型参数(信道衰变模型),估计出来的过程。

      如果信道是线性的话,那么信道估计就是对系统冲激响应进行估计。

      需强调的是信道估计是信道对输入信号影响的一种数学表示,而“好”的信道估计则是使得某种估计误差最小化的估计算法。

       PN码(Pseudo-Noise Code),是一具有与白噪声类似的自相关性质的0和1所构成的编码序列,最广为人知的二位元P-N Code是最大长度位移暂存器序列,简称m-序列, 他具有长 2的N次方 - 1个位元。


        压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法。CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了原子的选择标准之外,它有一点不同于ROMP:ROMP每次迭代已经选择的原子会一直保留,而CoSaMP每次迭代选择的原子在下次迭代中可能会被抛弃。

这里写图片描述

3.MATLAB核心程序

.........................................................
SNR            = 30; 

train_code_num = 500;
info_code_num  = 5000;
code_num       = train_code_num + info_code_num;
[ src_codes ]  = bitsgen( code_num );


[ response_codes ] = channel( 21,128,SNR,src_codes );

.............................................................
figure
subplot(2,3,1)
plot(I,Q,'b.',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.0,0.9,0.0]);
axis([-2,2,-2,2])
I = real(response_codes(train_code_num+1:end-FrontOrder+1))/std(real(response_codes(train_code_num+1:end-FrontOrder+1)));
Q = imag(response_codes(train_code_num+1:end-FrontOrder+1))/std(imag(response_codes(train_code_num+1:end-FrontOrder+1)));

subplot(2,3,2)
plot(I,Q,'b.',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','g',...
    'MarkerFaceColor',[0.0,0.9,0.0]);
axis([-4,4,-4,4])
I = real(am_xEst(train_code_num+1:end))/std(real(am_xEst(train_code_num+1:end)));
Q = imag(am_xEst(train_code_num+1:end))/std(imag(am_xEst(train_code_num+1:end)));
title(['SNR=',num2str(SNR)])
subplot(2,3,3)
plot(I,Q,'b.',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','r',...
    'MarkerFaceColor',[0.0,0.9,0.0]);
axis([-2,2,-2,2])

subplot(2,3,[4,5,6])
plot(ee);
A592

4.完整算法代码文件

V

猜你喜欢

转载自blog.csdn.net/hlayumi1234567/article/details/129622096