Home > WaveComBox > Example > FBMC_OQAM > SISOSynchroAndChannelEstimation.m

SISOSynchroAndChannelEstimation

PURPOSE ^

Synchronization, channel estimation and equalization for SISO FBMC-OQAM

SYNOPSIS ^

This is a script file.

DESCRIPTION ^

 Synchronization, channel estimation and equalization for SISO FBMC-OQAM

 This file is part of WaveComBox: www.wavecombox.com and is distributed under
 the terms of the MIT license. See accompanying LICENSE file.
 Original author: François Rottenberg, June 29, 2018.
 Contributors:
 Change log:

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

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

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