news 2026/9/26 1:52:11

第【130】期--OFDM系统中LS、MMSE与DFT信道估计方法的仿真--matlab完整代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第【130】期--OFDM系统中LS、MMSE与DFT信道估计方法的仿真--matlab完整代码

关注我,追更更多通信仿真代码!

文章目录

    • 摘要
    • 1 引言
    • 2 OFDM系统与信道模型
      • 2.1 OFDM基本原理
      • 2.2 无线信道模
    • 3 信道估计方法
      • 3.1 LS信道估计
      • 3.2 基于插值的信道估计
      • 3.3 Comb-DFT信道估计
      • 3.4 MMSE信道估计及平滑退化
    • 4 仿真设计与分析
      • 4.1 参数设置
      • 4.2 仿真结果分析
      • 4.3 部分代码
    • 5 总结

摘要

正交频分复用(OFDM)技术因其高频谱效率和较强的抗多径能力,被广泛应用于现代无线通信系统。然而,无线信道的频率选择性和时间选择性会严重影响OFDM系统的解调性能,因此信道估计成为接收端的关键环节。本文围绕OFDM系统中的信道估计问题,研究了几种典型方法:最小二乘(LS)估计、线性插值、样条插值、中值滤波、梳状离散傅里叶变换(Comb-DFT)估计以及最小均方误差(MMSE)估计。基于MATLAB仿真平台,在TDL-E信道和Rayleigh信道下分别设计了三个仿真实验:Comb-DFT与LS线性插值的对比、不同插值方法与导频步长的对比、LS与MMSE的对比。

1 引言

  • 随着无线通信技术的快速发展,人们对高速数据传输的需求日益增长。OFDM作为一种多载波调制技术,将高速数据流分配到多个相互正交的子载波上传输,能够有效对抗频率选择性衰落,并简化接收端均衡。然而,无线信道具有多径效应和多普勒效应,导致接收信号在幅度和相位上发生畸变。为了在接收端正确恢复发送数据,必须对信道进行估计和补偿。

  • 信道估计方法通常分为基于导频的估计和盲估计。基于导频的估计在实际系统中更为常见,其基本思想是在发送端插入已知的导频符号,接收端利用导频位置的信道响应进行估计,再通过插值或变换得到所有子载波上的信道频响。常用的估计准则包括LS和MMSE。LS估计实现简单,但受噪声影响大;MMSE估计利用信道统计信息,性能更优,但计算复杂度高且需要知道噪声功率和信道相关矩阵。此外,插值方法的选择、导频间隔的大小以及时域降噪策略都会影响最终估计性能。

  • 本文基于两个MATLAB仿真实验,研究OFDM系统中的多种信道估计方法。第一个实验针对TDL-E信道,对比Comb-DFT与LS线性插值;第二个程序针对Rayleigh信道,对比LS在不同插值方式(中值、线性、样条)和不同导频步长下的性能,并进一步比较LS与MMSE。通过仿真结果分析各方法的优缺点,为实际系统设计提供依据。

2 OFDM系统与信道模型

2.1 OFDM基本原理

2.2 无线信道模

3 信道估计方法

3.1 LS信道估计

3.2 基于插值的信道估计

3.3 Comb-DFT信道估计

3.4 MMSE信道估计及平滑退化

4 仿真设计与分析

4.1 参数设置

实验一参数设置

参数取值
使用子载波数1320
导频间隔6
采样率30.72 MHz
子载波间隔15 kHz
扩展子载波数6
总子载波数1332
时域截断长度58
调制方式16-QAM
信道模型TDL-E
时延扩展100 ns
移动速度30 km/h
载波频率4 GHz
K因子22 dB
SNR范围0:5:30 dB

实验二参数设置

参数取值
FFT长度1024
CP长度256
使用子载波数840
调制方式16-QAM
采样率20 MHz
信道模型Rayleigh
路径时延[0 110 190 410] ns
平均路径增益[0 -9.7 -19.2 -22.8] dB
最大多普勒频移5 Hz
多普勒谱Jakes
导频步长16和4
SNR范围0:5:45 dB
MMSE退化中心27.5 dB
MMSE退化宽度2.5 dB

