You are on page 1of 5

MATLAB

clc;
clear all;
close all;
format long;
Pp = [0 -5 -10];
Rr = 0.7; % Rx antenna correlation
E_No = -20: 1: 35;

SNR_val = E_No + 10*log10(2);

for aa = 1: 1: length(E_No)

M=50000;
un_coded_bts = randint(1,M);
B_var = un_coded_bts(1:2:end);
B2 = un_coded_bts(2:2:end);
bpsk_sig =
((B_var==0).*(B2==0)*(exp(1i*pi/4))+(B_var==0).*(B2==1)...
*(exp(3*1i*pi/4))+(B_var==1).*(B2==1)*(exp(5*1i*pi/4))...
+(B_var==1).*(B2==0)*(exp(7*1i*pi/4)));
N=length(bpsk_sig);
h1=1/sqrt(2)*abs(randn(1,N)+1j*randn(1,N));
[H11,H21]=SUISIMOChannelModel2Rx (N,Pp,Rr);
[H11,H21,H31,H41]=SUISIMOChannelModel4Rx (N,Pp,Rr);
h2=[H11;H21];
h4=[H11;H21;H31;H41];
%*****************************
snr_sc_h1=h1;
for i=1:N
snr_sc_h2(i)=h2(1,i);
if h2(1,i)<h2(2,i)
snr_sc_h2(i)=h2(2,i);
end
end
for i=1:N
snr_sc_h4(i)=h4(1,i);
for j=1:3
if snr_sc_h4(i)<h4(j+1,i)
snr_sc_h4(i)=h4(j+1,i);
end
end
snr_sc_h4(i)=snr_sc_h4(i);
end
%% MRC h initial
snr_mrc_h1=h1;% One Rx Antenna Case
for i=1:N
snr_mrc_h2(i)=h2(1,i)^2+h2(2,i)^2; % 2 Antenna
snr_mrc_h4(i)=h4(1,i)^2+h4(2,i)^2+h4(3,i)^2+h4(4,i)^2;
end
snr_tc_h1=h1;
for i=1:N
snr_tc_h2(i)=h2(1,i)+h2(2,i);
snr_tc_h4(i)=h4(1,i)+h4(2,i)+h4(3,i)+h4(4,i);
end
ray_sc_h1=snr_sc_h1;
ray_sc_h2=snr_sc_h2;
ray_sc_h4=snr_sc_h4;
ray_mrc_h1=snr_mrc_h1;
ray_mrc_h2=snr_mrc_h2;
ray_mrc_h4=snr_mrc_h4;
ray_tc_h1=snr_tc_h1;
ray_tc_h2=snr_tc_h2;
ray_tc_h4=snr_tc_h4;
% Include The Multipath
sc_rx1 = bpsk_sig.*ray_sc_h1;
sc_rx2 = bpsk_sig.*ray_sc_h2;
sc_rx4 = bpsk_sig.*ray_sc_h4;
mrc_rx1 = bpsk_sig.*ray_mrc_h1;
mrc_rx2 = bpsk_sig.*ray_mrc_h2;
mrc_rx4 = bpsk_sig.*ray_mrc_h4;
tc_rx1 = bpsk_sig.*ray_tc_h1;
tc_rx2 = bpsk_sig.*ray_tc_h2;
tc_rx4 = bpsk_sig.*ray_tc_h4;
N0 = 1/10^(SNR_val(aa)/10);
sc_rx1 = sc_rx1 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)));
sc_rx2 = sc_rx2 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)));
sc_rx4 = sc_rx4 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)));
mrc_rx1 = mrc_rx1 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)));
mrc_rx2 = mrc_rx2 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig))).*h2(1,:)+...
sqrt(N0/2)*(randn(1,length(bpsk_sig))+...
1i*randn(1,length(bpsk_sig))).*h2(2,:);
mrc_rx4 = mrc_rx4 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig))).*h4(1,:)+...
sqrt(N0/2)*(randn(1,length(bpsk_sig))+...
1i*randn(1,length(bpsk_sig))).*h4(2,:)...
+sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig))).*h4(3,:)+...
sqrt(N0/2)*(randn(1,length(bpsk_sig))+...
1i*randn(1,length(bpsk_sig))).*h4(4,:);
tc_rx1 = tc_rx1 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)));
tc_rx2 = tc_rx2 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)))+...
sqrt(N0/2)*(randn(1,length(bpsk_sig))+...
1i*randn(1,length(bpsk_sig)));
tc_rx4 = tc_rx4 + sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)))+...
sqrt(N0/2)*(randn(1,length(bpsk_sig))+...
1i*randn(1,length(bpsk_sig)))...
+sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)))+...
sqrt(N0/2)*(randn(1,length(bpsk_sig))...
+1i*randn(1,length(bpsk_sig)));
%---------------------------------------------------------------

