0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 Para=InitializeChainParameters( 'FBMC-OQAM' )
0018 Para.Ns=2000;
0019 Para.Es_N0_dB=45;
0020 Para.T = 1/30e9*Para.nSubcarriers;
0021 clight = 299792458 ;
0022 lambda = 1550e-9 ;
0023 Para.CenterFrequency = clight/lambda ;
0024
0025
0026 d = GenerateData (Para);
0027 s = Modulator(d, Para );
0028
0029
0030 L_fiber = 400e3;
0031 D = 17e-6;
0032 r = Channel_ChromaticDispersion( s, L_fiber, D, Para );
0033 r=Channel_AWGN( r, Para );
0034
0035
0036 z = Demodulator( r, Para );
0037
0038
0039 M=Para.nSubcarriers/2;
0040 lambda = clight/Para.CenterFrequency ;
0041 Ts=Para.T/Para.nSubcarriers;
0042 alpha=D*lambda^2*L_fiber*pi./clight;
0043 alpha_tilde=alpha/((2*pi*Ts)^2);
0044 omega_axis = fftshift((2*pi/(2*M)).*(-M:M-1)');
0045 b = exp(1i*alpha_tilde.*omega_axis.^2);
0046 [x, ~] = FBMC_OQAM_EqualizerSingleTap( z, 0, 'Specific', Para, b );
0047
0048 d_hat=real(x);
0049 MSE_single_tap_equalizer = MSEComputes( d, d_hat, Para );
0050
0051
0052 L=3;
0053 P=(L-1)/2;
0054 omega_axis =fftshift( (2*pi/(2*M*(L+1)/2)).*(-M*(L+1)/2:M*(L+1)/2-1)');
0055 Harg = exp(-1i*alpha_tilde.*omega_axis.^2);
0056 [ x ] = FBMC_OQAM_EqualizerMultiTapFS( z, 0, L, 'Specific', Para, Harg );
0057 d_hat=real(x);
0058 MSE_multi_tap_equalizer_FS = MSEComputes( d, d_hat, Para );
0059
0060 L=7;
0061 P=(L-1)/2;
0062 omega_axis =fftshift( (2*pi/(2*M*(L+1)/2)).*(-M*(L+1)/2:M*(L+1)/2-1)');
0063 Harg = exp(-1i*alpha_tilde.*omega_axis.^2);
0064 [ x ] = FBMC_OQAM_EqualizerMultiTapFS( z, 0, L, 'Specific', Para, Harg );
0065 d_hat=real(x);
0066 MSE_multi_tap_equalizer_FS7 = MSEComputes( d, d_hat, Para );
0067
0068
0069
0070 omega_axis = fftshift((2*pi/(2*M)).*(-M:M-1)');
0071 b = exp(1i*alpha_tilde.*omega_axis.^2);
0072 b1 = 2*1i*alpha_tilde.*omega_axis.*exp(1i*alpha_tilde.*omega_axis.^2);
0073 b2 = 2*1i*alpha_tilde.*exp(1i*alpha_tilde.*omega_axis.^2)+(2*1i*alpha_tilde.*omega_axis).^2.*exp(1i*alpha_tilde.*omega_axis.^2);
0074
0075 R=1;
0076 [ x ] = FBMC_OQAM_EqualizerParallelMultistage( r, 0, R, 'Specific', Para, b, b1, b2 );
0077 d_hat=real(x);
0078 MSE_Parallel_multistage_1 = MSEComputes( d, d_hat, Para );
0079 R=2;
0080 [ x ] = FBMC_OQAM_EqualizerParallelMultistage( r, 0, R, 'Specific', Para, b, b1, b2 );
0081 d_hat=real(x);
0082 MSE_Parallel_multistage_2 = MSEComputes( d, d_hat, Para );
0083
0084
0085
0086 omega_axis = fftshift((2*pi/(2*M*Para.kappa)).*(-M*Para.kappa:M*Para.kappa-1)');
0087 b_over = exp(1i*alpha_tilde.*omega_axis.^2);
0088 [ x ] = FBMC_OQAM_EqualizerFrequencySpreadingReceiver( r, 0, 'Specific', Para, b_over );
0089 d_hat=real(x);
0090 MSE_frequency_spreading = MSEComputes( d, d_hat, Para );
0091
0092
0093
0094 Kov=110;
0095 N=512;
0096 omega_axis = fftshift((2*pi/N).*(-N/2:N/2-1)');
0097 b = exp(1i*alpha_tilde.*omega_axis.^2);
0098
0099 r_equ = EqualizerTimeDomainOverlapandsave( r, 0, N, Kov, 'Specific', Para, b );
0100 z = Demodulator( r_equ, Para );
0101 d_hat=real(z);
0102 MSE_time_domain = MSEComputes( d, d_hat, Para );
0103
0104
0105
0106 green=[0 0.5 0];
0107 magenta=[0.6 0 0.6];
0108 red=[0.8 0 0];
0109 pas=3;
0110
0111 figure1=figure
0112 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_single_tap_equalizer(1:pas:end))),'linewidth',1.5,'MarkerFaceColor','w')
0113 hold on
0114 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_Parallel_multistage_1(1:pas:end))),'--o','Color',red,'linewidth',1.5,'MarkerFaceColor','w')
0115 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_multi_tap_equalizer_FS(1:pas:end))),'-.','Color',green,'linewidth',1.5,'MarkerFaceColor','w')
0116 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_frequency_spreading(1:pas:end))),'-s','Color',magenta,'linewidth',1.5,'MarkerFaceColor','w')
0117 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_time_domain(1:pas:end))),'k','linewidth',1.5,'MarkerFaceColor','w')
0118 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_Parallel_multistage_2(1:pas:end))),'--o','Color',red,'linewidth',1.5,'MarkerFaceColor','w')
0119 plot(-M:pas:M-1,10*log10(fftshift(0.5./MSE_multi_tap_equalizer_FS7(1:pas:end))),'-.','Color',green,'linewidth',1.5,'MarkerFaceColor','w')
0120
0121 xlim([-M max(-M:pas:M-1)])
0122 xlabel('Subcarrier index')
0123 ylabel('SNDR [dB]')
0124 legend('Single-tap','R // multistage','Multi-tap FS','Frequency spreading','Time domain','Location','SouthEast')
0125 title(strcat('L_{fiber}=',int2str(L_fiber/1e3),'km, 2M=', int2str(2*M)))
0126
0127
0128
0129
0130 annotation(figure1,'ellipse',...
0131 [0.21742857142857 0.604999999999999 0.0436428571428572 0.0515873015873011]);
0132
0133
0134 annotation(figure1,'textbox',...
0135 [0.189154761904761 0.587142857142854 0.00346428571428576 0.00198412698412653],...
0136 'String',{'N_{taps}=7'},...
0137 'FitBoxToText','off',...
0138 'EdgeColor',[1 1 1]);
0139
0140
0141 annotation(figure1,'ellipse',...
0142 [0.304571428571428 0.464285714285714 0.0436428571428572 0.0515873015873011]);
0143
0144
0145 annotation(figure1,'textbox',...
0146 [0.313499999999999 0.458333333333331 0.00346428571428576 0.00198412698412653],...
0147 'String',{'N_{taps}=3'},...
0148 'FitBoxToText','off',...
0149 'EdgeColor',[1 1 1]);
0150
0151
0152 annotation(figure1,'textbox',...
0153 [0.753142857142855 0.551428571428568 0.00346428571428576 0.00198412698412653],...
0154 'String',{'R=2'},...
0155 'FitBoxToText','off',...
0156 'EdgeColor',[1 1 1]);
0157
0158
0159 annotation(figure1,'textbox',...
0160 [0.807369047619045 0.755634920634915 0.00346428571428576 0.00198412698412653],...
0161 'String',{'R=3'},...
0162 'FitBoxToText','off',...
0163 'EdgeColor',[1 1 1]);
0164