4.2 仿真结果分析

  • 可以看到:
    Comb-DFT通过时域截断有效抑制噪声,在TDL-E信道下性能始终优于LS线性插值,且信噪比越高优势越显著。在Rayleigh信道下,导频步长越小估计越准确,线性插值表现最稳健;MMSE在低信噪比下优于LS,高信噪比下平滑退化为LS。

4.3 部分代码

clear;close all;clc;%%参数 Nused=1320;Sf=6;Fs=30.72e6;Delta_f=15e3;%带扩展的 Comb 数组 N_ext=6;Ncomb_ext=Nused+2*N_ext;%=1332=6*222Ng_local=round(144*Ncomb_ext/2048);used_start=N_ext+1;%=7used_end=N_ext+Nused;%=1326pilot_in_used=(1:Sf:Nused).';Npilot=length(pilot_in_used);pilot_in_ext=pilot_in_used+N_ext;data_in_used=setdiff((1:Nused).',pilot_in_used);data_in_ext=data_in_used+N_ext;%线性插值权重 n_vec=(1:Nused).';i_left=floor((n_vec-1)/Sf)+1;i_left=min(i_left,Npilot);i_right=min(i_left+1,Npilot);pos_l=pilot_in_used(i_left);pos_r=pilot_in_used(i_right);denom=pos_r-pos_l;denom(denom==0)=1;t_vec=(n_vec-pos_l)./denom;t_vec(pos_l==pos_r)=0;w_r=t_vec;w_l=1-t_vec;%信道 v_kmh=30;fc=4e9;c=physconst('lightspeed');fd=(v_kmh*1000/3600)/c*fc;delay_spread_ns=100;tdl=nrTDLChannel;tdl.DelayProfile='TDL-E';tdl.DelaySpread=delay_spread_ns*1e-9;tdl.MaximumDopplerShift=fd;tdl.SampleRate=Fs;tdl.NumTransmitAntennas=1;tdl.NumReceiveAntennas=1;tdl.NormalizePathGains=true;info_tdl=info(tdl);max_delay_s=max(info_tdl.PathDelays);Fs_comb=Ncomb_ext*Delta_f;max_delay_comb_samples=ceil(max_delay_s*Fs_comb);L_trunc=max_delay_comb_samples+16;fprintf('=== 可视化 |S(ω)| 与 BER,TDL-E ===\n');fprintf('Nused=%d,Sf=%d,Ncomb_ext=%d,L_trunc=%d\n\n',...Nused,Sf,Ncomb_ext,L_trunc);M=16;Mod_Order=4;K_dB=22;%%理论 BER function ber=theoretical_ber_tdl_e(EbN0_dB,M,K_dB)k=log2(M);L=sqrt(M);EbN0=10.^(EbN0_dB/10);ber=(2/k)*(1-1/L)*erfc(sqrt(3*EbN0*k/(2*(M-1))));K=10^(K_dB/10);ber=ber/(1+1/K);end%BER 曲线 SNRdB=0:5:30;nSNR=length(SNRdB);BER_comb=zeros(size(SNRdB));BER_ls=zeros(size(SNRdB));MIN_ERRORS=100;MAX_BITS_CAP=5e7;rng(42);BER_pred=theoretical_ber_tdl_e(SNRdB-10*log10(Mod_Order),M,K_dB);fori_snr=1:nSNR EsN0_lin=10^(SNRdB(i_snr)/10);err_comb=0;err_ls=0;total_bits=0;fprintf('BER SNR = %5.1f dB: ',SNRdB(i_snr));tic;while(err_comb<MIN_ERRORS||err_ls<MIN_ERRORS)...&&total_bits<MAX_BITS_CAP data_bits=randi([01],length(data_in_used)*Mod_Order,1);data_syms=qammod(data_bits,M,'InputType','bit',...'UnitAveragePower',true);pilot_bits=randi([01],Npilot*Mod_Order,1);pilot_syms=qammod(pilot_bits,M,'InputType','bit',...'UnitAveragePower',true);freq_syms=zeros(Ncomb_ext,1);freq_syms(data_in_ext)=data_syms;freq_syms(pilot_in_ext)=pilot_syms;x_time=ifft(freq_syms)*sqrt(Ncomb_ext);x_cp=[x_time(end-Ng_local+1:end);x_time];reset(tdl);y_ch=tdl(complex(x_cp));noise=sqrt(1/(2*EsN0_lin))*...(randn(size(y_ch))+1j*randn(size(y_ch)));y_rx=y_ch+noise;y_time=y_rx(Ng_local+1:end);Y_nat=fft(y_time)/sqrt(Ncomb_ext);pilot_syms_nat=freq_syms(pilot_in_ext);H_LS_pil=Y_nat(pilot_in_ext)./pilot_syms_nat;ifany(~isfinite(H_LS_pil))continue;end%Comb-DFT H_comb=zeros(Ncomb_ext,1);H_comb(pilot_in_ext)=H_LS_pil;slope_L=H_LS_pil(2)-H_LS_pil(1);H_comb(1)=H_LS_pil(1)-slope_L;slope_R=H_LS_pil(end)-H_LS_pil(end-1);H_comb(Ncomb_ext-5)=H_LS_pil(end)+slope_R;h_comb=ifft(H_comb)*sqrt(Ncomb_ext);h_trunc=zeros(Ncomb_ext,1);h_trunc(1:L_trunc)=h_comb(1:L_trunc)*Sf;H_est_full=fft(h_trunc)/sqrt(Ncomb_ext);H_est_comb=H_est_full(used_start:used_end);%LS+线性插值 H_est_ls=w_l.*H_LS_pil(i_left)+w_r.*H_LS_pil(i_right);%均衡器 Y_data_nat=Y_nat(data_in_ext);tx_syms_nat=freq_syms(data_in_ext);tx_bits_used=qamdemod(tx_syms_nat,M,'OutputType','bit',...'UnitAveragePower',true);H_d=H_est_comb(data_in_used);X_eq=conj(H_d).*Y_data_nat./(abs(H_d).^2+1/EsN0_lin+eps);X_eq(~isfinite(X_eq))=0;rx=qamdemod(X_eq,M,'OutputType','bit','UnitAveragePower',true);err_comb=err_comb+sum(tx_bits_used~=rx);H_d=H_est_ls(data_in_used);X_eq=conj(H_d).*Y_data_nat./(abs(H_d).^2+1/EsN0_lin+eps);X_eq(~isfinite(X_eq))=0;rx=qamdemod(X_eq,M,'OutputType','bit','UnitAveragePower',true);err_ls=err_ls+sum(tx_bits_used~=rx);total_bits=total_bits+length(tx_bits_used);endBER_comb(i_snr)=err_comb/total_bits;BER_ls(i_snr)=err_ls/total_bits;fprintf('t=%.1f 秒 | Comb: %.3e | LS: %.3e',...toc,BER_comb(i_snr),BER_ls(i_snr));iferr_ls>0&&err_comb>0fprintf(' | Comb 相对 LS: %+.2f dB\n',...10*log10(BER_ls(i_snr)/BER_comb(i_snr)));elsefprintf('\n');end end

5 总结

本文围绕OFDM系统中的信道估计问题,系统研究了LS、线性插值、样条插值、中值滤波、Comb-DFT及MMSE等多种典型方法,并在TDL-E与Rayleigh两类信道下通过MATLAB仿真进行了对比分析。结果表明:Comb-DFT凭借时域截断有效抑制噪声,在TDL-E信道下性能始终优于LS线性插值,且信噪比越高优势越明显;在Rayleigh信道下,导频步长越小估计越准确,线性插值表现最稳健,MMSE在低信噪比下优于LS,高信噪比下平滑退化为LS。综合来看,实际系统设计需根据信道特性与复杂度约束,在估计精度与实现代价之间做出权衡。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 1:52:00

Altium Designer BOM导出:报表引擎与OutJob工程输出实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 1:51:35

VS2022离线安装实战:构建可验证、可复用的开发环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 1:51:01

VSCode中Codex插件字体调整全攻略:从原理到实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 1:50:45

Tauri+VS Code构建SideX类桌面IDE:轻量、安全、可嵌入的开发工具实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华