基于LS和MMSE实现OFDM通信链路信道估计的仿真和分析

简介: 基于LS和MMSE实现OFDM通信链路信道估计的仿真和分析

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

OFDM通信链路中的信道估计是为了在接收端正确还原发送信号而对信道进行建模和估计的过程。常用的两种信道估计方法是最小二乘法(LS)和最小均方误差(MMSE)。下面是使用这两种方法实现OFDM通信链路信道估计的基本步骤:

  1. 发送端:
  • 将原始数据分为子载波,并应用傅里叶变换得到频域符号。
  • 插入导频符号,在OFDM符号中安排导频位置。
  1. 信号传输:
  • 将频域符号转换为时域信号并加上循环前缀。
  • 将待传输的信号通过信道传输。
  1. 接收端:
  • 接收并去除循环前缀。
  • 将接收到的信号进行傅里叶变换,转换为频域表示。
  1. 导频信号提取:
  • 从接收到的信号中提取出导频符,即已知的已发送符号。
  1. LS信道估计:
  • 使用导频符号计算信道的估计值。
  • 对于每个子载波,计算导频符号在频域上与接收到的导频符号的比率。
  • 根据信道估计的比率,得到各个子载波的信道估计。
  1. MMSE信道估计:
  • 使用导频符号和噪声方差计算信道的估计值。
  • 对于每个号以及噪声方差的比率。
  • 根据信道估计的比率,得到各个子载波的信道估计。

⛄ 运行结果

⛄ 部分代码

clc;

clear all;

close all;


Nfft=2048;

Ng=512;

Nofdm=2560;

Nsym=100;

Nps=4; %Pilot Spacing

Np=Nfft/Nps; %Number of pilots per OFDM symbol

Nbps=4;

itr=10;

nn=11; %No. of SNR observations


%Initialising MSE arrays for different SNR observations:

z_linin=zeros(1,nn);

z_splin=zeros(1,nn);

z_lindft=zeros(1,nn);

z_spldft=zeros(1,nn);

zmmse=zeros(1,nn);

zmmse_dft=zeros(1,nn);