% Equaliser
sc_rx1 = sc_rx1./ray_sc_h1;
sc_rx2 = sc_rx2./ray_sc_h2;
sc_rx4 = sc_rx4./ray_sc_h4;
mrc_rx1 = mrc_rx1./ray_mrc_h1;
mrc_rx2 = mrc_rx2./ray_mrc_h2;
mrc_rx4 = mrc_rx4./ray_mrc_h4;
tc_rx1 = tc_rx1./ray_tc_h1;
tc_rx2 = tc_rx2./ray_tc_h2;
tc_rx4 = tc_rx4./ray_tc_h4;

sc_rx1_B4 = (real(sc_rx1)<0);
sc_rx1_B3 = (imag(sc_rx1)<0);
sc_rx2_B4 = (real(sc_rx2)<0);
sc_rx2_B3 = (imag(sc_rx2)<0);
sc_rx4_B4 = (real(sc_rx4)<0);
sc_rx4_B3 = (imag(sc_rx4)<0);

mrc_rx1_B4 = (real(mrc_rx1)<0);
mrc_rx1_B3 = (imag(mrc_rx1)<0);
mrc_rx2_B4 = (real(mrc_rx2)<0);
mrc_rx2_B3 = (imag(mrc_rx2)<0);
mrc_rx4_B4 = (real(mrc_rx4)<0);
mrc_rx4_B3 = (imag(mrc_rx4)<0);

tc_rx1_B4 = (real(tc_rx1)<0);
tc_rx1_B3 = (imag(tc_rx1)<0);
tc_rx2_B4 = (real(tc_rx2)<0);
tc_rx2_B3 = (imag(tc_rx2)<0);
tc_rx4_B4 = (real(tc_rx4)<0);
tc_rx4_B3 = (imag(tc_rx4)<0);

uncoded_bits_sc_rx1 = zeros(1,2*length(sc_rx1));
uncoded_bits_sc_rx1(1:2:end) = sc_rx1_B3;
uncoded_bits_sc_rx1(2:2:end) = sc_rx1_B4;
uncoded_bits_sc_rx2 = zeros(1,2*length(sc_rx1));
uncoded_bits_sc_rx2(1:2:end) = sc_rx2_B3;
uncoded_bits_sc_rx2(2:2:end) = sc_rx2_B4;
uncoded_bits_sc_rx4 = zeros(1,2*length(sc_rx1));
uncoded_bits_sc_rx4(1:2:end) = sc_rx4_B3;
uncoded_bits_sc_rx4(2:2:end) = sc_rx4_B4;

