%实现OFDM传输的仿真程序
para=128; %并行子信道的个数
fftlen:128; %FFT的长度
paradata=reshape(seldata,para,nd
*m1);
%QPSK调制
[ich,qch]=qpskmod(paradata,para,nd,m1);
kmod=1/sqrt(2);
ichl=ich.*kmod;
qchl=qch.*kmod;
%In叩(离散傅里叶反变换)
X=ichl+qchl.*i:
y=ifft(x);
ich2=real(y);
qch2=imag(y);
%插入保护间隔
[ich3,qch3]=giins(ich2,qch2,fftlen,gilen,nd);
fftlen2=fftlen+gilen;
%衰减计算
spow=suln(ich3.2+qch3.“2)/nd./para;
attn=0.郑敬5*spow*sr/br*10.“(.ebn0/10);扒档
attn=sqrt(attn);
%高斯自信道
[ich4,qeh4]=eomb(ich3,qch3,attn);
%接收部分
%去除保护间隔
[ieh5,,qeh5]=girem(ich4,qch4,fftlen2,gilen,
nd);
%FFr(离散傅里叶变换)
IX=ich5+qch5.*i:
ry=fit(Ⅸ);
ich6=real(ry);
qch6=imag(ry);
%春丛乱QPSK解调
ieh7=ich6./kmod;
qch7=qch6./kmod;
[derrtxtata]=qpskdemod(ich7,qch7,para,nd,m1);
%并串变换
demodatal=reshape(demodata,I,para*nd*rnl);
%比特误码率(BER)
bit—errors=find(seldata~=demodatal);
bit—error—count 2 size(bit—e/TOES,2);
total—bits=size(demodatal,2);
bit—error—rate=bit—error—count/total—bits;
fprintf(7%f\n’,bit—eITor—rate)
%end offile
程序运行结果,输出误码率为:
>>0.037109
你好 希望可以帮到你%本程序用于OFDM基本原理仿真
%数据调制采用QPSK
clear allclc
%*****************参数设置部分**********************
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)