⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdmtmep.m

📁 非常好用
💻 M
📖 第 1 页 / 共 2 页
字号:
        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 + -