0% found this document useful (0 votes)
62 views5 pages

Matlab: All All Long

This MATLAB code simulates the bit error rate (BER) performance of different receiver diversity schemes (selection combining (SC), maximal ratio combining (MRC), and equal gain combining (EGC)) with varying numbers of receive antennas (1, 2, and 4) under different signal-to-noise ratio (SNR) levels. It generates BER vs SNR curves for each configuration and plots them on a single graph for comparison.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
62 views5 pages

Matlab: All All Long

This MATLAB code simulates the bit error rate (BER) performance of different receiver diversity schemes (selection combining (SC), maximal ratio combining (MRC), and equal gain combining (EGC)) with varying numbers of receive antennas (1, 2, and 4) under different signal-to-noise ratio (SNR) levels. It generates BER vs SNR curves for each configuration and plots them on a single graph for comparison.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 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