news 2026/9/6 7:29:56

第【121】期--基于导频的 OFDM 信道估计方法仿真:核回归与线性插值--matlab完整代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第【121】期--基于导频的 OFDM 信道估计方法仿真:核回归与线性插值--matlab完整代码

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

文章目录

    • 摘要
    • 1 引言
    • 2 系统模型与信道估计
      • 2.1 OFDM 信号模型
      • 2.2 多径信道频域模型
      • 2.3 导频结构与 LS 信道估计
    • 2.4 频域信道估计算法
      • 2.4.1 线性插值
      • 2.4.2 高斯核回归
      • 2.4.3 截断 RBF 核回归
    • 2.5 自适应核宽度选择
    • 3 仿真设计与分析
      • 3.1 参数设置
      • 3.2 结果图分析
      • 3.3 部分代码
    • 4 总结

摘要

在 OFDM 系统中,相干解调依赖于准确的信道状态信息,因此信道估计的精度直接决定系统性能。本文基于导频辅助的频域信道估计框架,对比研究了三种典型方法:传统线性插值、高斯核回归以及截断 RBF 核回归。其中核回归方法采用自适应带宽选择策略,根据不同信噪比动态优化核宽度。仿真结果表明:核回归方法在中高信噪比区域误码率性能优于线性插值。

1 引言

  • 正交频分复用(Orthogonal Frequency Division Multiplexing, OFDM)通过将高速数据流分配到多个正交子载波上传输,有效对抗频率选择性衰落,是 LTE、5G NR 等标准的核心波形技术。在 OFDM 接收机中,为恢复每个子载波上承载的数据符号,接收端必须准确估算各子载波处的信道频域响应(Channel Frequency Response, CFR),这一过程称为信道估计。
  • 基于导频(Pilot)的信道估计是工程中最常用的方案:发射端在特定子载波(导频子载波)上插入已知符号,接收端根据这些导频符号的观测值,通过某种算法推算出全部数据子载波上的信道响应。
  • 近年来,核回归作为一种经典的机器学习非参数回归方法,因其无需预先训练、能根据数据自适应调整平滑程度,已被引入信道估计领域。典型做法是采用高斯核函数对导频处的原始估计进行加权平均,等效于频域低通滤波,可有效压制噪声。

2 系统模型与信道估计

2.1 OFDM 信号模型

2.2 多径信道频域模型

2.3 导频结构与 LS 信道估计


2.4 频域信道估计算法

2.4.1 线性插值

2.4.2 高斯核回归

2.4.3 截断 RBF 核回归

2.5 自适应核宽度选择

3 仿真设计与分析

3.1 参数设置

参数符号取值
载波频率f c f_cfc3.5 GHz
子载波间隔Δ f \Delta fΔf15 kHz
资源块数N R B N_{\rm RB}NRB52
每资源块子载波数N s c R B N_{\rm sc}^{\rm RB}NscRB12
总子载波数N NN624
导频间隔Δ p \Delta pΔp4
导频数量N p N_pNp156
调制方式QPSK
多径数目L LL20
平均时延扩展τ r m s \tau_{\rm rms}τrms200 ns
每 SNR 点 OFDM 符号数N s y m N_{\rm sym}Nsym50
候选核宽度集合Σ \SigmaΣ{ 1 , 2 , … , 25 } \{1, 2, \dots, 25\}{1,2,,25}
截断 RBF 半径R RR20

3.2 结果图分析


可以看到,两种核方法的 BER 在所有 SNR 点上均低于线性插值,验证了核回归在频域信道估计中的有效性。

3.3 部分代码

