📄 smldp510.m
字号:
function [p]=smldP510(snr_in_dB)
% [p]=smldP510(snr_in_dB)
% SMLDP510 simulates the probability of error for the given
% snr_in_dB, signal-to-noise ratio in dB.
M=4; % quaternary orthogonal signaling
E=1;
SNR=exp(snr_in_dB*log(10)/10); % signal-to-noise ratio per bit
sgma=sqrt(E^2/(4*SNR)); % sigma, standard deviation of noise
N=10000; % number of symbols being simulated
% generation of the quaternary data source
for i=1:N,
temp=rand; % a uniform random variable over (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;
% detection, and probability of error calculation
numoferr=0;
for i=1:N,
% matched filter outputs
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;
% the detector
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;
% Count the number of bit errors made in this decision.
if (decis1~=dsource1(i)), % If it is an error, increase the error counter.
numoferr=numoferr+1;
end;
if (decis2~=dsource2(i)), % If it is an error, increase the error counter.
numoferr=numoferr+1;
end;
end;
p=numoferr/(2*N); % bit error probability estimate
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -