2ASK_2PSK_2FSK调制系统仿真分析-利用matlab

简述:利用matlab进行对三种调制方式进行理论值与实际值的对比仿真。

clc
clear
%参数设定
SNR_dB=-10:1:10;     
SNR=10.^(SNR_dB/10);
N=100000;
t=0:0.02:4; %fefine the  interval of the s0 and s1   
w1=2*pi;
w2=4*pi;
A=2;
%2PSK调制
s0_2PSK=A*sin(w1*t);s1_2PSK=-A*sin(w1*t);    %设定s0和s1
%2FSK调制
s0_2FSK=A*sin(w1*t);s1_2FSK=A*sin(w2*t);
%2ASK调制
s0_2ASK=zeros(1,length(t));s1_2ASK=A*sin(w1*t);  %
%每个码元的能量             
E_2PSK=sum(s0_2PSK.^2);
E_2FSK=(sum(s0_2FSK.^2)+sum(s1_2FSK.^2))/2;
E_2ASK=sum(s1_2ASK.^2);
%错误个数的数组初始化
error_2PSK=zeros(1,length(SNR));
error_2FSK=zeros(1,length(SNR));
error_2ASK=zeros(1,length(SNR));
%误码率数组初始化
Pe_2PSK_actual=zeros(1,length(SNR));
Pe_2FSK_actual=zeros(1,length(SNR));
Pe_2ASK_actual=zeros(1,length(SNR));
 
for i=1:length(SNR) %在每个snr对应下的Pe
    source=randi([0,1],1,N); %randi 生成伪随机整数0或着1
    %噪声的能量
    n0_2PSK=E_2PSK/SNR(i); %已知信噪比和码元能量,计算对应的噪声能量 SNR=E/N0
    n0_2FSK=E_2FSK/SNR(i);
    n0_2ASK=E_2ASK/SNR(i);   %标准差
    for j=1:N;     %白噪声方差等于功率  红色为方差,均值为0,因为没加m
        %生成噪声  %randn产生正态分布的随机数或矩阵的函数
        noise_2PSK=sqrt(n0_2PSK/2)*randn(1,length(t));
        noise_2FSK=sqrt(n0_2FSK/2)*randn(1,length(t));
        noise_2ASK=sqrt(n0_2ASK/2)*randn(1,length(t));
        %如果发送的为0,收到码元后判决为1,则出错。
        if source(j)==0
            %2PSK的判决   积分,但是因为是离散序列只能逐点求和
            I_2PSK=sum((s0_2PSK+noise_2PSK).*(s1_2PSK-s0_2PSK));
            beta_2PSK=0;%判决门限
            if I_2PSK>beta_2PSK
                error_2PSK(i)=error_2PSK(i)+1;
            end
            %2FSK的判决
            I_2FSK=sum((s0_2FSK+noise_2FSK).*(s1_2FSK-s0_2FSK));
            beta_2FSK=0.5*(sum(s1_2FSK.^2)-sum(s0_2FSK.^2));%判决门限
            if I_2FSK>beta_2FSK
                error_2FSK(i)=error_2FSK(i)+1;
            end
            %2ASK的判决
            I_2ASK=sum((s0_2ASK+noise_2ASK).*(s1_2ASK-s0_2ASK));
            beta_2ASK=0.5*sum(s1_2ASK.^2);%判决门限
            if I_2ASK>beta_2ASK
                error_2ASK(i)=error_2ASK(i)+1;
            end
        else   %如果发送的为1,收到码元后判决为0,则出错。              
            %2PSK的判决
            I_2PSK=sum((s1_2PSK+noise_2PSK).*(s1_2PSK-s0_2PSK));
            beta_2PSK=0;%判决门限
            if I_2PSK<beta_2PSK
                error_2PSK(i)=error_2PSK(i)+1;
            end
            %2FSK的判决
            I_2FSK=sum((s1_2FSK+noise_2FSK).*(s1_2FSK-s0_2FSK));
            beta_2FSK=0.5*(sum(s1_2FSK.^2)-sum(s0_2FSK.^2));%判决门限
            if I_2FSK<beta_2FSK
                error_2FSK(i)=error_2FSK(i)+1;
            end
            %2ASK的判决
            I_2ASK=sum((s1_2ASK+noise_2ASK).*(s1_2ASK-s0_2ASK));
            beta_2ASK=0.5*sum(s1_2ASK.^2);%判决门限
            if I_2ASK<beta_2ASK
                error_2ASK(i)=error_2ASK(i)+1;
            end
        end             
    end
    %误码率的计算
    Pe_2PSK_actual(i)=error_2PSK(i)/N;
    Pe_2FSK_actual(i)=error_2FSK(i)/N;
    Pe_2ASK_actual(i)=error_2ASK(i)/N;
end

%绘制仿真的Pe的曲线
semilogy(SNR_dB,Pe_2PSK_actual,'+');hold on;
semilogy(SNR_dB,Pe_2FSK_actual,'o');hold on;
semilogy(SNR_dB,Pe_2ASK_actual,'*');hold on;
%理论的Pe
Pe_2PSK_theory=0.5*erfc(sqrt(SNR));
Pe_2FSK_theory=0.5*erfc(sqrt(0.5*SNR));
Pe_2ASK_theory=0.5*erfc(sqrt(0.25*SNR));
%绘制理论的Pe的曲线
semilogy(SNR_dB,Pe_2PSK_theory,'r-');hold on;
semilogy(SNR_dB,Pe_2FSK_theory,'g-');hold on;
semilogy(SNR_dB,Pe_2ASK_theory,'b-');hold on;
legend('2PSK-actual','2FSK-actual','2ASK-actual','2PSK-theory','2FSK-theory','2ASK-theory');
grid on;
xlabel('E/n0(dB)');ylabel('误码率Pe');
title('2PSK,2FSK,2ASK误码性能比较');

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页