你好 希望可以帮到你
%本程序用于OFDM基本原理仿真
%数据调制采用QPSK
clear all; clc;
%*****************参数设置部分**********************
SNR=10; %信噪比取值,dB为单位
fl=128; %设置FFT长度
Ns=6; %设置一个帧结构中OFDM信号的个数
para=128; %设置并行传输的子载波个数
gl=32; %设置保护时隙的长度
%***************发送端部分*************************
Signal=rand(1,para*Ns*2)>0.5; %产生0,1随机数列,符号个数为para*2*Ns
%for i=1:para
%for j=1:Ns*2
% SigPara(i,j)=Signal(i*j); 错误的,作者是傻X
%串并转换,将随机产生的二进制矩阵变换为行数为para,列数为2*Ns的矩阵
%end
%end
SigPara=reshape(Signal,para,2*Ns);
%***********进行QPSK数据调制,将数据分为两个通道**************
for j=1:Ns
ich(:,j)=SigPara(:,2*j-1);
qch(:,j)=SigPara(:,2*j);
end
kmod=1./sqrt(2);
ich1=ich.*kmod;
qch1=qch.*kmod;
x=ich1+qch1.*sqrt(-1); %产生复信号
y=ifft(x); %通过傅里叶反变换,将频域数据转换为时域数据
ich2=real(y); %I信道取变换后的实部
qch2=imag(y); %I信道取变换后的虚部
%*******************插入保护间隔*******************
ich3=[ich2(fl-gl+1:fl,:);ich2];
qch3=[qch2(fl-gl+1:fl,:);qch2];
%******************并串转换*********************
ich4=reshape(ich3,1,(fl+gl)*Ns);
qch4=reshape(qch3,1,(fl+gl)*Ns);
%*****************形成复数发射数据***************
TrData=ich4+qch4.*sqrt(-1);
ReData=awgn(TrData,SNR,'measured');
%接收端 移去保护时隙
idata=real(ReData);
qdata=imag(ReData);
idata1=reshape(idata,fl+gl,Ns);
qdata1=reshape(qdata,fl+gl,Ns);
idata2=idata1(gl+1:gl+fl,:);
qdata2=qdata1(gl+1:gl+fl,:);
%********FFT*****************
Rex=idata2+qdata2*sqrt(-1);
ry=fft(Rex);
ReIchan=real(ry);
ReQchan=imag(ry);
ReIchan=ReIchan/kmod;
ReQchan=ReQchan/kmod;
%*******QPSK逆映射*********
for j=1:Ns
RePara(:,2*j-1)=ReIchan(:,j);
RePara(:,2*j)=ReQchan(:,j);
end
ReSig=reshape(RePara,1,para*Ns*2);
%符号抽样判决
ReSig=ReSig>0.5;
figure
subplot(2,1,1)
stem(ReSig(1:1000))
legend('输出数据')
grid
subplot(2,1,2)
stem(Signal(1:1000))
legend('输入数据')
grid
%end of script file
温馨提示:内容为网友见解,仅供参考