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

通讯编程文档

开发平台:

Matlab

  1. function [p]=cm_sm34(snr_in_dB)
  2. % [p]=cm_sm34(snr_in_dB)
  3. % CM_SM34  finds the probability of error for the given
  4. %    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/(4*snr));       % noise variance
  9. % Generation of the data source follows.
  10. for i=1:2*N,
  11.   temp=rand;    % a uniform random variable between 0 and 1
  12.   if (temp<0.5),   
  13.     dsource(i)=0;    % With probability 1/2, source output is "0."
  14.   else.
  15.     dsource(i)=1;    % With probability 1/2, source output is "1"
  16.   end;
  17. end;
  18. % Differential encoding of the data source follows
  19. mapping=[0 1 3 2];
  20. M=4;
  21. [diff_enc_output] = cm_dpske(E,M,mapping,dsource);
  22. % Received signal is then
  23. for i=1:N,
  24.   [n(1) n(2)]=gngauss(sgma);
  25.   r(i,:)=diff_enc_output(i,:)+n;
  26. end;
  27. % detection and the probability of error calculation
  28. numoferr=0;
  29. prev_theta=0;
  30. for i=1:N,
  31.   theta=angle(r(i,1)+j*r(i,2));
  32.   delta_theta=mod(theta-prev_theta,2*pi);
  33.   if ((delta_theta<pi/4) | (delta_theta>7*pi/4)),
  34.     decis=[0 0];
  35.   elseif (delta_theta<3*pi/4),
  36.     decis=[0 1];
  37.   elseif (delta_theta<5*pi/4)
  38.     decis=[1 1];
  39.   else
  40.     decis=[1 0];
  41.   end;
  42.   prev_theta=theta;
  43.   % Increase the error counter, if the decision is not correct.
  44.   if ((decis(1)~=dsource(2*i-1)) | (decis(2)~=dsource(2*i))),
  45.     numoferr=numoferr+1;
  46.   end;
  47. end;
  48. p=numoferr/N;