for t=1:itr

    z=[];

    z1=[];

    z2=[];

    z3=[];

    zm=[];

    zms=[];

    snr1=[];


   % 16 - QAM - Modulation Scheme

    M=16;

    hmod = modem.qammod('M',M, 'SymbolOrder','gray');

    Es=1;

    A=sqrt(3/2/(M-1)*Es); % Signal energy and QAM normalization factor

    for nsym=1:Nsym

       Xp = 2*(randn(1,Np)>0)-1; % Pilot sequence generation

       msgint=randi(1,Nfft-Np,M); % bit generation

       dat_ser = A*modulate(hmod,msgint);

    end


    % serial to parllel conversion

    dat_par=dat_ser.';


    % Pilot Insertion - Comb Type Arrangement

    counter = 0;

    loc = [];

    for i=1:Nfft

        if mod(i,Nps)==1

            X(i)=Xp(floor(i/Nps)+1);

            loc=[loc i];

            counter = counter+1;

        else

            X(i) = dat_par(i-counter);

        end

    end

   

    % inverse discret Fourier transform (IFFT)

    X_ifft=ifft(X,Nfft);

   

    % Adding Cyclic Prefix - Guard interval

    guard=X_ifft(:,end-511:end); % this is the Cyclic Prefix part to be appended.

    ofdm_par=[guard X_ifft];


    % parallel to serial - Generation of the OFDM Signal

    ofdm=ofdm_par.';

   

    % Channel code

    dopjakes = doppler.jakes;


    dopgauss1 = doppler.bigaussian;

    dopgauss1.CenterFreqGaussian1 = -0.8;

    dopgauss1.CenterFreqGaussian2 = 0.4;

    dopgauss1.SigmaGaussian1 = 0.05;

    dopgauss1.SigmaGaussian2 = 0.1;

    dopgauss1.GainGaussian1 = sqrt(2*pi*(dopgauss1.SigmaGaussian1)^2);

    dopgauss1.GainGaussian2 = 1/10 * sqrt(2*pi*(dopgauss1.SigmaGaussian2)^2);


    dopgauss2 = doppler.bigaussian;

    dopgauss2.CenterFreqGaussian1 = 0.7;

    dopgauss2.CenterFreqGaussian2 = -0.4;

    dopgauss2.SigmaGaussian1 = 0.1;

    dopgauss2.SigmaGaussian2 = 0.15;

    dopgauss2.GainGaussian1 = sqrt(2*pi*(dopgauss1.SigmaGaussian1)^2);

    dopgauss2.GainGaussian2 = 1/10^1.5 * sqrt(2*pi*(dopgauss1.SigmaGaussian2)^2);

   

    fd=130; %Maximum Doppler Shift

    ts=(7/64)*10^-6; %Sampling Time


    chan = rayleighchan(ts, fd); %Rayleigh channel - Multifading Channel


    % Assign profile-specific properties to channel object.

    chan.PathDelays = [0.0 0.2 0.5 1.6 2.3 5.0] * 1e-6;

    chan.AvgPathGaindB = [-3 0 -2 -6 -8 -10];

    chan.DopplerSpectrum = [dopjakes dopjakes dopjakes dopgauss1 dopgauss2 dopgauss2];

    chan.StoreHistory = 1;

    chan.ResetBeforeFiltering = 0;

    chan.NormalizePathGains = 1;

   

    %Passing OFDM Signal through the created Channel

    chan_op = filter(chan,ofdm);

    XFG=fft(chan_op);

   

    %Channel Covariance Matrix for MMSE estimation  

    x_test=randn(1,6);

    X_test=fft(x_test,Nfft);

    y_test=filter(chan,x_test);

    Y_test=fft(y_test,Nfft);

    H1=Y_test/X_test;

    h=ifft(H1,6);

    H=fft(h,Nfft);

    ch_length=length(h);

       

    %Reception at the receiver end for various SNR ranging from 5dB - 25dB:

    for SNR =5:2:25

        %AWGN Modelling

        snr1=[snr1 SNR];

        n1=ones(2560,1);

        n1=n1*0.000000000000000001i;%Just to ensure that the function awgn adds 'complex gaussian noise'..

        noise=awgn(n1,SNR);

        variance=var(noise);

        N=fft(noise);

       

        Y_rec=XFG+N;

        y_ser=ifft(Y_rec);

       

        % serial to parallel conversion

        y_par=y_ser.';

       

        % guard interval

        y = y_par(Ng+1:Nofdm);

       

        % FFT

        Y = fft(y);

       

        % channel estimation

       

        %LS Estimator with Linear Interpolator

        H_est = LS_CE(Y,Xp,loc,Nfft,Nps,'linear');

        err=(H-H_est)*(H-H_est)';

        z=[z err/(Nfft*Nsym)];

       

        %LS Estimator with Linear Interpolator - DFT Based

        h_est = ifft(H_est);

        h_DFT = h_est(1:ch_length);

        H_DFT = fft(h_DFT,Nfft);

        err=(H-H_DFT)*(H-H_DFT)';

        z3=[z3 err/(Nfft*Nsym)];

       

        %LS Estimator with Spline Cubic Interpolator

        H_est = LS_CE(Y,Xp,loc,Nfft,Nps,'spline');

        err=(H-H_est)*(H-H_est)';

        z1=[z1 err/(Nfft*Nsym)];

       

        %LS Estimator with Spline Cubic Interpolator - DFT Based

        h_est = ifft(H_est);

        h_DFT = h_est(1:ch_length);

        H_DFT = fft(h_DFT,Nfft);

        err=(H-H_DFT)*(H-H_DFT)';

        z2=[z2 err/(Nfft*Nsym)];  

       

        % MMSE Estimator

        H_est = MMSE_CE(Y,Xp,loc,Nfft,Nps,h,SNR);

        err=(H-H_est)*(H-H_est)';

        zm=[zm err/(Nfft*Nsym)];

       

        % MMSE Estimator - DFT Based

        h_est = ifft(H_est);

        h_DFT = h_est(1:ch_length);

        H_DFT = fft(h_DFT,Nfft);

        err=(H-H_DFT)*(H-H_DFT)';

        zms=[zms err/(Nfft*Nsym)];

    end

   

    z_linin=z_linin+z;

    z_splin=z_splin+z1;

    z_lindft=z_lindft+z2;

    z_spldft=z_spldft+z2;

    zmmse=zmmse+zm;

    zmmse_dft=zmmse_dft+zms;

end



figure(1)

semilogy(snr1,(1/itr)*z_linin,'r+:', snr1,(1/itr)*z_splin,'bo:', snr1,(1/itr)*z_lindft,'--xg', snr1,(1/itr)*z_spldft,'--sc');

