Home > WaveComBox > Example > FBMC_OQAM > SISOEqualizerComparison.m

SISOEqualizerComparison

PURPOSE ^

Equalizer comparison for FBMC-OQAM system under high channel frequency selectivity

SYNOPSIS ^

This is a script file.

DESCRIPTION ^

 Equalizer comparison for FBMC-OQAM system under high channel frequency selectivity

 Example showing a comparison of equalizer for a SISO FBMC-OQAM system
 under frequency selective channel.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % Equalizer comparison for FBMC-OQAM system under high channel frequency selectivity
0002 %
0003 % Example showing a comparison of equalizer for a SISO FBMC-OQAM system
0004 % under frequency selective channel.
0005 
0006 % This file is part of WaveComBox: www.wavecombox.com and is distributed under
0007 % the terms of the MIT license. See accompanying LICENSE file.
0008 % Original author: François Rottenberg, May 8, 2018.
0009 % Contributors:
0010 % Change log:
0011 
0012 
0013 % Definition of general Parameters
0014 Para=InitializeChainParameters( 'FBMC-OQAM' ) % initialize parameters of the FBMC-OQAM chain
0015 Para.Ns=1000;
0016 Para.Es_N0_dB=60; % We consider a high SNR scenario to better observe the distortion due to channel frequency selectiviy
0017 
0018 
0019 %% Transmitter
0020 d = GenerateData (Para); % Generate data symbols
0021 s = Modulator(d, Para ); % FBMC-OQAM modulation
0022 
0023 %% Channel
0024 c=GenerateRayleighChannelReal('ITU_VehA', Para);
0025 r = Channel_Multipath( s, c ); % Multipath channel
0026 r=Channel_AWGN( r, Para ); % AWGN channel, SNR fixed in Para
0027 
0028 %% Receiver
0029 z = Demodulator( r, Para ); % FBMC demodulation
0030 
0031 ParaEqualizer.criterion='MMSE'; % Criterion chosen to design each equalizer
0032 % Single_tap_equalizer
0033 [ x, B ] = Equalizer( z, c, Para, 'SingleTap', ParaEqualizer );
0034 d_hat=real(x);
0035 MSE_single_tap_equalizer = MSEComputes( d, d_hat, Para );
0036 
0037 % Multi-tap equalizer (frequency sampling)
0038 ParaEqualizer.L_eq=3; % number of taps
0039 [ x ] = Equalizer( z, c, Para, 'MultiTapFS', ParaEqualizer );
0040 d_hat=real(x);
0041 MSE_multi_tap_equalizer_FS = MSEComputes( d, d_hat, Para );
0042 
0043 % Multi-tap equalizer (MMSE)
0044 ParaEqualizer.L_eq=3; % number of taps
0045 [ x ] = Equalizer( z, c, Para, 'MultiTapFullMMSE', ParaEqualizer );
0046 d_hat=real(x);
0047 MSE_multi_tap_equalizer_MMSE = MSEComputes( d, d_hat, Para );
0048 
0049 % Parallel equalization
0050 ParaEqualizer.R=1; % number of additional parallel stages
0051 ParaEqualizer.r=r; % received signal should be provided as a parameter of the equalizer
0052 [ x ] = Equalizer( z, c, Para, 'ParallelMultistage', ParaEqualizer );
0053 d_hat=real(x);
0054 MSE_Parallel_multistage = MSEComputes( d, d_hat, Para );
0055 
0056 % Frequency spreading receiver
0057 [ x ] = Equalizer( z, c, Para, 'FrequencySpreading', ParaEqualizer );
0058 d_hat=real(x);
0059 MSE_frequency_spreading = MSEComputes( d, d_hat, Para );
0060 
0061 % Time domain equalization (implented in frequency domain using
0062 % overlap-and-save method)
0063 ParaEqualizer.Kov=ceil(length(c(1,1,:))/2)*2*2; % Number of discarded samples (needs to be even)
0064 ParaEqualizer.N=2*Para.nSubcarriers; % Transform size
0065 [ x ] = Equalizer( z, c, Para, 'TimeDomain', ParaEqualizer );
0066 
0067 d_hat=real(x);
0068 MSE_time_domain = MSEComputes( d, d_hat, Para );
0069 
0070 
0071 
0072 %% Plot performance
0073 figure
0074 plot(-1,1,'-b','markersize',6,'linewidth',1)
0075 hold on
0076 plot(-1,1,'-sg','markersize',6,'linewidth',1 )
0077 plot(-1,1,'-xg','markersize',6,'linewidth',1 )
0078 plot(-1,1,'-+k','markersize',6,'linewidth',1 )
0079 plot(-1,1,'--or','markersize',6,'linewidth',1 )
0080 plot(-1,1,'-vc','markersize',6,'linewidth',1 )
0081 
0082 plot(Para.ActiveSubcarriers.',10*log10(MSE_single_tap_equalizer),'-b','markersize',6,'linewidth',1)
0083 hold on
0084 plot(Para.ActiveSubcarriers, 10*log10(MSE_multi_tap_equalizer_FS),'-g','markersize',6,'linewidth',1 )
0085 plot(Para.ActiveSubcarriers, 10*log10(MSE_multi_tap_equalizer_MMSE),'-g','markersize',6,'linewidth',1 )
0086 plot(Para.ActiveSubcarriers, 10*log10(MSE_Parallel_multistage),'-k','markersize',6,'linewidth',1 )
0087 plot(Para.ActiveSubcarriers, 10*log10(MSE_frequency_spreading),'--r','markersize',6,'linewidth',1 )
0088 plot(Para.ActiveSubcarriers, 10*log10(MSE_time_domain),'-c','markersize',6,'linewidth',1 )
0089 
0090 pas=4;
0091 % plot(Para.ActiveSubcarriers(1:pas:end).',10*log10(MSE_single_tap_equalizer(1:pas:end)),'markersize',6,'linewidth',1)
0092 % hold on
0093 plot(Para.ActiveSubcarriers(1:pas:end), 10*log10(MSE_multi_tap_equalizer_FS(1:pas:end)),'sg','markersize',6,'linewidth',1 )
0094 plot(Para.ActiveSubcarriers(1:pas:end), 10*log10(MSE_multi_tap_equalizer_MMSE(1:pas:end)),'xg','markersize',6,'linewidth',1 )
0095 plot(Para.ActiveSubcarriers(1:pas:end), 10*log10(MSE_Parallel_multistage(1:pas:end)),'+k','markersize',6,'linewidth',1 )
0096 plot(Para.ActiveSubcarriers(1:pas:end), 10*log10(MSE_frequency_spreading(1:pas:end)),'or','markersize',6,'linewidth',1 )
0097 plot(Para.ActiveSubcarriers(1:pas:end), 10*log10(MSE_time_domain(1:pas:end)),'vc','markersize',6,'linewidth',1 )
0098 
0099 xlabel('Subcarrier index')
0100 ylabel('MSE [dB]')
0101 xlim([Para.ActiveSubcarriers(1) Para.ActiveSubcarriers(end)])
0102 legend('Single-tap','Multi-tap FS','Multi-tap MMSE','Parallel multistage','Frequency spreading','Time domain')
0103 
0104 
0105

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