clear clc close all%---仿真参数---carrierFreq=3.5e9;%载波频率(Hz)pilotSpacing=4;%导频间隔 subcarrierSpacing=15;%子载波间隔(kHz)subcarriersPerRB=12;%每资源块子载波数 numResourceBlocks=52;%资源块数量 totalSubcarriers=numResourceBlocks*subcarriersPerRB;%总子载波数 pilotIndices=(1:pilotSpacing:totalSubcarriers)';%导频位置 numPilots=length(pilotIndices);%---信道参数---numPaths=20;avgDelaySpread=200e-9;%---核宽度候选集(用于自适应选择)---sigmaValues=linspace(1,25,10)';%候选 σ numTests=length(sigmaValues);%---BER 仿真信噪比范围---SNRRange=-5:5:25;BERTrueChannel=zeros(length(SNRRange),1);KBEREstimatedChannel=zeros(length(SNRRange),1);%RBF 核 RKBEREstimatedChannel=zeros(length(SNRRange),1);%高斯核 LinearBER=zeros(length(SNRRange),1);%线性插值%---仿真设置---numTrials=100;%每个核宽度的试验次数(用于初始σ选择) signalToNoiseRatio=10;%用于初始优化的 SNR(若后续自适应,此步可简化) bitsPerPilot=2;modulationOrder=2^bitsPerPilot;%---生成固定 QPSK 导频符号---pilotBits=randi([0,1],numPilots*bitsPerPilot,1);pilotSymbols=qammod(pilotBits,modulationOrder,'UnitAveragePower',true,'InputType','bit');%---初始发送向量(仅导频)用于 σ 初始粗略估计(可选)---txVector=zeros(totalSubcarriers,1);txVector(pilotIndices)=pilotSymbols;%---(可选)初始粗略选择 σ,但后续 BER 循环会自适应,此处可省略,保留原代码风格---%为保持与原代码一致,仍计算一个 initialSigma,但实际在 BER 循环中会重新选 mseValues=zeros(numTrials,numTests);averageMSE=zeros(numTests,1);fortestIndex=1:numTests currentSigma=sigmaValues(testIndex);fortrialIndex=1:numTrials channelResponse=generateRandomChannel(totalSubcarriers,avgDelaySpread,subcarrierSpacing);noiseVariance=db2pow(-signalToNoiseRatio);receivedSignal=channelResponse.*txVector+sqrt(noiseVariance/2)*(randn(totalSubcarriers,1)+1i*randn(totalSubcarriers,1));rawEstimates=receivedSignal(pilotIndices)./pilotSymbols;%使用修正后的 RBF 函数(新函数接口相同) estimatedChannel=performRBFKernelRegression(pilotIndices,rawEstimates,totalSubcarriers,currentSigma);mseValues(trialIndex,testIndex)=mean(abs(estimatedChannel-channelResponse).^2);endaverageMSE(testIndex)=10*log10(mean(mseValues(:,testIndex)));end[~,optimalIndex]=min(averageMSE);initialSigma=sigmaValues(optimalIndex);%仅作备选,实际循环会自适应%---仿真 OFDM 符号传输(RBF 核)---numOFDMSymbols=200;rng(1)%为了自适应 σ,我们在每个 SNR 下独立选择最佳 σ,使用高斯核作为参考(因为其计算准确)%但 RBF 和 Gaussian 使用相同的 σ,所以用 Gaussian 来选 σ 即可forsnrIndex=1:length(SNRRange)SNR=SNRRange(snrIndex);%---自适应选择当前 SNR 下的最优 σ(基于少量符号的 MSE)---%使用高斯核(准确实现)来评估不同 σ 的 MSE,然后 RBF 和 Gaussian 都使用此 σ optSigma=initialSigma;%默认 minMSE=inf;numEvalSymbols=10;%用于 σ 评估的符号数fors=1:numTests mseSum=0;forsymEval=1:numEvalSymbols%产生随机信道和接收信号(仅导频) chEval=generateRandomChannel(totalSubcarriers,avgDelaySpread,subcarrierSpacing);txEval=zeros(totalSubcarriers,1);txEval(pilotIndices)=pilotSymbols;noiseVar=db2pow(-SNR);rxEval=chEval.*txEval+sqrt(noiseVar/2)*(randn(totalSubcarriers,1)+1i*randn(totalSubcarriers,1));rawEval=rxEval(pilotIndices)./pilotSymbols;%使用高斯核估计 estEval=performGaussianKernelRegression(pilotIndices,rawEval,totalSubcarriers,sigmaValues(s));mseSum=mseSum+mean(abs(estEval-chEval).^2);endifmseSum<minMSE minMSE=mseSum;optSigma=sigmaValues(s);end endfprintf('SNR = %d dB, 自适应 σ = %.2f\n',SNR,optSigma);%---正式开始该 SNR 下的 BER 统计(RBF 核)---bitErrorsTrue=0;bitErrorsRBF=0;totalBits=0;forsymbolIndex=1:numOFDMSymbols%生成数据 dataBits=randi([0,1],(totalSubcarriers-numPilots)*bitsPerPilot,1);dataSymbols=qammod(dataBits,modulationOrder,'UnitAveragePower',true,'InputType','bit');txVector=zeros(totalSubcarriers,1);txVector(pilotIndices)=pilotSymbols;dataIndices=setdiff(1:totalSubcarriers,pilotIndices)';txVector(dataIndices)=dataSymbols;%信道和接收 channelResponse=generateRandomChannel(totalSubcarriers,avgDelaySpread,subcarrierSpacing);noiseVariance=db2pow(-SNR);receivedSignal=channelResponse.*txVector+sqrt(noiseVariance/2)*(randn(totalSubcarriers,1)+1i*randn(totalSubcarriers,1));%导频处原始估计 rawChannelEstimates=receivedSignal(pilotIndices)./pilotSymbols;%使用修正后的 RBF 核回归(新实现)和自适应 σ estimatedChannel=performRBFKernelRegression(pilotIndices,rawChannelEstimates,totalSubcarriers,optSigma);%均衡 equalizedSignalTrue=receivedSignal./channelResponse;equalizedSignalRBF=receivedSignal./estimatedChannel;%解调 receivedBitsTrue=qamdemod(equalizedSignalTrue(dataIndices),modulationOrder,'OutputType','bit','UnitAveragePower',true);receivedBitsRBF=qamdemod(equalizedSignalRBF(dataIndices),modulationOrder,'OutputType','bit','UnitAveragePower',true);%统计误比特 bitErrorsTrue=bitErrorsTrue+sum(dataBits~=receivedBitsTrue);bitErrorsRBF=bitErrorsRBF+sum(dataBits~=receivedBitsRBF);totalBits=totalBits+length(dataBits);endKBEREstimatedChannel(snrIndex)=bitErrorsRBF/totalBits;end

