⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ls_channel_extimation.m

📁 在OFDM系统中最经典的信道估计方法是LS算法
💻 M
字号:
randn('state',sum(100*clock));
%%%channel model
tau= [0 0.5e-006 1.0000e-006];
fd=0.4;
pdb=[0 -5 -10];
ts=0.5e-006;
chan = rayleighchan(ts,fd,tau,pdb);
OFDM_carrier_nubmber=64;
SNR=0:10:20;
h(1)=-0.8673 - 0.7249i;
h(2)=0.1222 - 0.0154i;
h(3)=0.2539 - 0.0810i;
for i=4:OFDM_carrier_nubmber
    h(i)=0;
end
channel_frequency=fft(h);
%%%plot real channel_frequency
% figure;
% stem(abs(channel_frequency));
 abs_real=abs(channel_frequency); 
%%%%%%input signal
for i=1:OFDM_carrier_nubmber
    input_carrier(i)=1;
end
ifft_out_signal=ifft(input_carrier)/sqrt(OFDM_carrier_nubmber);
for i=(OFDM_carrier_nubmber-7):OFDM_carrier_nubmber
    cp(i-OFDM_carrier_nubmber+8)=ifft_out_signal(i);
end
ifft_signal_add_cp=[cp,ifft_out_signal];
signal_through_channel=filter(chan,ifft_signal_add_cp);

receive_carrier=zeros(1,OFDM_carrier_nubmber);

for n = 1:length(SNR)

pilot_number=OFDM_carrier_nubmber;   %其实在很多情况下导频数远远小于256
Rhp=zeros(OFDM_carrier_nubmber);

simulate_number=2000;
for simulate=1:simulate_number
signal_through_channel_noise=awgn(signal_through_channel,SNR(n));
%%%%%
%Remove cp
for i=9:(OFDM_carrier_nubmber+8)
    receive_signal(i-8)=signal_through_channel_noise(i);
end
receive_carrier_everytime=fft(receive_signal)*sqrt(OFDM_carrier_nubmber);
receive_carrier=receive_carrier+fft(receive_signal).*sqrt(OFDM_carrier_nubmber);
 %Rhp=Rhp+conj(receive_carrier_everytime')*receive_carrier_everytime;

 
 
 
end      %for simulate=1:simulate_number end
 sigma_square=1/(10.^SNR(n));              %此处SNR不能用分贝表示
 Rhp_estimation= conj(channel_frequency')*channel_frequency;
%Rhp_estimation=Rhp./simulate_number;
receive_carrier=receive_carrier./simulate_number;            %%这一步是最小平方估计结果(某个信噪比情况下)
receive_carrier_estimation= receive_carrier./1;               %channel estimation
abs_receive=abs(receive_carrier_estimation); 



matrix=Rhp_estimation+sigma_square*eye(OFDM_carrier_nubmber);

H_LMMSE=Rhp_estimation*inv(Rhp_estimation);  %eye表示单位矩阵
H_LMMSE=conj(H_LMMSE');

%%%%real channel frequency 

%figure;
%%%%plot LS-channel_estimation
%stem(abs(receive_carrier_estimation));


%%MSE copulate

    error1=0;%clear error parametor to prepair the next simulation
    error2=0;
    error3=0;

    e=ifft(receive_carrier_estimation);
for i=8:64
    e(i)=0;
end
ee=fft(e);
    for i=1:OFDM_carrier_nubmber
        error1=error1+(abs(channel_frequency(i)-receive_carrier_estimation(i))).^2;
        %error=error+(abs_receive(i)-abs_real(i)).^2;
        error2=error2+(abs(channel_frequency(i)-H_LMMSE(i))).^2; 
        error3=error3+(abs(channel_frequency(i)-ee(i))).^2;
    end
    error_index1(n)=error1/OFDM_carrier_nubmber;   %除以256是因为估计的一个信道参数包括256个子载波
    MSE1(n)=error_index1(n);
    
     error_index2(n)=error2/OFDM_carrier_nubmber;
    MSE2(n)=error_index2(n);
     error_index3(n)=error3/OFDM_carrier_nubmber;   %除以256是因为估计的一个信道参数包括256个子载波
    MSE3(n)=error_index3(n);  
end   %for n = 1:length(SNR)
figure;
semilogy(SNR,MSE1,SNR,MSE3); 
 

grid on;
LS_channel_timedomain=abs(ifft(receive_carrier_estimation));
figure;
plot(LS_channel_timedomain);

 
  
    
    

  
    
    
 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -