2ASK和2FSK相干解调误码率仿真matlab

2ASK误码率仿真
基于蒙特卡洛模拟方法,数据量为1e5即10万。
仿真结果
2ASK和2FSK相干解调误码率仿真matlab_第1张图片
代码

clear,clc;
s0=0;s1=5;%信号经过恒惨信道之后的幅值,衰减之后
P0=0.7;%信源发送0的概率
P1=1-P0;%信源发送1的概率
A2_over_sigma2_dB=-5:0.5:20;%仿真信噪比范围(dB)
A2_over_sigma2=10.^(A2_over_sigma2_dB./10);%仿真信号信噪比(倍数)

sigma2=s1^2./A2_over_sigma2;%噪声方差,A/SNR=sigma2
N=1e5;%信源序列长度
for k=1:length(sigma2)%在信噪比范围内
    X=(rand(1,N)>P0);%信源发生,产生10
    n=sqrt(sigma2(k)).*randn(1,N);%噪声幅值需要是噪声功率开根号
    xi=s1*X+n;%判决接收机输入
    C_opt=(s0+s1)/2+sigma2(k)/(s1-s0)*log(P0./P1);%最佳判决门限
    y=(xi>C_opt);%判决输出,大于则判为1,小于判为0
    err(k)=(sum(X-y~=0))/N%误码率统计,其中~=表示不等于
end

semilogy(A2_over_sigma2_dB,err,'o');hold on;%对数间隔绘图,仿真结果
Pe=zeros(1,length(sigma2));%预先分配内存
for k=1:length(sigma2)
    C_opt=(s0+s1)./2+sigma2(k)./(s1-s0).*log(P0./P1);%计算最佳判决门限,这里可以不写s0,因为s0=0
    Pe0=0.5-0.5*erf((C_opt-s0)/sqrt(2*sigma2(k)));%发送0时的错误率,P(1/0),发送0接收1
    Pe1=0.5+0.5*erf((C_opt-s1)/sqrt(2*sigma2(k)));%发送1时的错误率,即P(0/1)
    Pe(k)=P0*Pe0+P1*Pe1;%平均错误率
end

semilogy(A2_over_sigma2_dB,Pe);%理论曲线
title("2ASK误码率仿真");
xlabel("A^2/\sigma^2(dB)");
ylabel("错误率P_e");
legend("仿真结果","理论曲线");





2FSK误码率仿真

仿真结果

2ASK和2FSK相干解调误码率仿真matlab_第2张图片
信源等概率发送0和1,而且本实验假设信源发送1,在这种情况下判断误码率(即接收到0为错误)
代码
semilogy为取对数坐标画图

clear;
s0=0; s1=5;
P0=0.5; % 信源发0的概率
P1=1-P0;
A2_over_sigma2_dB=-5:0.5:20; % 仿真信噪比范围(dB)
A2_over_sigma2=10.^(A2_over_sigma2_dB./10);
sigma2=s1^2./A2_over_sigma2; % 噪声方差范围
N=1e5; % 信源序列长度
for k=1:length(sigma2)
 %两路噪声
n1=sqrt(sigma2(k)).*randn(1,N); 
n2=sqrt(sigma2(k)).*randn(1,N); 
y1=s1+n1; % 接收机两路:在输入为1的情况下
y2=n2;
Y=(y1>y2); % 判决输出
%判决为0则表示错误
err(k)=(sum(Y<1))./N; % 误码率统计
end

semilogy(A2_over_sigma2_dB,err,'o');hold on; % 仿真结果

for k=1:length(sigma2) % 理论计算
r=s1^2/(sigma2(k)*2);
Pe1=0.5-0.5*erf((sqrt(0.5*r))); %1出错率
Pe0=0.5-0.5*erf((sqrt(0.5*r))); %0出错率

Pe(k)=Pe1; % 平均错误率,等概率时等于Pe1的错误率
end
semilogy(A2_over_sigma2_dB,Pe); % 理论曲线
xlabel('A^2/\sigma^2 (dB)');
ylabel('错误率P_e');
legend('仿真结果','理论曲线');

你可能感兴趣的:(通信原理)