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

📄 ofdm.m

📁 有需要的自己下载查看 内部有图有程序
💻 M
字号:
clc;
clear all;
EbN0dB=1:3:30;%设定信噪比
errLimit=1000;%设定每个信噪比下循环终止统计错误数
fftlen=128;
GI=32;%保护间隔
Mc=2;
Frame=4;
%每次循环仿真矢量长度
for ii=1:length(EbN0dB)
    errCount=0;
    totalN=0;
    sigma2(ii)=1/(2*(10^(EbN0dB(ii)/10)));%AWGN信道噪声方差与信噪比的关系
    alpha1=0.6;%多径信道
    alpha2=0.2;
    alpha3=0.2;
    while errCount<errLimit

        source=randint(fftlen*Mc,Frame);  %产生比特信源,256*4矩阵
        source2=reshape(source,Frame*fftlen*Mc,1);%根据source构成1024*1的矩阵
        %trans=qpsk_mod(source2);
        sourc = reshape(source2,Mc,Frame*fftlen);%2*512矩阵
        for k=1:fftlen*Frame  %1:512
            if [sourc(1,k),sourc(2,k)]==[0 0]
                trans(k,1) = -1-i;
            elseif [sourc(1,k),sourc(2,k)]==[0 1]
                trans(k,1) = -1+i;
            elseif [sourc(1,k),sourc(2,k)]==[1 0]
                trans(k,1) = 1-i;
            elseif [sourc(1,k),sourc(2,k)]==[1 1]
                trans(k,1) = 1+i;
            end
        end
        trans2=reshape(trans,fftlen,Frame);%128*4
        ifftout1=sqrt(fftlen)*ifft(trans2);%IFFT
        ifftout2=[(ifftout1(fftlen-GI+1:fftlen,:)),ifftout1];%加保护间隔
        ifftout3=reshape(ifftout2,Frame*(fftlen+GI),1);%(128+32)*4,1
        
       %%%%%%%%%%%%%%%%%%%%%%%%%%% Channel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
        R1=sqrt(0.5)*(randn(1,1)+j*randn(1,1));
        R2=sqrt(0.5)*(randn(1,1)+j*randn(1,1));
        R3=sqrt(0.5)*(randn(1,1)+j*randn(1,1));
        chan=[alpha1*R1 
              0
              alpha2*R2
              0
              alpha3*R3];%共构成5条多径信道
        chanout=conv(ifftout3,chan);          %时域卷积,即相乘再相加,等效为多径y=h*x
        %ray1=alpha1*R1*ifftout3;
        %ray2=[0 
        %    alpha2*R2*ifftout3(1:length(ifftout3)-1,1)];
        %ray3=[0 
        %      0
        %    alpha2*R2*ifftout3(1:length(ifftout3)-2,1)];
        
        receiver1= chanout(1:length(ifftout3))+sqrt(sigma2(ii))*randn(length(ifftout3),1)*(1+j);           %加信道噪声,如果是衰落信道,信号模型为y=k*x+n
        %receiver1= ray1+ray2+ray3+sqrt(sigma2(ii))*randn(length(ifftout3),1)*(1+j);
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%% Receiver %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
        receiver2=reshape(receiver1,fftlen+GI,Frame);%128+32,4
        receiver3=receiver2(GI+1:fftlen+GI,:);%去保护间隔
        receiver4=(1/sqrt(fftlen))*fft(receiver3);%FFT变换
        receiver5=reshape(receiver4,Frame*fftlen,1);%512*1
        H=fft([chan,
            zeros(fftlen-length(chan),1)]);
        for L=1:Frame
        receiver6((L-1)*fftlen+1:L*fftlen,1)=(receiver5((L-1)*fftlen+1:L*fftlen,1))./(H);  %由于多径信道,line47时域卷积等效为频域相乘,所以在频域的QPSK解调前,需除掉信道chan的频谱,还原信号频谱
        end
        for k=1:fftlen*Frame
            demod(1,k)=(real(receiver6(k,1))>0);
            demod(2,k)=(imag(receiver6(k,1))>0);
        end
        demodata=reshape(demod,Frame*fftlen*Mc,1);
        source2=reshape(source,Frame*fftlen*Mc,1);
        temp=sum(abs(source2-demodata));
        errCount=errCount+temp;
        totalN=totalN+Frame*fftlen*Mc;

    end
    ber(ii)=errCount/totalN;
end

%仿真性能曲线
semilogy(EbN0dB,ber,'-o');
hold on;
grid on;
%理论性能曲线
berthe=berfading(EbN0dB,'psk',4,1);
semilogy(EbN0dB,berthe,'-*');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -