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