OFDM调制解调系统的设计与仿真实现源程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

clearall;closeall;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_symbol;%总比特数carriers=(1:carrier_count)+(floor(IFFT_bin_length/4)-floor(carrier_count/2));conjugate_carriers=IFFT_bin_length-carriers+2;%发送端%产生随机二进制数据:baseband_out=round(rand(1,baseband_out_length));convert_matrix=reshape(baseband_out,bits_per_symbol,length(baseband_out)/bits_per_symbol);fork=1:(length(baseband_out)/bits_per_symbol)modulo_baseband(k)=0;fori=1:bits_per_symbolmodulo_baseband(k)=modulo_baseband(k)+convert_matrix(i,k)*2^(bits_per_symbol-i);endend%串并转换carrier_matrix=reshape(modulo_baseband,carrier_count,symbols_per_carrier)';%对每一个载波的符号进行差分编码carrier_matrix=[zeros(1,carrier_count);carrier_matrix];fori=2:(symbols_per_carrier+1)carrier_matrix(i,:)=rem(carrier_matrix(i,:)+carrier_matrix(i-1,:),2^bits_per_symbol);end%把差分符号代码转换成相位carrier_matrix=carrier_matrix*((2*pi)/(2^bits_per_symbol));%把相位转换成复数[X,Y]=pol2cart(carrier_matrix,ones(size(carrier_matrix,1),size(carrier_matrix,2)));complex_carrier_matrix=complex(X,Y);%分配载波到指定的IFFT位置IFFT_modulation=zeros(symbols_per_carrier+1,IFFT_bin_length);IFFT_modulation(:,carriers)=complex_carrier_matrix;IFFT_modulation(:,conjugate_carriers)=conj(complex_carrier_matrix);%画出频域中的OFDM信号代表figure(1)stem(0:IFFT_bin_length-1,abs(IFFT_modulation(2,1:IFFT_bin_length)),'b*-')gridonaxis([0IFFT_bin_length-0.51.5])ylabel('Magnitude')xlabel('IFFTBin')title('OFDMCarrierFrequencyMagnitude')%figure(2)plot(0:IFFT_bin_length-1,(180/pi)*angle(IFFT_modulation(2,1:IFFT_bin_length)),'go')holdonstem(carriers-1,(180/pi)*angle(IFFT_modulation(2,carriers)),'b*-')stem(conjugate_carriers-1,(180/pi)*angle(IFFT_modulation(2,conjugate_carriers)),'b*-')axis([0IFFT_bin_length-200+200])gridonylabel('Phase(degrees)')xlabel('IFFTBin')title('OFDMCarrierPhase')%通过IFFT将频域转化为时域,得到时域信号time_wave_matrix=ifft(IFFT_modulation');time_wave_matrix=time_wave_matrix';%画出一个符号周期的时域OFDM信号figure(3)plot(0:IFFT_bin_length-1,time_wave_matrix(2,:))gridonylabel('Amplitude')xlabel('Time')title('OFDMTimeSignal,OneSymbolPeriod')%画出每一个载波对应的时域信号(分离的OFDM信号)forf=1:carrier_counttemp_bins(1:IFFT_bin_length)=0+0j;temp_bins(carriers(f))=IFFT_modulation(2,carriers(f));temp_bins(conjugate_carriers(f))=IFFT_modulation(2,conjugate_carriers(f));temp_time=ifft(temp_bins');figure(4)plot(0:IFFT_bin_length-1,temp_time)holdonendgridonylabel('Amplitude')xlabel('Time')title('SeparatedTimeWaveformsCarriers')fori=1:symbols_per_carrier+1windowed_time_wave_matrix(i,:)=real(time_wave_matrix(i,:)).*hamming(IFFT_bin_length)';windowed_time_wave_matrix(i,:)=real(time_wave_matrix(i,:));end%串并转换ofdm_modulation=reshape(windowed_time_wave_matrix',1,IFFT_bin_length*(symbols_per_carrier+1));%画出整个时域OFDMtemp_time=IFFT_bin_length*(symbols_per_carrier+1);figure(5)plot(0:temp_time-1,ofdm_modulation)gridonylabel('Amplitude(volts)')xlabel('Time(samples)')title('OFDMTimeSignal')%画出频域OFDM信号symbols_per_average=ceil(symbols_per_carrier/5);avg_temp_time=IFFT_bin_length*symbols_per_average;averages=floor(temp_time/avg_temp_time);average_fft(1:avg_temp_time)=0;fora=0:(averages-1)subset_ofdm=ofdm_modulation(((a*avg_temp_time)+1):((a+1)*avg_temp_time));subset_ofdm_f=abs(fft(subset_ofdm));average_fft=average_fft+(subset_ofdm_f/averages);endaverage_fft_log=20*log10(average_fft);figure(6)plot((0:(avg_temp_time-1))/avg_temp_time,average_fft_log)holdonplot(0:1/IFFT_bin_length:1,-35,'rd')gridonaxis([00.5-40max(average_fft_log)])ylabel('Magnitude(dB)')xlabel('NormalizedFrequency(0.5=fs/2)')title('OFDMSignalSpectrum')%上变频,这个模型中我们把经过IFFT运算后OFDM直接发送Tx_data=ofdm_modulation;%信道=======================================================%ThechannelmodelisGaussian(AWGN)+Multipath(时延为1)Tx_signal_power=var(Tx_data);linear_SNR=10^(SNR/10);noise_sigma=Tx_signal_power/linear_SNR;noise_scale_factor=sqrt(noise_sigma);noise=randn(1,length(Tx_data))*noise_scale_factor;copy1=zeros(1,length(ofdm_modulation));fori=2:length(ofdm_modulation)copy1(i)=ofdm_modulation(i-1);endRx_Data=Tx_data+noise;%RECEIVE%根据符号长度和符号数将串行的符号转换为并行的%-每一列是符号周期Rx_Data_matrix=reshape(Rx_Data,IFFT_bin_length,symbols_per_carrier+1);%对每一列信号做FFT得到频域信号Rx_spectrum=fft(Rx_Data_matrix);%画出接收到的OFDM信号频域代表%--------1---------2---------3---------4---------5---------6---------7---------8figure(7)stem(0:IFFT_bin_length-1,abs(Rx_spectrum(1:IFFT_bin_length,2)),'b*-')gridonaxis([0IFFT_bin_length-0.51.5])ylabel('Magnitude')xlabel('FFTBin')title('OFDMReceiveSpectrum,Magnitude')figure(8)plot(0:IFFT_bin_length-1,(180/pi)*angle(Rx_spectrum(1:IFFT_bin_length,2)),'go')holdonstem(carriers-1,(180/pi)*angle(Rx_spectrum(carriers,2)),'b*-')stem(conjugate_carriers-1,(180/pi)*angle(Rx_spectrum(conjugate_carriers,2)),'b*-')axis([0IFFT_bin_length-200+200])gridonylabel('Phase(degrees)')xlabel('FFTBin')title('OFDMReceiveSpectrum,Phase')%抽取接收信号中有载波的点Rx_c

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功