legend('LS - Linear Interpolation','LS - Spline Cubic Interpolation','LS - Linear Interpolation(DFT)','LS - Spline Cubic Interpolation(DFT)');

xlabel('SNR');

ylabel('MSE');

grid on

hold on


figure(2)

semilogy(snr1,(1/itr)*zmmse,'r+:',snr1,(1/itr)*zmmse_dft,'bo:');

xlabel('SNR');

ylabel('MSE');

legend('MMSE','MMSE - DFT Based');

hold on

grid on

 


figure(3)

semilogy(snr1,(1/itr)*z_linin,'r+:', snr1,(1/itr)*z_splin,'bo:', snr1, (1/itr)*zmmse,'--xg');

xlabel('SNR');

ylabel('MSE');

legend('LS - Linear Interpolation','LS - Spline Cubic Interpolation','MMSE');

hold on

grid on

⛄ 参考文献

[1] 童圣洁,李红信,邓晓燕.OFDM系统LS与MMSE信道估计算法仿真分析[J].微计算机信息, 2008, 24(34):2.DOI:10.3969/j.issn.1008-0570.2008.34.092.

[2] 曹文魁.基于OFDM协作通信系统中的信道估计技术研究[D].解放军信息工程大学[2023-06-22].DOI:CNKI:CDMD:2.1013.161304.

🍅 仿真咨询

1.卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
2.图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
3.旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划
4.无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
5.传感器部署优化、通信协议优化、路由优化、目标定位
6.信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号
7.生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化
8.微电网优化、无功优化、配电网重构、储能配置
9.元胞自动机交通流 人群疏散 病毒扩散 晶体生长

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
2天前
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
23 8
|
11月前
|
算法
m基于DVB-T的COFDM+16QAM+Viterbi码通信链路matlab性能仿真,包括载波和定时同步,信道估计
m基于DVB-T的COFDM+16QAM+Viterbi码通信链路matlab性能仿真,包括载波和定时同步,信道估计
245 0
|
10月前
|
算法 异构计算
m基于FPGA的多径信道模拟verilog实现,包含testbench,可配置SNR,频偏,多径增益和多径延迟
m基于FPGA的多径信道模拟verilog实现,包含testbench,可配置SNR,频偏,多径增益和多径延迟
200 0
|
机器学习/深度学习 传感器 编解码
【OFDM通信】OFDM仿真设计(卷积编码、自动增益控制、极大似然判决、QPSK收发、帧检测)附matlab代码
【OFDM通信】OFDM仿真设计(卷积编码、自动增益控制、极大似然判决、QPSK收发、帧检测)附matlab代码
|
算法
基于瑞丽多径信道的无线通信信道均衡算法matlab仿真,对比MMSE,ZF-DFE,MMSE-DFE
基于瑞丽多径信道的无线通信信道均衡算法matlab仿真,对比MMSE,ZF-DFE,MMSE-DFE
212 6
|
11月前
|
算法
m基于QPSK软解调和LDPC信道编译码的通信链路误码率仿真
m基于QPSK软解调和LDPC信道编译码的通信链路误码率仿真
236 0
|
11月前
|
算法
m基于16QAM软解调和LDPC信道编译码的通信链路误码率仿真
m基于16QAM软解调和LDPC信道编译码的通信链路误码率仿真
201 0
|
11月前
|
算法
m完整的SC-FDE单载波频域均衡通信链路matlab仿真,包括UW序列,QPSK,定时同步,载波同步,MMSE估计等
m完整的SC-FDE单载波频域均衡通信链路matlab仿真,包括UW序列,QPSK,定时同步,载波同步,MMSE估计等
287 0
|
算法 安全
m基于信道差错概率模型仿真对比RS,汉明码以及卷积编译码性能,仿真输出信道差错概率与误码率和仿真速度三维关系图
m基于信道差错概率模型仿真对比RS,汉明码以及卷积编译码性能,仿真输出信道差错概率与误码率和仿真速度三维关系图
115 0
m基于信道差错概率模型仿真对比RS,汉明码以及卷积编译码性能,仿真输出信道差错概率与误码率和仿真速度三维关系图
|
机器学习/深度学习 传感器 算法
基于Matlab模拟QPSK信道经过高斯信道和瑞利信道条件下的误码率性能仿真
基于Matlab模拟QPSK信道经过高斯信道和瑞利信道条件下的误码率性能仿真