2ASK和2FSK相干解調誤碼率仿真matlab

2ASK誤碼率仿真
基於蒙特卡洛模擬方法,數據量爲1e5即10萬。
仿真結果
在這裏插入圖片描述
代碼

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誤碼率仿真

仿真結果

在這裏插入圖片描述
信源等概率發送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('仿真結果','理論曲線');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章