Selective DF - BPSK - Rayleigh Fading

MATLAB PROGRAM

clc;

clear all;


N = 10^5; % number of symbols


ip0 = randi([0,1], 1,N); % random symbol generation

s = 2*ip0-1;  % BPSK mapping


snr_dB = 0:2:20;  % SNR in dB


h1= 1/sqrt(2)*(randn(1,N)+1i*randn(1,N)); % complex channel gain

h2= 1/sqrt(2)*(randn(1,N)+1i*randn(1,N)); % complex channel gain

h3= 1/sqrt(2)*(randn(1,N)+1i*randn(1,N)); % complex channel gain


n1 = 1/sqrt(2)*(randn(1,N)+1i*randn(1,N)); % AWGN

n2 = 1/sqrt(2)*(randn(1,N)+1i*randn(1,N)); % AWGN

n3 = 1/sqrt(2)*(randn(1,N)+1i*randn(1,N)); % AWGN


for ii = 1:length(snr_dB)  % iteration for each SNR 

  

  %% simulation  

  snr = 10^(snr_dB(ii)/10);  

  r_u1bs = sqrt(snr/2)*s.*h1 + n1; % received signal  

  r_u1u2 = sqrt(snr/2)*s.*h2 + n2; % received signal 

  r_u2bs = sqrt(snr/2)*s.*h3 + n3; % received signal 

  %

  r1 = conj(h1).*r_u1bs;  % compensation for fading (equalization)

  r2 = conj(h2).*r_u1u2;  % compensation for fading (equalization)

  r3 = conj(h1).*r_u1bs + conj(h3).*r_u2bs;  % compensation for fading (equalization)

  %

  s1_hat = real(r1)>0;       % decision making

  s2_hat = real(r2)>0;       % decision making

  s3_hat = real(r3)>0;       % decision making

  %

  n_err1 = size(find(s1_hat-ip0),2);   % number of errors for given SNR

  n_err2 = size(find(s2_hat-ip0),2);   % number of errors for given SNR

  n_err3 = size(find(s3_hat-ip0),2);   % number of errors for given SNR

  %

  err1 = n_err1/N;  % error for given SNR

  err2 = n_err2/N;  % error for given SNR

  err3 = n_err3/N;  % error for given SNR

  

  err_sim(ii) = err1*err2 +(1-err1)*err3;

  

  %% analytical

  Pe = 0.5*(1-sqrt(snr/2/(1+snr/2)));

  err_ana(ii) = Pe^2 + (1-Pe)*Pe^2*(3-2*Pe);

  

end



figure;

semilogy(snr_dB, err_sim,'--+k');

hold on; grid on;

semilogy(snr_dB, err_ana,'-ok');


xlabel('SNR (dB)');

ylabel('Error rate');

legend('simulation', 'analytical');

title('Selective DF - BPSK - Rayleigh Fading')


SIMULATED OUTPUT

DOWNLOAD LINK