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

📄 ofdmlsechannelestimation.m

📁 OFDM 系统中对信道进行 LSE 估计
💻 M
字号:
% OFDM LSE Channel Estimation 
% 
% --------------------------------------------------------------------------------
% 
% Author: Hamid Ramezani 
% Summary: the performance of LSE channel estimation will be evaluated based on bit error rate in received data 
% MATLAB Release: R14 
% 
% Description: the comb pilot aided channel estimation in ofdm modulation is considered. the power of pilot subchannels is under the control.
% The data experience frequency selective channel then the AWGN noise is added to make the situation worse. The bit error rate is ploted versus SNR. 
% 
% --m file

% in this Mfile, I want to investigate the performance of LSE algorithm in
% OFDM channel estimation
%
% for further information see the 
% [Xiaodong Cai and Georgios B. Giannakis,
% error Probability Minimizing Pilots for
% OFDM with M-PSK Modulation over Rayliegh-Fading
% Channels,?IEEE Transactions on Vehicular 
% technology, vol. 53, No. 1, pp 146-155, Jan. 2004.]


% initialize 
clear
clc


% parameter definition
N=256; % total number of subchannels
P=256/8; % total number of Pilots
S=N-P; % totla number of data subchannels
GI=N/4; % guard interval length
M=2; % modulation
PilotInterval=8; % pilot position interval
L=16; % channel length
nIteration=500; % number of iteration in each evaluation

SNR_V=[0:3:27]; % signal to noise ratio vector in dB
ber=zeros(1,length(SNR_V)); % initializing bit error rate

% Pilot Location and strength
Ip=[1:PilotInterval:N]; % location of pilots
Is=setxor(1:N,Ip); % location of data

Ep=2; % energy in pilot symbols in comparison 
% to energy in data symbols

% fft matrix
F=exp(2*pi*sqrt(-1)/N .* meshgrid([0:N-1],[0:N-1]).* repmat([0:N-1]',[1,N]));


for( i=1 : length(SNR_V))
SNR=SNR_V(i)
for(k=1 : nIteration)
% generating random channel coefficients
h(1:L,1)=random('Normal',0,1,L,1) + ...%产生多径信道
j * random('Normal',0,1,L,1); 
h=h./sum(abs(h)); % normalization 

% Tr Data
TrDataBit=randint(N,1,M);%产生均匀分布0~M-1的整数
TrDataMod=qammod(TrDataBit,M);
TrDataMod(Ip)=Ep * TrDataMod(Ip);
TrDataIfft=ifft(TrDataMod,N);
TrDataIfftGi=[TrDataIfft(N- GI + 1 : N);TrDataIfft];%加循环前缀

% tx Data 
TxDataIfftGi=filter(h,1,TrDataIfftGi); % channel effect
% adding awgn noise
TxDataIfftGiNoise=awgn(TxDataIfftGi, SNR - db(std(TxDataIfftGi))); % normalization to signal power db函数带有平方

TxDataIfft=TxDataIfftGiNoise(GI+1:N+GI);%去循环前缀
TxDataMod=fft(TxDataIfft,N);

% Channel estimation
Spilot=TrDataMod(Ip); % trnasmitted pilots
Ypilot=TxDataMod(Ip); % received pilots

G=(Ep * length(Ip))^-1* ctranspose(sqrt(Ep)*diag(Spilot)*ctranspose(F(1:L, Ip)));%ctranspose(F(1:L, Ip))=(F(1:L, Ip))'

hHat=G*Ypilot; % estimated channel coefficient in time domain

TxDataBit=qamdemod(TxDataMod./(fft(hHat,N)),M);

% bit error rate computation
[nErr bErr(i,k)]=symerr(TxDataBit(Is),TrDataBit(Is));
end
end

f1=figure(1);
set(f1,'color',[1 1 1]);
semilogy(SNR_V,mean(bErr'),'b->')
xlabel('SNR in dB');
ylabel('Bit Error Rate')

⌨️ 快捷键说明

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