?? smldpe59.m
字號:
function [p]=smldPe59(snr_in_dB)
% [p]=smldPe59(snr_in_dB)
% SMLDPE59仿真求出以dB為單
% 位的指定信噪比的誤碼率.
M=4; % 四進制正交信號
E=1;
SNR=exp(snr_in_dB*log(10)/10); % 每比特信噪比
sgma=sqrt(E^2/(4*SNR)); % 噪聲的標準偏差
N=10000; % 被仿真符號的數目
% 四進制數據源的產生
for i=1:N,
temp=rand; % 在(0,1)區間內的均勻隨機變量
if(temp<0.25),
dsource1(i)=0;
dsource2(i)=0;
elseif(temp<0.5),
dsource1(i)=0;
dsource2(i)=1;
elseif(temp<0.75),
dsource1(i)=1;
dsource2(i)=0;
else
dsource1(i)=1;
dsource2(i)=1;
end
end;
% 判決和誤碼率計算
numoferr=0;
for i=1:N,
% 匹配濾波器輸出
if((dsource1(i)==0)&(dsource2(i)==0)),
r0=sqrt(E)+gngauss(sgma);
r1=gngauss(sgma);
r2=gngauss(sgma);
r3=gngauss(sgma);
elseif((dsource1(i)==0)&(dsource2(i)==1)),
r0=gngauss(sgma);
r1=sqrt(E)+gngauss(sgma);
r2=gngauss(sgma);
r3=gngauss(sgma);
elseif((dsource1(i)==1)&(dsource2(i)==0)),
r0=gngauss(sgma);
r1=gngauss(sgma);
r2=sqrt(E)+gngauss(sgma);
r3=gngauss(sgma);
else
r0=gngauss(sgma);
r1=gngauss(sgma);
r2=gngauss(sgma);
r3=sqrt(E)+gngauss(sgma);
end;
% 判決器
max_r=max([r0 r1 r2 r3]);
if(r0==max_r),
decis1=0;
decis2=0;
elseif(r1==max_r),
decis1=0;
decis2=1;
elseif(r2==max_r),
decis1=1;
decis2=0;
else
decis1=1;
decis2=1;
end;
% 計算在本次判決中比特誤差的數目
if(decis1~=dsource1(i)), % 如果出錯,計錯器加1.
numoferr=numoferr+1;
end;
if(decis2~=dsource2(i)), % 如果出錯,計錯器加1.
numoferr=numoferr+1;
end;
end;
p=numoferr/(2*N); % 比特誤碼率估算
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -