用MATLAB实现OFDM仿真分析

 

 


 

 


 

para=128;

fftlen=128;

noc=128;

nd=6;

ml=2;

sr=2500;

br=sr.*ml;

gilen=18;

ebn0=3;

%************************** 主循环部分 **************************

nloop=100;

noe = 0;

nod = 0;

eop=0;

nop=0;

for iii=1:nloop

%****************** 发射部分 ******************************************************

%****************** 产生数据 **********************

seldata=rand(1,para*nd*ml)>0.5;

%****************** 串并转换 ***********************

paradata=reshape(seldata,para,nd*ml);

%****************** QPSK调制 ***********************

[ich,qch]=qpskmod(paradata,para,nd,ml);

kmod=1/sqrt(2);

ich1=ich.*kmod;

qch1=qch.*kmod;

%****************** IFFT(离散傅里叶反变换) *********

x=ich1+qch1.*i;

y=ifft(x);

ich2=real(y);

qch2=imag(y);

%****************** 插入保护间隔 *******************

[ich3,qch3]= giins(ich2,qch2,fftlen,gilen,nd);

fftlen2=fftlen+gilen;

%****************** 衰减计算 ************************

spow=sum(ich3.^2+qch3.^2)/nd./para;

attn=0.5*spow*sr/br*10.^(-ebn0/10);

attn=sqrt(attn);

%****************** 高斯白信道 *****************************************************

[ich4,qch4]=comb(ich3,qch3,attn);

%****************** 接收部分 ******************************************************

%****************** 去除保护间隔 ********************

[ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd);

%****************** FFT(离散傅里叶变换) ************

rx=ich5+qch5.*i;

ry=fft(rx);

ich6=real(ry);

qch6=imag(ry);

%***************** QPSK解调 **************************

ich7=ich6./kmod;

qch7=qch6./kmod;

[demodata]=qpskdemod(ich7,qch7,para,nd,ml);

%************** 并串变换 ***************************

demodata1=reshape(demodata,1,para*nd*ml);

%*************** 比特误码率 (BER) *********************

% instantaneous number of error and data

noe2=sum(abs(demodata1-seldata));

nod2=length(seldata);

% cumulative the number of error and data in noe and nod

noe=noe+noe2;

nod=nod+nod2;

% calculating PER

if noe2~=0

eop=eop+1;

else

eop=eop;

end

eop;

nop=nop+1;

fprintf('%d\t%e\t%d\n',iii,noe2/nod2,eop);

end

%****************** 结果输出 ***************************

per=eop/nop;

ber=noe/nod;

fprintf('%f\t%e\t%e\t%d\t\n',ebn0,ber,per,nloop);

fid = fopen('BERofdm.dat','a');

fclose(fid);

%****************** end of file ******************************************************
9


 

posted @ 2022-11-02 16:05  fpga和matlab  阅读(167)  评论(0编辑  收藏  举报