Home > WaveComBox > Example > FBMC_OQAM > ChannelEstimationAndEqualization.m

ChannelEstimationAndEqualization

PURPOSE ^

Channel estimation and equalization for MIMO FBMC-OQAM system

SYNOPSIS ^

This is a script file.

DESCRIPTION ^

 Channel estimation and equalization for MIMO FBMC-OQAM system

 Example showing how to perform preamble-based channel estimation and
 equalize the channel of a MIMO FBMC-OQAM system under frequency selective
 channel.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % Channel estimation and equalization for MIMO FBMC-OQAM system
0002 %
0003 % Example showing how to perform preamble-based channel estimation and
0004 % equalize the channel of a MIMO FBMC-OQAM system under frequency selective
0005 % channel.
0006 
0007 % This file is part of WaveComBox: www.wavecombox.com and is distributed under
0008 % the terms of the MIT license. See accompanying LICENSE file.
0009 % Original author: François Rottenberg, May 8, 2018.
0010 % Contributors:
0011 % Change log:
0012 
0013 
0014 % Definition of general Parameters
0015 Para=InitializeChainParameters( 'FBMC-OQAM' ) % initialize parameters of the FBMC-OQAM chain
0016 Para.ActiveSubcarriers= 2:Para.nSubcarriers;
0017 Para.N_T=2;
0018 Para.N_R=3;
0019 Para.S=min(Para.N_T,Para.N_R);
0020 Para.Es_N0_dB=35;
0021 
0022 % Parameters of the preamble
0023 Para.PreamblePilotSubcarriers=Para.ActiveSubcarriers(1:2:end);
0024 Para.PreambleLength=Para.N_T;
0025 A=sqrt(length(Para.ActiveSubcarriers)/(length(Para.PreamblePilotSubcarriers) ));
0026 d_TR=A.*((randi([0 1],Para.nSubcarriers,1))*2-1);
0027 
0028 
0029 %% Transmitter
0030 
0031 % Preamble generation
0032 d_preamble=GeneratePreamble(d_TR, Para);
0033 % Data payload
0034 d_data=GenerateData (Para); % Generate data symbols
0035 % Synthesis filterbank
0036 d=MergePreambleData(d_preamble,d_data,Para);
0037 s = Modulator(d, Para ); % FBMC-OQAM modulation
0038 
0039 %% Channel
0040 C=GenerateRayleighChannelReal('ITU_VehB', Para);
0041 r = Channel_Multipath( s, C ); % Multipath channel
0042 r=Channel_AWGN( r, Para ); % AWGN channel, SNR fixed in Para
0043 
0044 %% Receiver
0045 % Analysis filterbank
0046 z = Demodulator( r, Para ); % FBMC demodulation
0047 [ z_preamble,z_data ] = SeparatePreambleData(z,Para);
0048 
0049 % Channel estimation (algorithm uses an a-priori on the channel impulse
0050 % response length in TD)
0051 L=length(C(1,1,:));
0052 C_est=ChannelEstimator(z_preamble,L,d_TR,Para);
0053 
0054 % Conventional single-tap equalizer
0055 ParaEqualizer.criterion='MMSE'; % Criterion chosen to design each equalizer
0056 [ x, B ] = Equalizer( z_data, C_est, Para, 'SingleTap', ParaEqualizer );
0057 d_hat=real(x);
0058 
0059 %% Compute performance metrics and plot results
0060 
0061 % Channel estimation
0062 figure
0063 plot(squeeze(real(fft(squeeze(C(1,1,:)),Para.nSubcarriers))),'-b')
0064 hold on
0065 Htemp=fft(squeeze(C_est(1,1,:)),Para.nSubcarriers);
0066 plot(real(Htemp),'xb')
0067 xlim([min(Para.ActiveSubcarriers) max(Para.ActiveSubcarriers)])
0068 xlabel('Subcarrier index')
0069 ylabel('Channel frequency response')
0070 legend('True', 'Estimated')
0071 
0072 
0073 % MSE of estimated symbols
0074 MSE = MSEComputes( d_data, d_hat, Para );
0075 
0076 figure
0077 plot(Para.ActiveSubcarriers, 10*log10(MSE),'-xb','markersize',8,'linewidth',1.5)
0078 hold on
0079 xlabel('Subcarrier index')
0080 ylabel('MSE [dB]')
0081 xlim([min(Para.ActiveSubcarriers) max(Para.ActiveSubcarriers)])
0082 legend('MSE')

Generated on Mon 14-Oct-2019 13:48:34 by m2html © 2005