📄 ls_channel_extimation.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 + -