www.gusucode.com > OFDM仿真源码程序 > OFDM仿真源码程序/FrameOFDM/OFDMTimeFreq.m
clc; clear all; %信源长度 OFDM_symbolnum=64*4;%符号个数 OFDM_subcarnum=64;%子载波数量 IFFT_SampleMultiple=64;%绘图时的抽样倍数,便于精确观察 FFTlengthMultiple=8; sr_length=OFDM_subcarnum*6*OFDM_symbolnum;%信源长度 %卷积编码参数(n,k,N)=(2 1 7) conv_n=2; %一个码组的长度 conv_k=1; %一个码组中信息位长度 conv_N=7; %约束长度 conv_genpolya=[1 0 1 1 0 1 1]; %卷积码a支路生成多项式 conv_genpolyb=[1 1 1 1 0 0 1]; %卷积码b支路生成多项式 %删余参数 puncture_select=12; %调试过程中不删余处理,始终为12 %交织参数 %由于不删余,故编码输出数据长度恒为sr_length*2; interlace_row=10; %交织行数 interlace_col=conv_n*sr_length/interlace_row;%交织列数 %调制方式选择 modulation_sel=3; %0->bpsk,1->qpsk,2->16QAM,3->OFDM_subcarnumQAM %DA转换参数 F_carrier=100; %载波频率 T_symbol=1/F_carrier; %符号周期 F_system=F_carrier*40; %系统取样频率 %噪声参数 %假设信道模型为加性高斯白噪声信道 white_noise_mean=0; %白噪声均值 white_noise_var=0.0; %白噪声方差 sr_out=sourcegen(sr_length); %信源产生 [moddata_outI,moddata_outQ]=modulation(sr_out,modulation_sel); %调试,略过交织 OFDMmoddata_in=zeros(OFDM_symbolnum,OFDM_subcarnum); for k=1:OFDM_symbolnum OFDMmoddata_in(k,:)=moddata_outI((k-1)*OFDM_subcarnum+1:k*OFDM_subcarnum)+j*moddata_outQ((k-1)*OFDM_subcarnum+1:k*OFDM_subcarnum); end %时频图 % temp=zeros(OFDM_subcarnum,IFFT_SampleMultiple*OFDM_subcarnum);%存储各个子载波在一个周期的信号,每行一个子载波 % for k=1:OFDM_subcarnum % temp(k,:)=OFDMmoddata_in(1,k)*exp(j*2*pi*(0:OFDM_subcarnum*IFFT_SampleMultiple-1)*k/(IFFT_SampleMultiple*OFDM_subcarnum)); % end % for k=1:OFDM_subcarnum % temp(k,:)=real(temp(k,:)); % end % [X,Y] = meshgrid((IFFT_SampleMultiple*OFDM_subcarnum-1):-1:0,0:(OFDM_subcarnum-1)); % meshz(X,Y,temp); % XLABEL('时域');YLABEL('频域');ZLABEL('实部幅值'); %OFDM一个符号的时域图 % temp=zeros(OFDM_subcarnum,IFFT_SampleMultiple*OFDM_subcarnum);%存储各个子载波在一个周期的信号,每行一个子载波 % for k=1:OFDM_subcarnum % temp(k,:)=OFDMmoddata_in(1,k)*exp(j*2*pi*(0:OFDM_subcarnum*IFFT_SampleMultiple-1)*(k-1)/(IFFT_SampleMultiple*OFDM_subcarnum)); % end % tempreal=zeros(OFDM_subcarnum,IFFT_SampleMultiple*OFDM_subcarnum); % for k=1:OFDM_subcarnum % tempreal(k,:)=real(temp(k,:)); % end % OFDMmoddata_outreal=zeros(1,OFDM_subcarnum*IFFT_SampleMultiple); % for k=1:OFDM_subcarnum*IFFT_SampleMultiple % OFDMmoddata_outreal(1,k)=sum(tempreal(:,k)); %IFFT输出为OFDM时域信号 % end % figure(1); % plot(OFDMmoddata_outreal);XLABEL('一个OFDM符号的时域实部');YLABEL('时域幅值'); % %OFDM时域复信号 % OFDMmoddata_outcomplex=zeros(1,OFDM_subcarnum*IFFT_SampleMultiple); % for k=1:OFDM_subcarnum*IFFT_SampleMultiple % OFDMmoddata_outcomplex(1,k)=sum(temp(:,k)); %IFFT输出为OFDM时域信号 % end % F_OFDM=fft(OFDMmoddata_outcomplex)/(OFDM_subcarnum*IFFT_SampleMultiple); % F_OFDMpower=F_OFDM.*conj(F_OFDM); % figure(2); % fOFDM=0:2*OFDM_subcarnum-1; % plot(fOFDM,F_OFDMpower(1:2*OFDM_subcarnum)); % AXIS([-1 2*OFDM_subcarnum -3 3]); % XLABEL('一个OFDM符号的频域');YLABEL('频域功率幅值'); % %OFDM符号平均频谱功率分布 % OFDMmoddata_out=zeros(OFDM_symbolnum,OFDM_subcarnum*FFTlengthMultiple); % for k=1:OFDM_symbolnum % OFDMmoddata_out(k,:)=ifft(OFDMmoddata_in(k,:),OFDM_subcarnum*FFTlengthMultiple); %OFDM时域成型,存储为矩阵,每行一个OFDM符号 % end % % F_OFDMmoddata=zeros(OFDM_symbolnum,OFDM_subcarnum*FFTlengthMultiple); % for k=1:OFDM_symbolnum % F_OFDMmoddata(k,:)=(fft(OFDMmoddata_out(k,:),OFDM_subcarnum*FFTlengthMultiple)); %OFDM时域符号的频谱,存储为矩阵形式,每行为一个OFDM符号的频谱 % end % % Fpower_OFDMmoddata=F_OFDMmoddataaverage.*conj(F_OFDMmoddataaverage)/(OFDM_subcarnum); % Fpower_OFDMmoddataaverage=sum(F_OFDMmoddata)/OFDM_symbolnum; oriF_OFDMmoddatainpower=zeros(OFDM_symbolnum,OFDM_subcarnum); for k=1:OFDM_symbolnum oriF_OFDMmoddatainpower(k,:)=OFDMmoddata_in(k,:).*conj(OFDMmoddata_in(k,:))/OFDM_subcarnum; end oriF_OFDMmoddatainpoweraverage=sum(oriF_OFDMmoddatainpower)/OFDM_symbolnum; figure(5); plot(oriF_OFDMmoddatainpoweraverage);