4 总结

本文针对 OFDM 系统频域信道估计问题,对比了线性插值、高斯核回归与截断 RBF 核回归三种方法。仿真表明,核回归方法在中高信噪比下误码率性能优于线性插值,验证了其有效性。后续可进一步探索核宽度的在线自适应策略,以降低计算开销。

完整仿真代码可见往期文章文末VX公众号(包含往期博客所有代码),所见即所得

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

征程6M量产上车:城区NOA如何下沉至10万级车型?

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

作者头像 李华
网站建设 2026/9/6 7:27:23

纯电动汽车构造全解析:三电系统与整车布局

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

作者头像 李华
网站建设 2026/9/6 7:27:03

【单变量输入多步预测】基于CNN的风电功率预测研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;完整代码获取 定制创新 论文复现私信 &#x1f34a;个人信条&#xff1a;做科研&#x…

作者头像 李华
网站建设 2026/9/6 7:26:37

泥炭Clip1开放式耳机评测:300元价位的音质与舒适度平衡

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

作者头像 李华
网站建设 2026/9/6 7:25:42

ChatGPT、Claude、Grok 同日宕机4小时,AI 重度用户该备哪些预案

美国当地时间9月3日上午&#xff0c;ChatGPT、Claude、Grok 三大头部 AI 服务在差不多同一时段集体出故障&#xff0c;中断持续约3小时40分钟才陆续恢复&#xff0c;谷歌 Gemini、微软 Copilot 也监测到大量用户中断报告。多家媒体报道称&#xff0c;这是有记录以来最大规模的一…

作者头像 李华
网站建设 2026/9/6 7:24:03

技术团队流程管理实战:执行与审批流程的标准化实践

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

作者头像 李华