0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 Para=InitializeChainParameters( 'FBMC-OQAM' )
0016 Para.ActiveSubcarriers= 2:Para.nSubcarriers;
0017 Para.Ns=200;
0018 Para.Es_N0_dB=20;
0019 Para.M_PAM=4;
0020
0021 Para.T = 1/30e9*Para.nSubcarriers;
0022 clight = 299792458 ;
0023 lambda = 1550e-9 ;
0024 Para.CenterFrequency = clight/lambda ;
0025
0026
0027 Para.PreamblePilotSubcarriers=Para.ActiveSubcarriers(1:2:end);
0028 Para.PreambleLength=2;
0029 A=sqrt(length(Para.ActiveSubcarriers)/(length(Para.PreamblePilotSubcarriers) ));
0030 d_TR=A.*((randi([0 1],Para.nSubcarriers,1))*2-1);
0031
0032
0033
0034
0035
0036 d_preamble=GeneratePreamble(d_TR, Para,'synchro');
0037
0038 d_data=GenerateData (Para);
0039
0040 d=MergePreambleData(d_preamble,d_data,Para);
0041 s = Modulator(d, Para );
0042
0043
0044 L_fiber = 100e3;
0045 D = 17e-6;
0046 r = Channel_ChromaticDispersion( s, L_fiber, D, Para );
0047 PN_linewidth = 200*1e3;
0048 r = Channel_PhaseNoise(s,PN_linewidth,Para);
0049 [ r, Delta_omega, Delta_tau ]=Channel_Desynchronization( r, Para);
0050 r=Channel_AWGN( r, Para );
0051
0052
0053
0054 [ r_corrected, Delta_tau_hat, Delta_omega_hat ] = Synchronization( r, Para, d_TR );
0055
0056
0057 z = Demodulator( r_corrected, Para );
0058 [ z_preamble,z_data ] = SeparatePreambleData(z,Para);
0059
0060
0061 L=Para.nSubcarriers/8;
0062 causality=0;
0063 C_est=ChannelEstimator(z_preamble,L,d_TR,Para,'Preamble', causality);
0064
0065
0066 ParaEqualizer.criterion='MMSE';
0067 [ x, B ] = Equalizer( z_data, C_est, Para, 'SingleTap', ParaEqualizer );
0068
0069
0070 [x, phi]=PhaseTracker( x, Para, 'ML' );
0071
0072 d_hat=real(x);
0073
0074
0075
0076
0077 MSE = MSEComputes( d_data, d_hat, Para );
0078 NMSE_dB=10*log10(2*Para.Es*mean(MSE));
0079
0080 figure,
0081 plot(x(Para.ActiveSubcarriers,:),'b.');
0082 title (['Received constellation before real conversion, EVM = ', num2str(NMSE_dB), 'dB'])
0083
0084 figure
0085 plot(real(x(Para.ActiveSubcarriers,1:2:end)),real(x(Para.ActiveSubcarriers,2:2:end)),'b.');
0086