0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 Para=InitializeChainParameters( 'CP-OFDM' );
0015 Para.ActiveSubcarriers= 2:Para.nSubcarriers;
0016 Para.M_PAM=2;
0017 Para.Ns=1000;
0018 Para.N_T=2;
0019 Para.N_R=2;
0020 Para.S=min(Para.N_R,Para.N_T);
0021 Para.Es_N0_dB=15;
0022 Para
0023
0024
0025 Para.PreamblePilotSubcarriers=Para.ActiveSubcarriers;
0026 Para.PreambleLength=Para.N_T;
0027 A=sqrt(length(Para.ActiveSubcarriers)/(length(Para.PreamblePilotSubcarriers) ));
0028 d_TR=A.*((randi([0 1],Para.nSubcarriers,1))*2-1);
0029
0030
0031
0032
0033
0034 d_preamble=GeneratePreamble(d_TR, Para);
0035
0036 d_data = GenerateData (Para);
0037
0038 d=MergePreambleData(d_preamble,d_data,Para);
0039 s = Modulator(d, Para );
0040
0041
0042 C=GenerateRayleighChannelReal('ITU_VehA', Para);
0043 r = Channel_Multipath( s, C );
0044 r=Channel_AWGN( r, Para );
0045
0046
0047 z = Demodulator( r, Para );
0048 [ z_preamble,z_data ] = SeparatePreambleData(z,Para);
0049
0050
0051
0052 L=length(C(1,1,:));
0053 C_est=ChannelEstimator(z_preamble,L,d_TR, Para);
0054
0055
0056 ParaEqualizer.criterion='MMSE';
0057 [ d_hat, B ] = Equalizer( z_data, C_est, Para, 'SingleTap', ParaEqualizer );
0058
0059
0060
0061
0062 figure
0063 plot(squeeze(real(fft(squeeze(C(1,1,:)),Para.nSubcarriers))),'-b')
0064 hold on
0065 Htemp=fft(squeeze(C_est(1,1,:)),Para.nSubcarriers);
0066 plot(real(Htemp),'xb')
0067 xlim([min(Para.ActiveSubcarriers) max(Para.ActiveSubcarriers)])
0068 xlabel('Subcarrier index')
0069 ylabel('Channel frequency response')
0070 legend('True', 'Estimated')
0071
0072
0073
0074 MSE = MSEComputes( d_data, d_hat, Para );
0075
0076 figure
0077 plot(Para.ActiveSubcarriers, 10*log10(MSE),'-xb','markersize',8,'linewidth',1.5)
0078 xlabel('Subcarrier index')
0079 ylabel('MSE [dB]')
0080 xlim([min(Para.ActiveSubcarriers) max(Para.ActiveSubcarriers)])