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