function [p]=ss_Pe94(snr_in_dB, Lc, A, w0)
% [p]=ss_Pe94(snr_in_dB, Lc, A, w0)
%		SS_PE94  finds the measured error rate. The function 
%   		that returns the measured probability of error for the given value of 
%   		the snr_in_dB, Lc, A and w0.
snr=10^(snr_in_dB/10);
sgma=1;		      			% noise standard deviation is fixed
Eb=2*sgma^2*snr;      			% signal level required to achieve the given 
		      			% signal to noise ratio
E_chip=Eb/Lc;	      			% energy per chip
N=10000;	      			% number of bits transmitted
% The generation of the data, noise, interference, decoding process and error
% counting is performed all together in order to decrease the run time of the 
% program. This is accomplished by avoiding very large sized vectors.
num_of_err=0;		
for i=1:N,
  % generate the next data bit
  temp=rand;	
  if (temp<0.5),
    data=-1;
  else
    data=1;
  end;
  % repeat it Lc times, i.e. divide it into chips
  for j=1:Lc,
    repeated_data(j)=data;
  end;
  % pn sequence for the duration of the bit is generated next
  for j=1:Lc,
    temp=rand;
    if (temp<0.5),
      pn_seq(j)=-1;
    else
      pn_seq(j)=1;
    end;
  end;
  % the transmitted signal is
  trans_sig=sqrt(E_chip)*repeated_data.*pn_seq;
  % AWGN with variance sgma^2
  noise=sgma*randn(1,Lc);
  % interference 
  n=(i-1)*Lc+1:i*Lc;
  interference=A*sin(w0*n);
  % received signal
  rec_sig=trans_sig+noise+interference;
  % determine the decision variable from the received signal
  temp=rec_sig.*pn_seq;
  decision_variable=sum(temp);
  % making decision
  if (decision_variable<0),
    decision=-1;
  else
    decision=1;
  end;
  % if it is an error, increment the error counter
  if (decision~=data),
    num_of_err=num_of_err+1;
  end;
end;
% then the measured error probability is
p=num_of_err/N;