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);