Smldp510.m
上传用户:loeagle
上传日期:2013-03-02
资源大小:1236k
文件大小:2k
源码类别:

通讯编程文档

开发平台:

Matlab

  1. function [p]=smldP510(snr_in_dB)
  2. % [p]=smldP510(snr_in_dB)
  3. % SMLDP510  simulates the probability of error for the given
  4. %    snr_in_dB, signal-to-noise ratio in dB.
  5. M=4;     % quaternary orthogonal signaling
  6. E=1;
  7. SNR=exp(snr_in_dB*log(10)/10);     % signal-to-noise ratio per bit
  8. sgma=sqrt(E^2/(4*SNR));       % sigma, standard deviation of noise
  9. N=10000;       % number of symbols being simulated
  10. % generation of the quaternary data source
  11. for i=1:N,
  12.   temp=rand;           % a uniform random variable over (0,1)
  13.   if (temp<0.25),
  14.     dsource1(i)=0; 
  15.     dsource2(i)=0;       
  16.   elseif (temp<0.5),
  17.     dsource1(i)=0; 
  18.     dsource2(i)=1;       
  19.   elseif (temp<0.75),
  20.     dsource1(i)=1; 
  21.     dsource2(i)=0;       
  22.   else
  23.     dsource1(i)=1; 
  24.     dsource2(i)=1;
  25.   end
  26. end;
  27. % detection, and probability of error calculation
  28. numoferr=0;
  29. for i=1:N,
  30.   % matched filter outputs
  31.   if ((dsource1(i)==0) & (dsource2(i)==0)),
  32.     r0=sqrt(E)+gngauss(sgma);
  33.     r1=gngauss(sgma);
  34.     r2=gngauss(sgma);
  35.     r3=gngauss(sgma);
  36.   elseif ((dsource1(i)==0) & (dsource2(i)==1)),
  37.     r0=gngauss(sgma);
  38.     r1=sqrt(E)+gngauss(sgma);
  39.     r2=gngauss(sgma);
  40.     r3=gngauss(sgma);
  41.   elseif ((dsource1(i)==1) & (dsource2(i)==0)),
  42.     r0=gngauss(sgma);
  43.     r1=gngauss(sgma);
  44.     r2=sqrt(E)+gngauss(sgma);
  45.     r3=gngauss(sgma);
  46.   else
  47.     r0=gngauss(sgma);
  48.     r1=gngauss(sgma);
  49.     r2=gngauss(sgma);
  50.     r3=sqrt(E)+gngauss(sgma);
  51.   end;
  52.   % the detector
  53.   max_r=max([r0 r1 r2 r3]);
  54.   if (r0==max_r),
  55.     decis1=0;
  56.     decis2=0;
  57.   elseif (r1==max_r),
  58.     decis1=0;
  59.     decis2=1;
  60.   elseif (r2==max_r),
  61.     decis1=1;
  62.     decis2=0;
  63.   else
  64.     decis1=1;
  65.     decis2=1;
  66.   end;
  67.   % Count the number of bit errors made in this decision.
  68.   if (decis1~=dsource1(i)),    % If it is an error, increase the error counter.
  69.     numoferr=numoferr+1;
  70.   end;
  71.   if (decis2~=dsource2(i)),    % If it is an error, increase the error counter.
  72.     numoferr=numoferr+1;
  73.   end;
  74. end;
  75. p=numoferr/(2*N);         % bit error probability estimate