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

📄 noofdm.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);  %产生比特信源
        source2=reshape(source,Frame*fftlen*Mc,1);
        %trans=qpsk_mod(source2);
        sourc = reshape(source2,Mc,Frame*fftlen);
        for k=1:fftlen*Frame
            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);
        %ifftout1=sqrt(fftlen)*ifft(trans2);
        %ifftout2=[(ifftout1(fftlen-GI+1:fftlen,:)),
        %    ifftout1];
        %ifftout3=reshape(ifftout2,Frame*(fftlen+GI),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];
        %chanout=conv(ifftout3,chan);          %时域卷积,即相乘再相加,等效为多径
        chanout=conv(trans,chan);
        %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(trans))+sqrt(sigma2(ii))*randn(length(trans),1)*(1+j); 
        %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);
        %receiver3=receiver2(GI+1:fftlen+GI,:);
        %receiver4=(1/sqrt(fftlen))*fft(receiver3);
        %receiver5=reshape(receiver4,Frame*fftlen,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).*conj(H))./(abs(H).^2);  %由于多径信道,line47时域卷积等效为频域相乘,所以在频域的QPSK解调前,需除掉信道chan的频谱,还原信号频谱
        %end
        for k=1:fftlen*Frame
            demod(1,k)=(real(receiver1(k,1))>0);
            demod(2,k)=(imag(receiver1(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=berawgn(EbN0dB,'psk',4,'nodiff');
%semilogy(EbN0dB,berthe,'-*');

⌨️ 快捷键说明

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