+ Post New Thread
Results 1 to 5 of 5

12th March 2018, 09:12 #1
 Join Date
 Mar 2018
 Posts
 6
 Helped
 0 / 0
 Points
 45
 Level
 1
What is best method for channel estimation in IEEE802.11n with 108 data and 6 pilot?
Hi all,
Does anyone know what is the best algorithm for channel estimation in "IEEE 802.11n" with (108 data subcarrier and 6 pilots)?
Because when I use the Channel Estimation based on PilotAssisted Linear Interpolation for IEEE802.11a/g with 4 pilot, my code work as well according to this formula:
But for 6 pilots not work for IEEE802.11n.
Does anyone have any suggestions?

Advertisment

12th March 2018, 23:16 #2
 Join Date
 Oct 2013
 Posts
 189
 Helped
 66 / 66
 Points
 1,968
 Level
 10
 Blog Entries
 5
Re: What is best method for channel estimation in IEEE802.11n with 108 data and 6 pil
The "best" algorithm really depends on your requirements; it depends on the nature of the channel and the resources you have available to perform the computation.
It also depends on which part(s) of the 802.11n standard you want to support. For example, if you want to support MIMO and/or STBC, then your channel estimation/equalisation procedure is likely to be more complex.
If you are only interested in singleantenna systems (i.e. no MIMO or STBC or MRC), then there is no structural difference between 802.11n and 802.11g in this context. Any technique that worked for 802.11g can be adapted to work for 802.11n.
1 members found this post helpful.

Advertisment

13th March 2018, 09:10 #3
 Join Date
 Mar 2018
 Posts
 6
 Helped
 0 / 0
 Points
 45
 Level
 1
Re: What is best method for channel estimation in IEEE802.11n with 108 data and 6 pil
First, thank you for your good advice to me.
I'm interested to use an only single antenna, after getting the result without error, change to the MIMO system.
First: Initialize the parameters for the 802.11n  40MHz  channel: 114 subcarriers (108 data, 6 pilots [53 25 11 +11 +25 +53]).
Code:Bit_Num = 6; %64QAM  FFT_Num = 128; %FFT size  Carrier_Num = 108;  OFDM_per_Symbol = 1;  CP=32; % NFFT/4  LI = 18; %B/W 11 to +11 pilots , there are 18 data  Np = 6; %Nsp: No. pilot carrier Carriers = 1:Carrier_Num+Np;  N_Num = Bit_Num*Carrier_Num*OFDM_per_Symbol;
***
In the RX side, First, I did Packet detection and GI Removal, Then Time offset estimation and FFT transform.
ُSo, when I want to start to channel estimation with normal structure and with above formula for 6 pilots, I have an error, that I can not continue to next step for Demodulate. Because the formula work as well with 4 pilots. But when change to 6, I have an error "Matrix dimensions must agree." related to make the FFT system, because dimensions of FFTtmp is 108, but dimensions of HLs(channel estimation) with above formula is 102. that I do not know, how to I can resolve this problem???

Advertisment

13th March 2018, 21:40 #4
 Join Date
 Oct 2013
 Posts
 189
 Helped
 66 / 66
 Points
 1,968
 Level
 10
 Blog Entries
 5
Re: What is best method for channel estimation in IEEE802.11n with 108 data and 6 pil
As I said before, the principle is exactly the same. Did you write the original code, or is this something you found online and are trying to adapt? If you understand the original version, you should be able to adapt it for your requirements.
Your descriptions are very vague. It is difficult to help you any further unless you upload your full code.

14th March 2018, 08:47 #5
 Join Date
 Mar 2018
 Posts
 6
 Helped
 0 / 0
 Points
 45
 Level
 1