uncoded_bits_mrc_rx1 = zeros(1,2*length(sc_rx1));
uncoded_bits_mrc_rx1(1:2:end) = mrc_rx1_B3;
uncoded_bits_mrc_rx1(2:2:end) = mrc_rx1_B4;
uncoded_bits_mrc_rx2 = zeros(1,2*length(sc_rx1));
uncoded_bits_mrc_rx2(1:2:end) = mrc_rx2_B3;
uncoded_bits_mrc_rx2(2:2:end) = mrc_rx2_B4;
uncoded_bits_mrc_rx4 = zeros(1,2*length(sc_rx1));
uncoded_bits_mrc_rx4(1:2:end) = mrc_rx4_B3;
uncoded_bits_mrc_rx4(2:2:end) = mrc_rx4_B4;
uncoded_bits_tc_rx1 = zeros(1,2*length(sc_rx1));
uncoded_bits_tc_rx1(1:2:end) = tc_rx1_B3;
uncoded_bits_tc_rx1(2:2:end) = tc_rx1_B4;
uncoded_bits_tc_rx2 = zeros(1,2*length(sc_rx1));
uncoded_bits_tc_rx2(1:2:end) = tc_rx2_B3;
uncoded_bits_tc_rx2(2:2:end) = tc_rx2_B4;
uncoded_bits_tc_rx4 = zeros(1,2*length(sc_rx1));
uncoded_bits_tc_rx4(1:2:end) = tc_rx4_B3;
uncoded_bits_tc_rx4(2:2:end) = tc_rx4_B4;
diff_sc_rx1 = un_coded_bts - uncoded_bits_sc_rx1;
sc_r1_T_Errors = sum(abs(diff_sc_rx1));
diff_sc_rx2 = un_coded_bts - uncoded_bits_sc_rx2;
sc_r2_T_Errors = sum(abs(diff_sc_rx2));
diff_sc_rx4 = un_coded_bts - uncoded_bits_sc_rx4;
sc_r4_T_Errors = sum(abs(diff_sc_rx4));
diff_mrc_rx1 = un_coded_bts - uncoded_bits_mrc_rx1;
mrc_r1_T_Errors = sum(abs(diff_mrc_rx1));
diff_mrc_rx2 = un_coded_bts - uncoded_bits_mrc_rx2;
mrc_r2_T_Errors = sum(abs(diff_mrc_rx2));
diff_mrc_rx4 = un_coded_bts - uncoded_bits_mrc_rx4;
mrc_r4_T_Errors = sum(abs(diff_mrc_rx4));
diff_tc_rx1 = un_coded_bts - uncoded_bits_tc_rx1;
tc_r1_T_Errors = sum(abs(diff_tc_rx1));
diff_tc_rx2 = un_coded_bts - uncoded_bits_tc_rx2;
tc_r2_T_Errors = sum(abs(diff_tc_rx2));
diff_tc_rx4 = un_coded_bts - uncoded_bits_tc_rx4;
tc_r4_T_Errors = sum(abs(diff_tc_rx4));

%% Calculate Bit Error Rate


sc_r1_BER(aa) = sc_r1_T_Errors / M;
sc_r2_BER(aa) = sc_r2_T_Errors / M;
sc_r4_BER(aa) = sc_r4_T_Errors / M;
mrc_r1_BER(aa) = mrc_r1_T_Errors / M;
mrc_r2_BER(aa) = mrc_r2_T_Errors / M;
mrc_r4_BER(aa) = mrc_r4_T_Errors / M;
tc_r1_BER(aa) = tc_r1_T_Errors / M;
tc_r2_BER(aa) = tc_r2_T_Errors / M;
tc_r4_BER(aa) = tc_r4_T_Errors / M;
end

%% BER vs SNR
figure(1);
semilogy(E_No,sc_r1_BER,'-r*','LineWidth',2);
hold on;
xlabel('SNR (dB)');
ylabel('BER');
title('SNR Vs BER for RXs(1,2& 4)and using SC,MRC & tc Schemes ');
semilogy(E_No,sc_r2_BER,'-ro','LineWidth',2);
hold on;
semilogy(E_No,sc_r4_BER,'-rs','LineWidth',2);
hold on;
semilogy(E_No,mrc_r1_BER,'-b*','LineWidth',2);
hold on;
semilogy(E_No,mrc_r2_BER,'-bo','LineWidth',2);
hold on;
semilogy(E_No,mrc_r4_BER,'-bs','LineWidth',2);
hold on;
semilogy(E_No,tc_r1_BER,'-g*','LineWidth',2);
hold on;
semilogy(E_No,tc_r2_BER,'-go','LineWidth',2);
hold on;
semilogy(E_No,tc_r4_BER,'-gs','LineWidth',2);
legend('SC w.Rx1','SC w.Rx2','SC w.Rx4','MRC w.Rx1','MRC w.Rx2',...
'MRC w.Rx4','tc w.Rx1','tc w.Rx2','tc w.Rx4')
axis([E_No(1) 20 0.000001 1]);
hold off
grid on

You might also like