还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
clear all;close all;IFFT_bin_length=1024;%FFT的点数carrier_count=200;%载波的数量bits_per_symbol=2;%每个符号代表的比特数symbols_per_carrier=50;%每个载波使用的符号数SNR=10;%信道中的信噪比dB baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symb ol;%总比特数carriers=l:carrier_count+floorIFFT_bin_length/4-floorcarrier_co unt/2;conjugate_carriers=IFFT_bin_length-carriers+2;%发送^»»»»»»»»»»»»»»»»»»»»»»»»»%产生随机二进制数据baseband_out=roundrand1,baseband_out_length;convert_matrix=reshapebaseband_out,bits_per_symbol,lengthbaseband_out/bits_per_symbol;for k=l:lengthbaseband_out/bits_per_symbol modulo_basebandk=0;for i=1:bits_per_symbol modulo_basebandk=modulo_basebandk+co minus_delta=center_phase-delta_phase;decoded=findRx_decoded_phase=plus_deltaRx_decoded_phase minus_delta;Rx_decoded_symbolsdecoded=i;end%Convert thematrix intoa serialsymbol streamRx_serial_symbols=reshapeRx_decoded_symbols,l,sizeRx_decoded_s ymbols,1*sizeRx_decoded_symbols,2;%Convert thesymbols tobinary for i=bits_per_symbol:-1:1if i~=1Rx_binary_matrixi,:=remRx_serial_symbols,2;Rx_serial_symbols=floorRx_serial_symbols/2;else Rx_binary_matrixi,:=Rx_serial_symbols;end endbaseband_in=reshapeRx_binary_matrix,1,sizeRx_binary_matrix,1*size Rx_binary_matrix,2;%查找错位比特bit_errors=findbaseband_in〜=baseband_out;bit_error_count=sizebit_errors,2;d_out,bits_per_symbol,lengthbaseband_out/bits_per_symbol;for k=l:lengthbaseband_out/bits_per_symbol modulo_basebandk=0;for i=l:bits_per_symbol modulo_basebandk=modulo_basebandk+convert_matrixi,k*2A bits_per_symbol-i;end end%串并转换carrier_matrix=reshapemodulo_baseband,carrier_count,symbols_per_carrier;%对每一个载波的符号进行差分编码carrier_matrix=[zeros1,carrier_count;carrier_matrix];for i=2:symbol s_per_carrier+1carrier_matrixi,:=remcarrier_matrixi,:+carrier_matrixi-l,:,2Abits_p er_symbol;end%把差分符号代码转换成相位carrier_matrix=can*ier_matrix*2*pi/2A bits_per_symbol;%把相位转换成复数[X,Y]=pol2cartcarrier_matrix,onessizecarrier_matrix,1,sizecarrier_matrix,2;complex_carrier_matrix=complexX,Y;%分配载波到指定的IFFT位置IFFT_modulation=zerossymbols_per_carrier+1,IFFT_bin_length;IFFT_modulation:,carriers=complex_carrier_matrix;IFFT_modulation:,conjugate_carriers=conjcomplex_carrier_matrix;%画出频域中的OFDM信号代表figure1stem:IFFT_bin_length-1,absIFFT_modulation2,1:IFFT_bin_length,b*・grid on axis|0IFFT_binJength-
0.
51.5]ylabelMagnitude xlabel*IFFT Bin1titleOFDM CarrierFrequency Magnitude*figure2plot0:IFFT_bin_length-1,180/pi*angleIFFT_modulation2,l:IFFT_bi njength,go holdon stemcarriers-1,180/pi*angleIFFT_modulation2,carriers,^*-*stemconjugate_carriers-1,180/pi4angleIFFT_modulation2,conjugate—Carriers,axis[0IFFT_bin_length-200+200]grid onylabelPhase degreesxlabel*IFFT Bin1titleOFDM CarrierPhase1%通过IFFT将频域转化为时域,得到时域信号time_wave_matrix=ifftIFFT_modulation;time_wave_matrix=time_wave_matrix*;%画出一个符号周期的时域OFDM信号figure3plot:IFFT_bin_length-1,time_wave_matrix2,:grid on ylabelAmplitude xlabelTimetitleCOFDM TimeSignal,One SymbolPeriod%画出每一个载波对应的时域信号分离的OFDM信号for f=1:carrier_count temp_binsl:IFFT_bin_length=O+Oj;temp_binscarriersf=IFFT_moduIation2,carriersf;temp_binsconjugate_carriersf=IFFT_modulation2,conjugate_carrie rsf;temp_time=iffttemp_bins*;figure4plot0:IFFT_bin_length-1,temp_time holdon endgrid onylabelAmplitude xlabelTimetitleCSeparated TimeWaveforms Carriers1for i=1:symbols_per_carrier+1windowed_time_wave_matrixi,:=realtime_wave_matrixi,:c hammingIFFT_bin_length windowed_time_wave_matrixi,:=realtime_wave_matrixi,:;end%串并转换ofdm_modulation=reshapewindowed_time_wave_matrix,l,IFFT_bin_length*symbols_per_carrier+1;%画出整个时域OFDM temp_time=IFFT_bin_length*symbols_per_carrier+1;figure5plot:temp_time-1,ofdm_modulation grid on ylabelCAmplitudevolts xlabel*Time samplestitle,OFDM TimeSignal*%画出频域OFDM信号symbols_per_average=ceilsymbols_per_carrier/5;avg_temp_time=IFFT_bin_length*symbols_per_average;averages=floortemp_time/avg_temp_time;average_fft1:avg_temp_time=0;for a=0:averages-l subset_ofdm=ofdm_modulationa*avg_temp_time+l:a+l*avg_te mp_time;subset_ofdm_f=absfftsubset_ofdm;average_fft=average_fft+subset_ofdm_f7averages;end average_fft_log=20*log10average_fft;figure6plot0:avg_temp_time-1/avg_temp_time,average_fft_log holdon plot0:1/IFFT_bin_length:1,-35,rd grid on axis[.5-40maxaverage_fft_log]ylabel*Magnitude dBxlabelNormalized Frequency
0.5=fs/2*titleOFDM SignalSpectrum%上变频,这个模型中我们把经过IFFT运算后OFDM直接发送Tx_data=ofdm_modulation;%The channelmodel isGaussian AWGN+Multipath时延为1Tx_signal_power=varTx_data;linear.SNR=10ASNR/10;noise_sigma=T x_signal_power/l inear_SNR;noise_scale_factor=sqrtnoise_sigma;noise=randnl,lengthTx_data*noise_scale_factor;copy1=zeros1,lengthofdm_modulation;for i=2:lengthofdm_modulation copy1i=ofdm_modulationi-1;end Rx_Data=Tx_data+noise;%RECEIVE«««««%根据符号长度和符号数将串行的符号转换为并行的%-每一列是符号周期Rx_Data_matrix=reshapeRx_Data,IFFT_bin_length,symbols_per_c airier+1;%对每一列信号做FFT得到频域信号Rx_spectrum=fftR x_Data_matri x;%画出接收到的OFDM信号频域代表%--------1---------2---------3---------4---------5---------6---------7---------8figure7stemO:IFFT_bin_length-1,absRx_spectrum1:IFFT_bin_length,2,b*_,grid onaxis[0IFFT_bin_length-
0.
51.5]ylabelMagnitude xlabelCFFT Bin1titleOFDM ReceiveSpectrum,Magnitude figure8plot0:IFFT_bin_length-1,180/pi*angleRx_spectrum1:IFFT_bin_le ngth,2,go holdon stemcarriers-1,180/pi*angleRx_spectrumcarriers,2,b*-stemconjugate_carriers-1,180/pi*angleRx_spectrumconjugate_carr iers,2,b*・‘axis|0IFFT_binJength-200+200]grid onylabel*Phase degrees1xlabelCFFTBin1titleOFDM ReceiveSpectrum,Phase%抽取接收信号中有载波的点Rx_caiTiers=Rx_spectrumcarriers,:;%画出每个接收符号分布图figure9Rx_phase_P=angleRx_carriers;Rx_mag_P=absRx_carriers;polarRx_phase_P,Rx_mag_P,bd;%计算载波的相位%■弧度转换为角度%-归一化相位
0.360Rx_phase=angleRx_carriers*180/pi;phase_negative=findRx_phase0;Rx_phasephase_negative=remRx_phasephase_negative+360,360;%用diff计算相位差Rx_decoded_phase=diffRx_phase;phase_negative=findRx_decoded_phase0;Rx_decoded_phasephase_negative=remRx_decoded_phasephase_negative+360,360;%--------1---------2--------3---------4---------5--------6---------7---------8%相位转化为符号base_phase=360/2A bits_per_symbol;delta_phase=base_phase/2;Rx_decoded_symbols=zerossizeRx_decoded_phase,1,sizeRx_deco ded_phase,2;for i=l:2A bits_per_symbol-1center_phase=base_phase*i;plus_delta=center_phase+delta_phase;minus_delta=center_phase-delta_phase;decoded=findRx_decoded_phase=plus_deltaRx_decoded_phase minus_delta;Rx_decoded_symbolsdecoded=i;end%Convert thematrix intoa serialsymbol streamRx_serial_symbols=reshapeRx_decoded_symbols,,l,sizeRx_decoded.symbols,1*sizeRx_decoded_symbols,2;%Convert thesymbols tobinary for i=bits_per_symbol:-1:1if i〜=1Rx_binary_matrixi,:=remRx_serial_symbols,2;Rx_serial_symbols=floorRx_serial_symbols/2;else Rx_binary_matrixi,:=Rx_serial_symbols;end endbaseband_in=reshapeRx_binary_matrix,1,sizeRx_binary_matrix,1*si zeRx_binary_matrix,2;nvert_matrixi,k*2Abits_per_symbol-i;end end%串并转换carrier_matrix=reshapemodulo_baseband,carrier_count,symbols_per_carrier1;%对每一个载波的符号进行差分编码carrier_matrix=[zeros1,carrier_count;carrier_matrix];for i=2:symbols_per_carrier+1carrier_matrixi,:=remcarrier_matrixi,:+carrier_matrixi-l,:,2A bits_p er_symbol;end%把差分符号代码转换成相位carrier_matrix=carrier_matrix*2*pi/2Abits_per_symbol;%把相位转换成复数[X,Y]=pol2cartcarrier_matrix,onessizecarrier_matrix,1,sizecarrier_matrix,2;complex_carrier_matrix=complexX,Y;%分配载波到指定的IFFT位置IFFT_modulation=zerossymbols_per_carrier+1,IFFT_bin_length;IFFT_modulation:,caniers=complex_carrier_matrix;IFFT_modulation:,conjugate_carriers=conjcomplex_carrier_matrix;%画出频域中的OFDM信号代表%查找错位比特bit_errors=findbaseband_in~=baseband_out;bit_error_count=sizebit_errors,2;figure1stemO:IFFT_bin_length-1,absIFFT_modulation2,1:IFFT_bin_length,b*-grid onaxis[0IFFT_bin_Iength-
0.
51.5]ylabel*Magnitude xlabelCIFFTBin1titleOFDM CarrierFrequency Magnitude%figure2plot0:IFFT_bin_length-1,180/pi*angleIFFT_modulation2,1:IFFT_bi njength,go holdon stemcarriers-l,180/pi*angleIFFT_modulation2,carriers,b*-stemconjugate_carriers-1,180/pi*angleIFFT_modulation2,conjugate.carriers,b*・axis[0IFFT_bin_length-200+20]grid onylabelPhase degrees1xlabelIFFT Bin1titleCOFDM CarrierPhase%通过IFFT将频域转化为时域,得到时域信号time_wave_matrix=ifftIFFT_modulation;time_wave_matrix=time_wave_matrix;%画出一个符号周期的时域OFDM信号figure3plot0:IFFT_bin_Iength-1,time_wave_matrix2,:grid onylabelAmplitude xlabelTimetitleOFDM TimeSignal,One SymbolPeriod%画出每一个载波对应的时域信号分离的OFDM信号for f=1:can ier_count temp_bins1:IFFT_bin_length=O+Oj;temp_binscarriersf=IFFT_modulation2,carriersf;temp_binsconjugate_carriersf=IFFT_modulation2,conjugate_carrie rsO;temp_time=iffttemp_bins;figure4plot0:IFFT_bin_length-1,temp_time holdon endgrid onylabelCAmplitude xlabelTimetitleCSeparated TimeWaveforms Carriersfor i=1:symbols_per_carrier+1windowed_time_wave_matrixi,:=realtime_wave_matrixi,:.*hammin gCIFFT.binJength1;windowed_time_wave_matrixi,:=realtime_wave_matrixi,:;end%串并转换ofdm_modulation=reshapewindowed_time_wave_matrix,l,IFFT_bin_le ngth*symbols_per_carr ier+1;%画出整个时域OFDM temp_time=IFFT_bin_length*symbols_per_carrier+1;figure5plot0:temp_time-1,ofdm_modulation gridonylabelAmplitudevolts1xlabelTime samples1titleOFDM TimeSignal1%画出频域OFDM信号symbols_per_average=ceilsymbols_per_carrier/5;avg_temp_time=IFFT_bin_length*symbols_per_average;averages=floortemp_time/avg_temp_time;average_fft1:avg_temp_time=0;for a=O:averages-1subset_ofdm=ofdm_modulationa*avg_temp_time+l:a+1*avg_tem p_time;subset_ofdm_f=absfftsubset_ofdm;average_fft=average_fft+subset_ofdm_f/averages;end average_fft_log=20*log10average_fft;figure6plot0:avg_temp_time-1/avg_temp_time,average_fft_log holdon plot0:l/IFFT_bin_length:l,-35,W gridonaxis[
00.5-40maxaverage_fft_log]ylabelMagnitude dBxlabelNormalized Frequency
0.5=fs/2titleOFDM SignalSpectrum1%上变频,这个模型中我们把经过IFFT运算后OFDM直接发送Tx_data=ofdm_modulation;%信道%The channelmodel isGaussian AWGN+Multipath时延为1Tx_signal_power=varTx_data;linear_SNR=10ASNR/10;noise_sigma=Tx_signal_power/linear_SNR;noise_scale_factor=sqrtnoise_sigma;noise=randn1,lengthTx_data*noise_scale_factor;copy1=zeros1,lengthofdm_modulation;fori=2:lengthofdm_modulation copy1i=ofdm_modulationi-1;end Rx_Data=Tx_data+noise;%RECEIVE««««%根据符号长度和符号数将串行的符号转换为并行的%-每一列是符号周期Rx_Data_matrix=reshapeRx_Data,IFFT_bin_length,symbols_per_car rier+1;%对每一列信号做FFT得到频域信号Rx_spectrum=fft Rx_Data_matrix;%画出接收到的OFDM信号频域代表%-------1--------2---------3---------4--------5---------6---------7--------8figure7stemO:IFFT_bin_length-1,absRx_spectrum1:IFFT_bin_length,2/5*-gridonaxis|0IFFT_bin_length-
0.
51.5]ylabelMagnitude xlabelFFT Bin1title*OFDM ReceiveSpectrum,Magnitude figure8plot:IFFT_bin_length-1,180/pi*angleRx_spectrum1:IFFT_bin_leng th,2,go holdon stemcarriers-1,180/pi*angleRx_spectrumcarriers,2/6*-stemconjugate_carriers-l,180/pi*angleRx_spectrumconjugate_carrie rs,2,b*-axis[0IFFT_bin_length-200+200]gridonylabelPhase degreesxlabelFFTBin1title*OFDM ReceiveSpectrum,Phase%抽取接收信号中有载波的占
7、、、Rx_carriers=Rx_spectrumcarriers,:;%画出每个接收符号分布图figure9Rx_phase_P=angleRx_carriers;Rx_mag_P=absRx_carriers;polarRx_phase_P,Rx_mag_P,bd,;%计算载波的相位%-孤度转换为角度%-归一化相位0-360Rx_phase=angleRx_carriers*180/pi;phase_negative=findRx_phase0;Rx_phasephase_negative=remRx_phasephase_negative+360,360;%用diff计算相位差Rx_decoded_phase=diffRx_phase;phase_negative=findRx_decoded_phase0;Rx_decoded_phasephase_negative=remRx_decoded_phasephase_ne gative+360,360;%-------1--------2---------3---------4--------5---------6---------7--------8%相位转化为符号base_phase=360/2A bits_per_symbol;delta_phase=base_phase/2;Rx_decoded_symbols=zerossizeRx_decoded_phase,1,sizeRx_decode d_phase,2;fori=1:2A bits_per_symbol-1center_phase=base_phase*i;plus_delta=center_phase+delta_phase;。