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

📄 ofdm_test.m

📁 关于通信基本原理的仿真
💻 M
字号:
%%%%% QPSK 仿真实例 %%%%%%%%%%%%
clc;
clear all;
EbN0dB=3:3:33;%设定信噪比
Frame=4;            %OFDM帧长
errLimit=500;
fftlen1=128;         %载波数
Gi=8;            %保护间隔长度
fftlen2=fftlen1+Gi;
M=4;              %QAM调制阶数
Mc=log2(M);        %带宽效率
Es=2;
alpha0=1;
alpha1=1;
alpha2=1;

for ii=1:length(EbN0dB)
    errCount=0;
    totalN=0;
    N0=Es/(Mc*10^(EbN0dB(ii)/10));

    while errCount<errLimit

        source=randint(fftlen1*Mc,Frame);
        trans=qpsk_mod(source);

        ofdm_sym=sqrt(fftlen1)*ifft(trans);


        ofdm_sym_gi=[ofdm_sym(fftlen1-Gi+1:fftlen1,:)
            ofdm_sym];       %Add CP

        ofdm_symtochannel=reshape(ofdm_sym_gi,Frame*length(ofdm_sym_gi),1);


%         Ray0=sqrt((sqrt(0.5)*randn)^2+(sqrt(0.5)*randn)^2);
%         Ray1=sqrt((sqrt(0.5)*randn)^2+(sqrt(0.5)*randn)^2);
%         Ray2=sqrt((sqrt(0.5)*randn)^2+(sqrt(0.5)*randn)^2);
          Ray0=sqrt(0.5)*(randn+j*randn);
          Ray1=sqrt(0.5)*(randn+j*randn);
          Ray2=sqrt(0.5)*(randn+j*randn);

        h=[Ray0*alpha0
            Ray1*alpha1
            0
            0
            Ray2*alpha2];
        %h=[Ray0*alpha0];
        %ofdm_syminchannel=conv(ofdm_symtochannel,h);
%         path1=ofdm_symtochannel.*h(1,1);
%         path2=[zeros(1,1) 
%             ofdm_symtochannel(2:end,1).*h(2,1)];
%         path3=[zeros(2,1) 
%             ofdm_symtochannel(3:end,1).*h(3,1)];
        ofdm_syminchannel=conv(ofdm_symtochannel,h);
        
        H=fft([h
            zeros(fftlen1-length(h),1)]);
        receiver=ofdm_syminchannel(1:length(ofdm_symtochannel),1)+sqrt(N0/2)*(randn(Frame*fftlen2,1)+j*randn(Frame*fftlen2,1));% Add noise

        ofdm_symfromchannel=reshape(receiver,fftlen2,Frame);

        ofdm_sym_degi=ofdm_symfromchannel(Gi+1:fftlen2,:);

        ofdm_sym_fft=(1/sqrt(fftlen1))*fft(ofdm_sym_degi);

        for k=1:Frame
            tempfft=ofdm_sym_fft(:,k);
            ofdm_sym_to_demod(:,k)=tempfft./H;%.*conj(H)./(abs(H).^2);
        end

        demodata=qpsk_demod(ofdm_sym_to_demod);

        temp=sum(sum(abs(source-demodata)));

        errCount=errCount+temp;
        totalN=totalN+fftlen1*Mc*Frame;
    end
    ber(ii)=errCount/totalN;
end
ber
semilogy(EbN0dB,ber,'-o');
grid on;
hold on;
berth=berfading(EbN0dB,'psk',4,1);
semilogy(EbN0dB,berth,'-*');
berth3=berfading(EbN0dB,'psk',4,3);
semilogy(EbN0dB,berth3,'-@');


⌨️ 快捷键说明

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