• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: Matlab
  • 标签: matlab仿真  

资源简介

信道估计的MATLAB仿真,其中分别给出基于导频的了MMSE估计和LS估计。

资源截图

代码片段和文件信息

%channel_estimation.m
%采用线性/样条插值的LS/DFT信道估计
clear allclose allclf
addpath(‘E:\matlab\channel estimation‘)
Nfft=32;
Ng=Nfft/8;
Nofdm=Nfft+Ng;
Nsym=100;
Nps=4;%导频间隔
Np=Nfft/Nps;%每个OFDM符号的导频数
Nbps=4;
M=2^Nbps;%每个调制符号的比特数
mod_object=modem.qammod(‘M‘M‘SymbolOrder‘‘gray‘);
demod_object=modem.qamdemod(‘M‘M‘SymbolOrder‘‘gray‘);
Es=1;%信号能量
A=sqrt(3/2/(M-1)*Es);%QAM归一因子
SNR=30;
sq2=sqrt(2);
rand(‘seed‘1);
randn(‘seed‘1);
MSE=zeros(16);
nose=0;
for nsym=1:Nsym
    Xp=2*(randn(1Np)>0)-1;% 生成导频序列
    msgint=randint(1Nfft-NpM);%比特生成
    Data=A*modulate(mod_objectmsgint);
   ip=0;
   pilot_loc=[];
   for k=1:Nfft
       if mod(kNps)==1
           X(k)=Xp(floor(k/Nps)+1);
           pilot_loc=[pilot_loc k];
           ip=ip+1;
       else
           X(k)=Data(k-ip);
       end
   end
x=ifft(XNfft);%IFFT
xt=[x(Nfft-Ng+1:Nfft) x];%加CP
h=[(randn+j*randn) (randn+j*randn)/2];%产生一个2抽头信道
H=fft(hNfft);channel_length=length(h);%实际信道和它的长度
H_power_dB=10*log10(abs(H.*conj(H)));%实际信道功率[dB]
y_channel=conv(xth);%信道路径卷积
yt=awgn(y_channelSNR‘measured‘);%加入噪声
y=yt(Ng+1:Nofdm);%去CP
Y=fft(y);
for m=1:3
    if m==1
%线性插值的LS估计
        H_est=LS_CE(YXppilot_locNfftNps‘linear‘);
        method=‘LS-linear‘;
    elseif m==2
        %样条插值的LS估计
        H_est=LS_CE(YXppilot_locNfftNps‘spline‘);
        method=‘LS-spline‘;
    else
        %MMSE估计
        H_est=MMSE_CE(YXppilot_locNfftNpshSNR);
        method=‘MMSE‘;
    end
    H_est_power_dB=10*log10(abs(H_est.*conj(H_est)));
    h_est=ifft(H_est);
    h_DFT=h_est(1:channel_length);
    H_DFT=fft(h_DFTNfft);%基于DFT的信道估计
    H_DFT_power_dB=10*log10(abs(H_DFT.*conj(H_DFT)));
    if nsym==1
        subplot(319+2*m)
        plot(H_power_dB‘b‘‘linewidth‘1)
        grid onhold on
        plot(H_est_power_dB‘r:+‘‘Markersize‘4‘linewidth‘1);
        axis([0 32 -6 10])
        xlabel(‘Subcarrier Index‘)
        ylabel(‘Power[dB]‘)
        legend(‘True Chanel‘method4)
        set(gca‘fontsize‘9)
        subplot(320+2*m)
        plot(H_power_dB‘b‘‘linewidth‘1)
        grid onhold on
        plot(H_DFT_power_dB‘r:+‘‘Markersize‘4‘linewidth‘1);
        axis([0 32 -6 10])
        xlabel(‘Subcarrier Index‘)
        ylabel(‘Power[dB]‘)
        legend(‘True Chanel‘method4)
        set(gca‘fontsize‘9)
    end
    MSE(m)=MSE(m)+(H-H_est)*(H-H_est)‘;
    MSE(m+3)=MSE(m+3)+(H-H_est)*(H-H_est)‘;
end
Y_eq=Y./H_est;
if nsym>=Nsym-10
    figure(2)subplot(221)
    plot(Y‘.‘‘Markersize‘5)
    axis([-1.5 1.5 -1.5 1.5])
    set(gca‘fontsize‘9)
    hold on
    subplot(222)
    plot(Y_eq‘.‘‘Markersize‘5)
    axis([-1.5 1.5 -1.5 1.5])
    set(gca‘fontsize‘9)
end
ip=0;
for k=1:Nfft
    if mod(kNps)==1
        ip=ip+1;
    else
        Data_extracted(k-ip)=Y_eq(k);
    end
end
msg_detected=demodulate(demod_objectData_extracted/A);
nose=nose+sum(msg_detected~=msgint);
MSEs=MSE/(Nfft*Nsym);
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件         452  2014-11-27 15:09  channel estimation\LS_CE.m
     文件         805  2014-11-27 15:18  channel estimation\MMSE_CE.m
     文件        3257  2014-11-27 15:20  channel estimation\channel_estimation.m
     文件         778  2014-11-27 15:16  channel estimation\interpolate.m
     目录           0  2014-11-27 15:24  channel estimation\

评论

共有 条评论