📄 ofdmtmep.m
字号:
temp=ifft(ffttemp);
ph=fft(temp,NumSubc+Numpps);
end
Comtemp=ph;
DataRtemp1=DataRtemp1./(Comtemp.');
for jj=1:Numpps-1
stemp=(jj-1)*temptemp+1;
DataRtemp3temp(stemp-jj+1:stemp-jj+temptemp-1)= DataRtemp1(stemp+1:stemp+temptemp-1);
end
DataRtemp1=DataRtemp3temp(1:NumSubc);
DataRtemp3( : ,1)=real(DataRtemp1)>0;
DataRtemp3( : ,2)=imag(DataRtemp1)>0;
DataSerR( : ,ii)=reshape(DataRtemp3,1,NumQ*(NumSubc));
end
DataR=reshape(DataSerR,1,NumData);
re=DataC-DataR;
NumError=sum(abs(re));
ErrorN(SNR/2+1)=NumError;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
DatahP(haha, : )=DatahP(haha, : )+ErrorN;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
if Awgn==1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%AWGN
for SNR=0:2:12
N=NF;
Data=floor(rand(1,N)*2); %data source
Fh=984000;
T=1/Fh;
NumSubc=128-Numpps; %Num of subcarriers with data
NumQ=2; %num of bits per subc
NumP=NumSubc*NumQ;
NumError=0;
temptemp=(NumSubc+Numpps)/(Numpps-1);
NumFrame=ceil(N/NumP); %divided into symbol and adding zeros if needed
NumData=NumFrame*NumP;
DataC(1:N)=Data(1:N);
DataC(N+1:NumData)=0;
QAMTable=[-1-j -1+j 1-j 1+j];
DataCF=reshape(DataC,NumP,NumFrame);
DataSer=zeros(NumSubc+Numpps+NumCp,NumFrame);
DataSerR=zeros(NumP,NumFrame);
for ii=1:NumFrame
DataT(1:NumP)=DataCF(1:NumP,ii);
DataTtemp1=reshape(DataT,NumSubc,NumQ); %interlever in the same time,haha!
DataTtemp2=bi2de(DataTtemp1,'left-msb');
DataTtemp=QAMTable(DataTtemp2+1);
DataTtemp=[DataTtemp,1+j];
DataTtemptemp=zeros(NumSubc+Numpps,1);
for jj=1:Numpps-1
stemp=(jj-1)*temptemp+1;
DataTtemptemp(stemp)=1+j;
DataTtemptemp(stemp+1:stemp+temptemp-1)=DataTtemp(stemp-jj+1:stemp-jj+temptemp-1);
end
DataIFFT=ifft(DataTtemptemp,NumSubc+Numpps);
DataIFFTCp(1:NumCp)=DataIFFT(NumSubc+Numpps-NumCp+1:NumSubc+Numpps);
DataIFFTCp(NumCp+1:NumCp+NumSubc+Numpps)=DataIFFT(1:NumSubc+Numpps);
DataSer( : ,ii)=DataIFFTCp;
end
p=(NumSubc+Numpps+NumCp)*NumFrame;
DataSerShape=reshape(DataSer,1,p);
%DataSerShape=awgn(DataSerShape,15,'measured');
temp=10.^(SNR/10);
SNRr=10*log10(temp*2);
DataChannel=awgn(DataSerShape,SNRr,'measured');
DataRtempSer=reshape(DataChannel,NumSubc+Numpps+NumCp,NumFrame);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for ii=1:NumFrame
DataRtempCp=DataRtempSer( : ,ii);
DataRtemp=DataRtempCp(NumCp+1:NumCp+NumSubc+Numpps);
DataRtemp1=fft(DataRtemp,NumSubc+Numpps);
for jj=1:Numpps-1
stemp=(jj-1)*temptemp+1;
DataRtemp3temp(stemp-jj+1:stemp-jj+temptemp-1)= DataRtemp1(stemp+1:stemp+temptemp-1);
end
DataRtemp1=DataRtemp3temp(1:NumSubc);
DataRtemp3( : ,1)=real(DataRtemp1)>0;
DataRtemp3( : ,2)=imag(DataRtemp1)>0;
DataSerR( : ,ii)=reshape(DataRtemp3,1,NumQ*(NumSubc));
end
DataR=reshape(DataSerR,1,NumData);
re=DataC-DataR;
NumError=sum(abs(re));
ErrorN(SNR/2+1)=NumError;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
ErrorN(8:16)=zeros(1,9);
DatahAn(haha, : )=DatahAn(haha, : )+ErrorN;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
if Arrival==1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Arrival
for SNR=0:2:20
N=NF;
Data=floor(rand(1,N)*2); %data source
Fh=984000;
T=1/Fh;
NumSubc=128-Numpps; %Num of subcarriers with data
NumQ=2; %num of bits per subc
NumP=NumSubc*NumQ;
NumError=0;
temptemp=(NumSubc+Numpps)/(Numpps-1); %%%%%%%%%%
NumFrame=ceil(N/NumP); %divided into symbol and adding zeros if needed
NumData=NumFrame*NumP;
DataC(1:N)=Data(1:N);
DataC(N+1:NumData)=0;
QAMTable=[-1-j -1+j 1-j 1+j];
DataCF=reshape(DataC,NumP,NumFrame);
DataSer=zeros(NumSubc+Numpps+NumCp,NumFrame);
DataSerR=zeros(NumP,NumFrame);
for ii=1:NumFrame
DataT(1:NumP)=DataCF(1:NumP,ii);
DataTtemp1=reshape(DataT,NumSubc,NumQ); %interlever in the same time,haha!
DataTtemp2=bi2de(DataTtemp1,'left-msb');
DataTtemp=QAMTable(DataTtemp2+1);
DataTtemp=[DataTtemp,1+j];
%size(DataTtemp),
%hj=input(' >');
DataTtemptemp=zeros(NumSubc+Numpps,1); %inter pilots
for jj=1:Numpps-1
stemp=(jj-1)*temptemp+1;
DataTtemptemp(stemp)=1+j;
DataTtemptemp(stemp+1:stemp+temptemp-1)=DataTtemp(stemp-jj+1:stemp-jj+temptemp-1);
end
%DataTtemptemp,
%inp=input(' >');
DataIFFT=ifft(DataTtemptemp,NumSubc+Numpps);
DataIFFTCp(1:NumCp)=DataIFFT(NumSubc+Numpps-NumCp+1:NumSubc+Numpps);
DataIFFTCp(NumCp+1:NumCp+NumSubc+Numpps)=DataIFFT(1:NumSubc+Numpps);
DataSer( : ,ii)=DataIFFTCp;
end
p=(NumSubc+Numpps+NumCp)*NumFrame;
DataSerShape=reshape(DataSer,1,p);
data=DataSerShape;
[DataChannel,DopCom]=ChannelAeroA(data);
temp=10.^(SNR/10);
SNRr=10*log10(temp*2);
DataChannel=awgn(DataChannel,SNRr,'measured');
%[out,DopCom]=Syn(DataChannel,NumSubc+Numpps,NumCp,SNR);
DataChannel=(DopCom).*DataChannel;
DataRtempSer=reshape(DataChannel,NumSubc+Numpps+NumCp,NumFrame);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for ii=1:NumFrame
DataRtempCp=DataRtempSer( : ,ii);
DataRtemp=DataRtempCp(NumCp+1:NumCp+NumSubc+Numpps);
DataRtemp1=fft(DataRtemp,NumSubc+Numpps);
%figure(3);
%drawnow,plot(DataRtemp1,'.');
if sigcom==1;
t=1:temptemp:NumSubc+Numpps;
t=[t,NumSubc+Numpps];
ffttemp(1:Numpps)=(DataRtemp1(t)./(1+j));
%$$$$1提供的减轻ICI和噪声的方法
if sigLp==1;
temp=fft(ffttemp);
temp(2:16)=0;
ffttemp=ifft(temp);
end
if sigdft==0;
[ph]=linear_inter1(ffttemp,NumSubc+Numpps);
else
temp=ifft(ffttemp);
ph=fft(temp,NumSubc+Numpps);
end
Comtemp=ph;
DataRtemp1=DataRtemp1./(Comtemp.');
end
%figure(4);
%drawnow,plot(DataRtemp1,'.');
for jj=1:Numpps-1
stemp=(jj-1)*temptemp+1;
DataRtemp3temp(stemp-jj+1:stemp-jj+temptemp-1)= DataRtemp1(stemp+1:stemp+temptemp-1);
end
DataRtemp1=DataRtemp3temp(1:NumSubc);
%size(DataRtemp1)
%SNR,
%sig=input('lsjdf>');
DataRtemp3( : ,1)=real(DataRtemp1)>0;
DataRtemp3( : ,2)=imag(DataRtemp1)>0;
DataSerR( : ,ii)=reshape(DataRtemp3,1,NumQ*(NumSubc));
end
DataR=reshape(DataSerR,1,NumData);
re=DataC-DataR;
NumError=sum(abs(re));
ErrorN(SNR/2+1)=NumError;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end %end of SNR
ErrorN(12:16)=zeros(1,5);
DatahAr(haha, : )=DatahAr(haha, : )+ErrorN;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
if En_route==1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%En-route
for SNR=0:2:20
N=NF;
Data=floor(rand(1,N)*2); %data source
Fh=984000;
T=1/Fh;
NumSubc=128-Numpps; %Num of subcarriers with data
NumQ=2; %num of bits per subc
NumP=NumSubc*NumQ;
NumError=0;
temptemp=(NumSubc+Numpps)/(Numpps-1); %%%%%%%%%%
NumFrame=ceil(N/NumP); %divided into symbol and adding zeros if needed
NumData=NumFrame*NumP;
DataC(1:N)=Data(1:N);
DataC(N+1:NumData)=0;
QAMTable=[-1-j -1+j 1-j 1+j];
DataCF=reshape(DataC,NumP,NumFrame);
DataSer=zeros(NumSubc+Numpps+NumCp,NumFrame);
DataSerR=zeros(NumP,NumFrame);
for ii=1:NumFrame
DataT(1:NumP)=DataCF(1:NumP,ii);
DataTtemp1=reshape(DataT,NumSubc,NumQ); %interlever in the same time,haha!
DataTtemp2=bi2de(DataTtemp1,'left-msb');
DataTtemp=QAMTable(DataTtemp2+1);
DataTtemp=[DataTtemp,1+j];
%size(DataTtemp),
%hj=input(' >');
DataTtemptemp=zeros(NumSubc+Numpps,1); %inter pilots
for jj=1:Numpps-1
stemp=(jj-1)*temptemp+1;
DataTtemptemp(stemp)=1+j;
DataTtemptemp(stemp+1:stemp+temptemp-1)=DataTtemp(stemp-jj+1:stemp-jj+temptemp-1);
end
%DataTtemptemp,
%inp=input(' >');
DataIFFT=ifft(DataTtemptemp,NumSubc+Numpps);
DataIFFTCp(1:NumCp)=DataIFFT(NumSubc+Numpps-NumCp+1:NumSubc+Numpps);
DataIFFTCp(NumCp+1:NumCp+NumSubc+Numpps)=DataIFFT(1:NumSubc+Numpps);
DataSer( : ,ii)=DataIFFTCp;
end
p=(NumSubc+Numpps+NumCp)*NumFrame;
DataSerShape=reshape(DataSer,1,p);
data=DataSerShape;
%用"%"标记的部分是对信道进行初始化的需要,因为此时散射信道延时较大
temp=data; %
Nlen=length(temp); %
Noi=temp(Nlen-20+1:Nlen); %
%Noi=awgn(temp(1:20),0,'measured')-temp(1:20); %
data=[Noi,temp]; %
Ntemp=length(data); %
[DataChannel,DopCom]=ChannelAeroE(data);
temp=10.^(SNR/10);
SNRr=10*log10(temp*2);
DataChannel=awgn(DataChannel,SNRr,'measured');
%[out,DopCom]=Syn(DataChannel,NumSubc+Numpps,NumCp,SNR);
DataChannel=(DopCom).*DataChannel;
DataChanneltemp=DataChannel(21:Ntemp);%
DataChannel=DataChanneltemp; %
DataRtempSer=reshape(DataChannel,NumSubc+Numpps+NumCp,NumFrame);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for ii=1:NumFrame
DataRtempCp=DataRtempSer( : ,ii);
DataRtemp=DataRtempCp(NumCp+1:NumCp+NumSubc+Numpps);
DataRtemp1=fft(DataRtemp,NumSubc+Numpps);
%figure(3);
%drawnow,plot(DataRtemp1,'.');
if sigcom==1;
t=1:temptemp:NumSubc+Numpps;
t=[t,NumSubc+Numpps];
ffttemp(1:Numpps)=(DataRtemp1(t)./(1+j));
%$$$$1提供的减轻ICI和噪声的方法
if sigLp==1;
temp=fft(ffttemp);
temp(2:16)=0;
ffttemp=ifft(temp);
end
if sigdft==0;
[ph]=linear_inter1(ffttemp,NumSubc+Numpps);
else
temp=ifft(ffttemp);
ph=fft(temp,NumSubc+Numpps);
end
Comtemp=ph;
DataRtemp1=DataRtemp1./(Comtemp.');
end
%figure(4);
%drawnow,plot(DataRtemp1,'.');
for jj=1:Numpps-1
stemp=(jj-1)*temptemp+1;
DataRtemp3temp(stemp-jj+1:stemp-jj+temptemp-1)= DataRtemp1(stemp+1:stemp+temptemp-1);
end
DataRtemp1=DataRtemp3temp(1:NumSubc);
%size(DataRtemp1)
%SNR,
%sig=input('lsjdf>');
DataRtemp3( : ,1)=real(DataRtemp1)>0;
DataRtemp3( : ,2)=imag(DataRtemp1)>0;
DataSerR( : ,ii)=reshape(DataRtemp3,1,NumQ*(NumSubc));
end
DataR=reshape(DataSerR,1,NumData);
re=DataC-DataR;
NumError=sum(abs(re));
ErrorN(SNR/2+1)=NumError;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end %end of SNR
ErrorN(12:16)=zeros(1,5);
DatahE(haha, : )=DatahE(haha, : )+ErrorN;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
end %end of each exp
result( : ,1)=sum(DatahT1)./(NF*Nn);
result( : ,2)=sum(DatahT2)./(NF*Nn);
result( : ,3)=sum(DatahP)./(NF*Nn);
result( : ,4)=sum(DatahAn)./(NF*Nn);
result( : ,5)=sum(DatahAr)./(NF*Nn);
result( : ,6)=sum(DatahE)./(NF*Nn);
dlmwrite(file_name,result*NF*Nn,' ');
t=0:2:30;
figure(1);
semilogy(t,result( : ,1),'b-d',t,result( : ,2),'b-s',t,result( : ,3),'b-*',t,result( : ,4),'r-*',t,result( : ,5),'g-+',t,result( : ,6),'r-o');
axis([0 30 1e-6 1]),grid on;
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -