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

通讯编程文档

开发平台:

Matlab

  1. function [pb,ps]=cm_sm32(snr_in_dB)
  2. % [pb,ps]=cm_sm32(snr_in_dB)
  3. % CM_SM32  finds the probability of bit error and symbol error for the 
  4. %    given value of snr_in_dB, signal-to-noise ratio in dB.
  5. N=10000;
  6. E=1;    % energy per symbol
  7. snr=10^(snr_in_dB/10);      % signal-to-noise ratio
  8. sgma=sqrt(E/snr)/2;       % noise variance
  9. % the signal mapping
  10. s00=[1 0];
  11. s01=[0 1];
  12. s11=[-1 0];
  13. s10=[0 -1];
  14. % generation of the data source
  15. for i=1:N,
  16.   temp=rand;    % a uniform random variable between 0 and 1
  17.   if (temp<0.25),    % With probability 1/4, source output is "00."
  18.     dsource1(i)=0;
  19.     dsource2(i)=0;    
  20.   elseif (temp<0.5),    % With probability 1/4, source output is "01."
  21.     dsource1(i)=0;
  22.     dsource2(i)=1;
  23.   elseif (temp<0.75),      % With probability 1/4, source output is "10."
  24.     dsource1(i)=1;
  25.     dsource2(i)=0;
  26.   else            % With probability 1/4, source output is "11."
  27.     dsource1(i)=1;
  28.     dsource2(i)=1;
  29.   end;
  30. end;
  31. % detection and the probability of error calculation
  32. numofsymbolerror=0;
  33. numofbiterror=0;
  34. for i=1:N,
  35.   % The received signal at the detector, for the ith symbol, is:
  36.   n(1)=gngauss(sgma);      
  37.   n(2)=gngauss(sgma);
  38.   if ((dsource1(i)==0) & (dsource2(i)==0)),
  39.     r=s00+n;
  40.   elseif ((dsource1(i)==0) & (dsource2(i)==1)),
  41.     r=s01+n;
  42.   elseif ((dsource1(i)==1) & (dsource2(i)==0)),
  43.     r=s10+n;
  44.   else
  45.     r=s11+n;
  46.   end;
  47.   % The correlation metrics are computed below.
  48.   c00=dot(r,s00);
  49.   c01=dot(r,s01);
  50.   c10=dot(r,s10);
  51.   c11=dot(r,s11);
  52.   % The decision on the ith symbol is made next.
  53.   c_max=max([c00 c01 c10 c11]);
  54.   if (c00==c_max),
  55.     decis1=0; decis2=0;
  56.   elseif (c01==c_max),
  57.     decis1=0; decis2=1;
  58.   elseif (c10==c_max),
  59.     decis1=1; decis2=0;
  60.   else
  61.     decis1=1; decis2=1;
  62.   end;
  63.   % Increment the error counter, if the decision is not correct.
  64.   symbolerror=0;
  65.   if (decis1~=dsource1(i)),
  66.     numofbiterror=numofbiterror+1;
  67.     symbolerror=1;
  68.   end;
  69.   if (decis2~=dsource2(i)),
  70.     numofbiterror=numofbiterror+1;
  71.     symbolerror=1;
  72.   end;
  73.   if (symbolerror==1),
  74.     numofsymbolerror = numofsymbolerror+1;
  75.   end;
  76. end;
  77. ps=numofsymbolerror/N;            % since there are totally N symbols
  78. pb=numofbiterror/(2*N);        % since 2N bits are transmitted