Re: What is best method for channel estimation in IEEE802.11n with 108 data and 6 pil
this code is orginal by made me. just I want to next step adept with other parameters.
my problem with this section (channel estimation), I know for 4 pilots with these loops, with 3 repeats with 16 iterations make 48 data carrier for 802.11a/g.
But with 6 pilots, does not work these loops, because 61=5, and for iteration, the value is not an integer: 108/5=21.5
Code:%%%%%%%% OFDM transceiver with 802.11n %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%% Mohammad Hosseinvand %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% February 2018 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%% %40Mhz %FFT: 128 %64QAM %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% Sub carriers (total/data): 114 total%%%%%%%%%%%%%%% %%%%%%%% Number of Pilots:6 {53,25,11,11,25,53} %%%%%%%%% %%%%% Signal is TX on subcarriers 58 to 2 and 2 to 58 %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% clear all; clc; %% *** Initialize the parameters *** %802.11n 40MHz channel: 114 subcarriers (108 data, 6 pilot) Bit_Num = 6; %64QAM = 2^6 FFT_Num = 128; %FFT length Carrier_Num = 108; %Nsd: No. data carrier OFDM_per_Symbol = 1; %CP=32; % NFFT/4 = 128/4=32 %LI = 18; %B/W 11 to +11 pilots , there are 18 data Np = 6; % No. pilot carrier Carriers = 1:Carrier_Num+Np; % Total no. carreirs 114 N_Num = Bit_Num*Carrier_Num*OFDM_per_Symbol; %% ***Generate the random binary stream for transmitTransmitter starts*** BitTx= round(rand(1,(N_Num))); %% ***Modulate (generates 64QAM symbols)*** N_Num=length(BitTx); SymQAMtmp=reshape(BitTx,6,N_Num/6).'; SymQAMtmptmp=bi2de(SymQAMtmp,2,'leftmsb'); QAMTable = [ 77j, 77j, 17j, 17j, 57j, 57j,... 37j, 37j, 7+7j, 7+7j, 1+7j, 1+7j,... 5+7j, 5+7j, 3+7j, 3+7j, 71j, 71j,... 11j, 11j, 51j, 51j, 31j, 31j,... 7+1j, 7+1j, 1+1j, 1+1j, 5+1j, 5+1j,... 3+1j, 3+1j, 75j, 75j, 15j, 15j,... 55j, 55j, 35j, 35j, 7+5j, 7+5j,... 1+5j, 1+5j, 5+5j, 5+5j, 3+5j, 3+5j,... 73j, 73j, 13j, 13j, 53j, 53j,... 33j, 33j, 7+3j, 7+3j, 1+3j, 1+3j,... 5+3j, 5+3j, 3+3j, 3+3j]; SymQAM=QAMTable(SymQAMtmptmp+1); %% ***Generate the preamble signal*** fsMHz = 40; % sampling frequency nFFTSize = 128; % for each symbol bits a1 to a114 are assigned to subcarrier % index [–58 to –2 +2 to +58] % Short preamble subcarrierIndex = [58:2 2:58]; %for 40Mhz and FFT 128 S1 = [zeros(1,6) 0 0 1+1j 0 0 0 11j 0 0 0 1+1j 0 0 0 11j 0 0 0 11j 0 0 0 1+1j 0 0 0 ... 0 0 0 0 11j 0 0 0 11j 0 0 0 1+1j 0 0 0 1+1j 0 0 0 1+1j 0 0 0 1+1j 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0 1+1j 0 0 0 11j 0 0 0 1+1j 0 0 0 11j 0 0 0 11j 0 0 0 1+1j ... 0 0 0 0 0 0 0 11j 0 0 0 11j 0 0 0 1+1j 0 0 0 1+1j 0 0 0 1+1j 0 0 0 1+1j 0 0 zeros(1,5)]; S1 = sqrt(19/4)*(S1); % Long preamble S2 = [zeros(1,8),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,... 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,... 1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,... 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,... 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,zeros(1,7)]; S1_td=ifft(S1,128); S2_td=ifft(S2,128); %STEP3 Adding CP to the time domain preamble symbol 1 and symbol 2 CP= ceil(FFT_Num/4); S2_tdcp=[S2_td(endCP+1:end) S2_td S2_td]; % concatenating multiple symbols to form 10 short preamble S1_tdcp = [S1_td S1_td S1_td(1:32)]; preamble = [S1_tdcp S2_tdcp]; %% ***Generate the pilot signal*** train_sym1= round(rand(1,(2*OFDM_per_Symbol))); train_sym2= round(rand(1,(2*OFDM_per_Symbol))); t= 2*(train_sym1.*21)+(train_sym2.*21); treal= t(1:2:2*OFDM_per_Symbol); timage= t(2:2:2*OFDM_per_Symbol); training_symbols1= treal+1i*timage; training_symbols2= training_symbols1.'; training_symbols=repmat(training_symbols2,1,Np); %kData = [58:54,52:26,24:12,10:2,2:10,12:24,26:52,54:58]; pilot = [1,29,43,62,76,104]; %start position of pilots/**shift border from 58 to 1 to start first pilot and so on ... because of positive vector in Matlab %pilot = [6,34,48,67,81,109]; %% ***P/S transform*** SymQAM1=reshape(SymQAM,Carrier_Num,OFDM_per_Symbol).'; %% ***Insert the pilot symbols*** signal=1:Carrier_Num+Np; signal(pilot)=[]; SymQAM2(:,pilot)=training_symbols; SymQAM2(:,signal)=SymQAM1; SymQAM3=SymQAM2.'; %% ***IFFT transform*** SymIFFT=ifft(SymQAM3,FFT_Num,1); %% ***GI Insertion*** SymTxtmp= zeros(FFT_Num+CP,OFDM_per_Symbol); SymTxtmp(1:CP,:)= SymIFFT(FFT_NumCP+1:FFT_Num,:); SymTxtmp(CP+1:CP+FFT_Num,:)= SymIFFT; SymTx=reshape(SymTxtmp,1,(FFT_Num+CP)*OFDM_per_Symbol); %% *************** Transmitter ends ***************************** %% *************** Receiver starts ****************************** %% ***Packet detection*** SymRxdel=[zeros(1,CP) SymTx(1:length(SymTx)CP)]; % Delayed y = xcorr(SymTx,SymRxdel); [m,n]=max(y); t_offset_Packet_detection = n1; SymRx= y(t_offset_Packet_detection+1:end); %% ***GI Removal*** SymRxtmp= reshape(SymTx,FFT_Num+CP,OFDM_per_Symbol); SymRx= SymRxtmp(CP+1:CP+FFT_Num,:); SymRx=reshape(SymRx,1,128); %% ***Time offset estimation*** Toff=input('Enter time offset any numeric number(for example 100):'); SymRx2=[zeros(1,Toff),SymRx]; if length(SymRx2)>length(S1_tdcp) pad = length(SymRx2)length(S1_tdcp); S1_tdcp = [S1_tdcp zeros(1,pad)]; elseif length(SymRx2)<length(S1_tdcp) pad = length(S1_tdcp)length(SymRx2); SymRx2 = [SymRx2 zeros(1,pad)]; end out_len = length(SymRx2); out = zeros(1,out_len); tmp = S1_tdcp; for k = 1:out_len out(k) = SymRx2*tmp'; tmp = [0 tmp(1:end1)]; end [m,n]=max(out); t_offset_Time_estimation = n1; %% ***FFT transform*** SymRx=reshape(SymRx,FFT_Num,OFDM_per_Symbol); SymFFT=fft(SymRx,FFT_Num,1); SymFFT=SymFFT(1:Carrier_Num+Np,:); %% ***Channel Estimation*** % extract pilots from received signal SymFFT1=SymFFT.'; Rx_training_symbols= SymFFT1(:,pilot); Rx_training_symbols0= reshape(Rx_training_symbols,OFDM_per_Symbol*Np,1); % reshape original pilots training_symbols0= reshape(training_symbols,1,OFDM_per_Symbol*Np); training_symbols1= diag(training_symbols0); training_symbols2= inv(training_symbols1); Hls= (training_symbols2)*Rx_training_symbols0; Hls1= reshape(Hls,OFDM_per_Symbol,Np); HLs=[]; HLs2=[]; %%%%%%%% my problem with this section, I know for 4 pilot with this loop, with 3 repeat with 16 iteration make 48 data carrier for 802.11a/generates %%%%%%%% But with 6 pliots,doest not work this loops, because 61=5,and for iteration value is not integer: 108/5=21.5 for k=1:Np1 HLs2=[]; for j=1:16 HLs1(:,1)=(Hls1(:,k+1)Hls1(:,k))*(j1)/LI+Hls1(:,k); HLs2=[HLs2,HLs1]; end HLs=[HLs,HLs2]; end HLs=[HLs,HLs2]; SymFFT1=SymFFT.'; SymFFT2=SymFFT1(:,signal); SymFFT3= SymFFT2./HLs; SymFFT=SymFFT3.'; %% ***Demodulate*** SymDeQAMtmp=reshape(SymFFT,1,OFDM_per_Symbol*Carrier_Num); m=real(SymDeQAMtmp); n=abs(real(SymDeQAMtmp)); p=imag(SymDeQAMtmp); q=abs(imag(SymDeQAMtmp)); s=2*(m==n)1; t=2*(p==q)1; SymDeQAMtmpshift=SymDeQAMtmp+((2)*(s+1i*t)); bit0=imag(SymDeQAMtmp); bit1=imag(SymDeQAMtmpshift); bit2=real(SymDeQAMtmp); bit3=real(SymDeQAMtmpshift); SymDeQAMtmptmp=zeros(Bit_Num,OFDM_per_Symbol*Carrier_Num); SymDeQAMtmptmp(1,:)=bit0; SymDeQAMtmptmp(2,:)=bit1; SymDeQAMtmptmp(3,:)=bit2; SymDeQAMtmptmp(4,:)=bit3; for j=1:(Bit_Num*OFDM_per_Symbol*Carrier_Num) if SymDeQAMtmptmp(j)>0 SymDeQAMtmptmp(j)=0; else SymDeQAMtmptmp(j)=1; end end SymDeQAM=reshape(SymDeQAMtmptmp,1,Bit_Num*OFDM_per_Symbol*Carrier_Num);
+ Post New Thread
Please login