📄 ofdmce.asv
字号:
clear all;
para=768;
fftlen=1024;
noc=1024;
nd=36;
% para=52;
% fftlen=64;
% noc=53;
% nd=6;
knd=1;
ml=2;
sr=250000;
br=sr.*ml;
% gilen=32;
gilen=16;
tstp=1/sr/(fftlen+gilen);
itau=[0];
dlvl1=[0];
no=[6];
th1=[0.0];
itnd1=[1000];
now1=1;
fd=150;
flat=0;
itnd0=nd*(fftlen*gilen)*20;
nloop=100;
k=0:10
for l=1:length(k)
ebn0=k(l);
noe=0;
nod=0;
eop=0;
nop=0;
for iii=1:nloop
seridata=rand(1,para*nd*ml)>0.5;
paradata=reshape(seridata,para,nd*ml);
[ich,qch]=qpskmod(paradata,para,nd,ml);
kmod=1/sqrt(2);
ich=ich.*kmod;
qch=qch.*kmod;
kndata=zeros(1,fftlen);
kndata0=2.*(rand(1,para)<0.5)-1;
kndata(5:388)=kndata0(1:384);
kndata(638:1021)=kndata0(385:768);
% kndata(2:27)=kndata0(1:26);
% kndata(39:64)=kndata0(27:52);
ceich=kndata;
ceqch=zeros(1,fftlen);
[ich1,qch1]=crmapping(ich,qch,fftlen,nd);
ich2=[ceich.' ich1];
qch2=[ceqch.' qch1];
x=ich2+qch2.*i;
y=ifft(x);
ich3=real(y);
qch3=imag(y);
fftlen2=fftlen+gilen;
[ich4,qch4]=giins(ich3,qch3,fftlen,gilen,nd+1);
spow=sum(ich4.^2+qch4.^2)/nd./para;
atten=0.5*spow*sr/br*10.^(-ebn0/10);
atten=sqrt(atten);
%%%%%%%%%%%%%%%%%%%fading%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% [ifade,qfade,ramp,rcos,rsin]=sefade(ich4,qch4,itau,dlvl1,th1,no,itnd1,now1,length(ich4),tstp,fd,flat);
% itnd1=itnd1+itnd0;
% ich4=ifade;
% qch4=qfade;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ich5,qch5]=comb(ich4,qch4,atten);
% ifade2=1./ramp.*(rcos(1,:).*ich5+rsin(1,:).*qch5);
% qfade2=1./ramp.*(-rsin(1,:).*ich5+rcos(1,:).*qch5);
% ich5=ifade2;
% qch5=qfade2;
[ich6,qch6]=girem(ich5,qch5,fftlen2,gilen,nd+1);
rx=ich6+qch6.*i;
ry=fft(rx);
ich7=real(ry);
qch7=imag(ry);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ce=1;
ice0=ich2(:,ce);
qce0=qch2(:,ce);
ice1=ich7(:,ce);
qce1=qch7(:,ce);
iv=real((1./(ice1.^2+qce1.^2)).*(ice0+i.*qce0).*(ice1-i.*qce1));
qv=imag((1./(ice1.^2+qce1.^2)).*(ice0+i.*qce0).*(ice1-i.*qce1));
ieqv1=[iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv iv];
qeqv1=[qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv qv];
% ieqv1=[iv iv iv iv iv iv iv];
% qeqv1=[qv qv qv qv qv qv qv];
icompen=real((ich7+i.*qch7).*(ieqv1+i.*qeqv1));
qcompen=imag((ich7+i.*qch7).*(ieqv1+i.*qeqv1));
ich7=icompen;
qch7=qcompen;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ich8=ich7(:,knd+1:nd+1);
qch8=qch7(:,knd+1:nd+1);
[ich9,qch9]=crdemapping(ich8,qch8,fftlen,nd);
ich10=ich9./kmod;
qch10=qch9./kmod;
[demodata]=qpskdemod(ich10,qch10,para,nd,ml);
demodata1=reshape(demodata,1,para*nd*ml);
noe2=sum(abs(demodata1-seridata));
nod2=length(seridata);
if noe2~=0
eop=eop+1;
else
eop=eop;
end
eop;
nop=nop+1;
noe=noe+noe2;
nod=nod+nod2;
end
per(l)=eop/nop;
ber(l)=noe/nod;
end
semilogy(k,ber,'c');
grid on;
xlabel('Eb/N0 (dB)');
ylabel('BER');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -