?? snr2p.m
字號:
function [pb,ps]=snr2p(snr_in_dB)
%[pb,ps]=snr2p(snr_in_dB)
%求出以dB為單位的給定信噪比的比特誤碼率和符號誤碼率
N=10000; %符號數
Es=1;
snr=10^(snr_in_dB/10); %計算信噪比的數值
sgma=sqrt(Es/(4*snr)); %計算噪聲均方根
%符號映射
s00=[1 0];
s01=[0 1];
s11=[-1 0];
s10=[0 -1];
%生成信號源
for i=1:N,
temp=rand; %產生一個(0,1)之間的均勻隨機變量
if(temp<0.25), %信源輸出“00”的概率為1/4
dsource1(i)=0;
dsource2(i)=0;
elseif(temp<0.5), %信源輸出“01”的概率為1/4
dsource1(i)=0;
dsource2(i)=1;
elseif(temp<0.75), %信源輸出“10”的概率為1/4
dsource1(i)=1;
dsource2(i)=0;
else %信源輸出“11”的概率為1/4
dsource1(i)=1;
dsource2(i)=1;
end;
end;
%判決、誤碼率計算
numofsymbolerror=0;
numofbiterror=0;
for i=1:N,
%在判決其的接收端的信號,對于第i個符號為:
n(1)=gausamp(sgma);
n(2)=gausamp(sgma);
if ((dsource1(i)==0)&(dsource2(i)==0)),
r=s00+n; %輸入00則算出對應的總信號
elseif ((dsource1(i)==0)&(dsource2(i)==1)),
r=s01+n; %輸入01則算出對應的總信號
elseif ((dsource1(i)==1)&(dsource2(i)==0)),
r=s10+n; %輸入10則算出對應的總信號
else
r=s11+n; %輸入11則算出對應的總信號
end;
%以下為計算互相關量度
c00=dot(r,s00);
c01=dot(r,s01);
c10=dot(r,s10);
c11=dot(r,s11);
%第i個符號的判決如下進行
c_max=max([c00 c01 c10 c11]);
if (c00==c_max),
decis1=0;decis2=0;
elseif (c01==c_max),
decis1=0;decis2=1;
elseif (c10==c_max),
decis1=1;decis2=0;
else
decis1=1;decis2=1;
end;
%若判決結果不正確,誤碼計數器加1
symbolerror=0;
if (decis1~=dsource1(i)),
numofbiterror=numofbiterror+1;
symbolerror=1;
end;
if (decis2~=dsource2(i)),
numofbiterror=numofbiterror+1;
symbolerror=1;
end;
if (symbolerror==1),
numofsymbolerror= numofsymbolerror+1;
end;
end;
ps=numofsymbolerror./N; %總共發出N個符號
pb=numofbiterror./(2*N); %總共發出2N個比特
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -