M = 2;                 
N = 1000000;   
Bits_ale = randi([0 M-1],1,N);
Bits_bpsk = 2 * Bits_ale-1;        
Bit_wat = randi([0 M-1],1,N);
Theta = pi/8; 
b = 1/sqrt(2)*(randn(1,N) + 1i*randn(1,N)); 
Eb_N0_dB = 0:20; 
for k = 1:N 
    
    if Bit_wat(k)==1
        
        Bit_enviado(k) = Bits_bpsk(k) * exp(1i * Bits_bpsk(k) * Theta);
        
    else
        
        Bit_enviado(k) = Bits_bpsk(k) * exp(-1i * Bits_bpsk(k) * Theta);
    
    end
    
end
for iter = 1:length(Eb_N0_dB)
  
    
   
    d = Bit_enviado + 10^(-Eb_N0_dB(iter)/20)*b; 
  
    
   
    ipHat = real(d)>0;
   
    
   
    nErr(iter) = size(find(Bits_ale- ipHat),2);
    
end
simBer = nErr/N; 
theoryBer = 0.5*erfc(sqrt(10.^(Eb_N0_dB/10))); 
close all
figure
semilogy(Eb_N0_dB,theoryBer,'b.-');
hold on
semilogy(Eb_N0_dB,simBer,'mx-');
axis([0 10 10^-5 1])
grid on
legend('theory', 'simulation');
xlabel('Eb/No, dB');
ylabel('Bit Error Rate');
title('Bit error probability curve for BPSK modulation');
hold on
grid on