0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 ParaFBMC=InitializeChainParameters( 'FBMC-OQAM' );
0021 ParaFBMC.ActiveSubcarriers=(11:ParaFBMC.nSubcarriers-10);
0022 ParaFBMC.Ns=100;
0023 ParaFBMC.N_T=2;
0024 ParaFBMC.N_R=2;
0025 ParaFBMC.S=min(ParaFBMC.N_T,ParaFBMC.N_R);
0026
0027
0028
0029
0030 ParaOFDM=InitializeChainParameters( 'CP-OFDM' );
0031 ParaOFDM.ActiveSubcarriers=(11:ParaOFDM.nSubcarriers-10);
0032 ParaOFDM.Ns=100;
0033 ParaOFDM.N_T=2;
0034 ParaOFDM.N_R=2;
0035 ParaOFDM.S=min(ParaOFDM.N_T,ParaOFDM.N_R);
0036
0037
0038
0039
0040 d_FBMC = GenerateData (ParaFBMC);
0041 s_FBMC = Modulator(d_FBMC, ParaFBMC );
0042
0043
0044 d_OFDM = GenerateData (ParaOFDM);
0045 s_OFDM = Modulator(d_OFDM, ParaOFDM );
0046
0047
0048
0049 nChannelRealizations=10;
0050 nSNR=5;
0051 Es_N0_dB=linspace(0, 20, nSNR);
0052
0053 temp_SER_FBMC=zeros(nChannelRealizations,nSNR);
0054 temp_SER_OFDM=zeros(nChannelRealizations,nSNR);
0055
0056 for indexSNR=1:nSNR
0057 ParaFBMC.Es_N0_dB=Es_N0_dB(indexSNR);
0058 ParaOFDM.Es_N0_dB=Es_N0_dB(indexSNR);
0059
0060 for indexChannelRealizations=1:nChannelRealizations
0061
0062 C=GenerateRayleighChannelReal('ITU_VehA', ParaFBMC);
0063
0064 r_FBMC = Channel_Multipath( s_FBMC, C );
0065 r_FBMC = Channel_AWGN( r_FBMC, ParaFBMC );
0066
0067 r_OFDM = Channel_Multipath( s_OFDM, C );
0068 r_OFDM = Channel_AWGN( r_OFDM, ParaOFDM );
0069
0070
0071
0072 z_FBMC = Demodulator( r_FBMC, ParaFBMC );
0073 [ x, ~ ] = Equalizer( z_FBMC, C, ParaFBMC, 'SingleTap' );
0074 d_hat = real(x);
0075
0076 mod_norm=sqrt(ParaFBMC.Es/(ParaFBMC.S)/(1./ParaFBMC.M_PAM^2.*sum(abs(qammod([0:ParaFBMC.M_PAM^2-1],ParaFBMC.M_PAM^2)).^2)));
0077 temp_SER_FBMC(indexChannelRealizations,indexSNR)=sum(sum(sum( pamdemod(d_hat/mod_norm,ParaFBMC.M_PAM)~=pamdemod(d_FBMC/mod_norm,ParaFBMC.M_PAM) )))/(2*ParaFBMC.Ns*ParaFBMC.S*length(ParaOFDM.ActiveSubcarriers));
0078
0079
0080 z_OFDM = Demodulator( r_OFDM, ParaOFDM );
0081 [ d_hat, ~ ] = Equalizer( z_OFDM, C, ParaOFDM, 'SingleTap');
0082
0083 mod_norm=sqrt(ParaOFDM.Es/(ParaOFDM.S)/(1./ParaOFDM.M_QAM.*sum(abs(qammod([0:ParaOFDM.M_QAM-1],ParaOFDM.M_QAM)).^2)));
0084 temp_SER_OFDM(indexChannelRealizations,indexSNR)=sum(sum(sum( qamdemod(d_hat/mod_norm,ParaOFDM.M_QAM)~=qamdemod(d_OFDM/mod_norm,ParaOFDM.M_QAM) )))/(ParaOFDM.Ns*ParaOFDM.S*length(ParaOFDM.ActiveSubcarriers));
0085
0086 end
0087 indexSNR
0088 end
0089 BER_FBMC=mean(temp_SER_FBMC,1)/log2(ParaFBMC.M_PAM);
0090 BER_OFDM=mean(temp_SER_OFDM,1)/log2(ParaOFDM.M_QAM);
0091
0092
0093 figure
0094 semilogy(Es_N0_dB,BER_FBMC,'-xb','LineWidth',1.5,'MarkerSize',8,'MarkerEdgeColor','k','MarkerFaceColor','w')
0095 hold on
0096 semilogy(Es_N0_dB,BER_OFDM,'--xr','LineWidth',1.5,'MarkerSize',8,'MarkerEdgeColor','k','MarkerFaceColor','w')
0097
0098 grid
0099 xlabel('E_S/N_0 [dB]')
0100 ylabel('Bit error rate')
0101
0102
0103 legend('FBMC-OQAM','CP-OFDM','Location','SouthWest')
0104
0105
0106