0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 Para=InitializeChainParameters( 'FBMC-OQAM' )
0015 Para.Ns=1000;
0016 Para.Es_N0_dB=60;
0017
0018
0019
0020 d = GenerateData (Para);
0021 s = Modulator(d, Para );
0022
0023
0024 c=GenerateRayleighChannelReal('ITU_VehA', Para);
0025 r = Channel_Multipath( s, c );
0026 r=Channel_AWGN( r, Para );
0027
0028
0029 z = Demodulator( r, Para );
0030
0031 ParaEqualizer.criterion='MMSE';
0032
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
0038 ParaEqualizer.L_eq=3;
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
0044 ParaEqualizer.L_eq=3;
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
0050 ParaEqualizer.R=1;
0051 ParaEqualizer.r=r;
0052 [ x ] = Equalizer( z, c, Para, 'ParallelMultistage', ParaEqualizer );
0053 d_hat=real(x);
0054 MSE_Parallel_multistage = MSEComputes( d, d_hat, Para );
0055
0056
0057 [ x ] = Equalizer( z, c, Para, 'FrequencySpreading', ParaEqualizer );
0058 d_hat=real(x);
0059 MSE_frequency_spreading = MSEComputes( d, d_hat, Para );
0060
0061
0062
0063 ParaEqualizer.Kov=ceil(length(c(1,1,:))/2)*2*2;
0064 ParaEqualizer.N=2*Para.nSubcarriers;
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
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
0092
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