0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 clear
0017 close all
0018
0019 ParaF_OFDM=InitializeChainParameters( 'F-OFDM' )
0020 ParaF_OFDM.Ns=20;
0021 ParaF_OFDM.Es_N0_dB=20;
0022
0023
0024
0025
0026 Para_OFDM=InitializeChainParameters( 'CP-OFDM' )
0027 Para_OFDM.nSubcarriers = ParaF_OFDM.nSubcarriers;
0028 Para_OFDM.Ns=ParaF_OFDM.Ns;
0029 Para_OFDM.Es_N0_dB=ParaF_OFDM.Es_N0_dB;
0030 Para_OFDM.ActiveSubcarriers=ParaF_OFDM.ActiveSubcarriers;
0031 Para_OFDM.CP=ParaF_OFDM.CP;
0032
0033
0034
0035
0036
0037
0038
0039
0040 d_data = GenerateData (ParaF_OFDM);
0041
0042 sF_OFDM = Modulator(d_data, ParaF_OFDM );
0043
0044
0045
0046 sOFDM = Modulator(d_data, Para_OFDM );
0047
0048
0049
0050 C=GenerateRayleighChannelReal('ITU_VehA', ParaF_OFDM);
0051
0052
0053 rF_OFDM=Channel_Multipath( sF_OFDM, C );
0054 rF_OFDM=Channel_AWGN( rF_OFDM, ParaF_OFDM );
0055
0056
0057 rOFDM=Channel_Multipath( sOFDM, C );
0058 rOFDM=Channel_AWGN( rOFDM, Para_OFDM );
0059
0060
0061
0062
0063 z_dataF_OFDM = Demodulator( rF_OFDM, ParaF_OFDM );
0064
0065
0066 z_dataOFDM = Demodulator( rOFDM, Para_OFDM );
0067
0068
0069 ParaEqualizer.criterion='ZF';
0070
0071 [ d_hatF_OFDM, B ] = Equalizer( z_dataF_OFDM, C, ParaF_OFDM, 'SingleTap', ParaEqualizer );
0072 d_hatF_OFDM = d_hatF_OFDM(ParaF_OFDM.ActiveSubcarriers, :);
0073
0074
0075 ParaEqualizer.criterion='ZF';
0076 [ d_hatOFDM, B ] = Equalizer( z_dataOFDM, C, ParaF_OFDM, 'SingleTap', ParaEqualizer );
0077 d_hatOFDM = d_hatOFDM(ParaF_OFDM.ActiveSubcarriers, :);
0078
0079 d_data = d_data(ParaF_OFDM.ActiveSubcarriers, :);
0080
0081
0082 EVM_dB_F_OFDM = 10*log10(mean(abs(d_hatF_OFDM(:)-d_data(:)).^2))
0083 EVM_dB_OFDM = 10*log10(mean(abs(d_hatOFDM(:)-d_data(:)).^2))
0084 figure,
0085 hold on, plot(d_hatF_OFDM,'b.'); axis([-1 1 -1 1]),grid on,
0086 plot(d_data,'ro'); box
0087 title (['F-OFDM received constellation, EVM = ', num2str(EVM_dB_F_OFDM), 'dB'])
0088
0089 N_fft = 1e4;
0090 psd_F_OFDM = 10*log10(abs(1/sqrt(N_fft).*fft(sF_OFDM,N_fft)).^2);
0091 psd_OFDM = 10*log10(abs(1/sqrt(N_fft).*fft(sOFDM,N_fft)).^2);
0092 frequency = ParaF_OFDM.nSubcarriers/N_fft*(0:N_fft-1).';
0093 figure
0094 plot(frequency+1,(psd_OFDM),'-b'), hold on,
0095 plot(frequency+1,(psd_F_OFDM),'--r'), hold on,
0096 legend('OFDM', 'F-OFDM'), xlabel('sub-carrier index')
0097 title('PSD of transmitted signal'), grid
0098 axis([ min(frequency), max(frequency), min(psd_F_OFDM), max(psd_F_OFDM)])