Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear all;
- clc;
- SNR_dB = -5:4:30;
- SNR = 10.^(SNR_dB/10);
- NR = 2;
- BER_MRC = 1:length(SNR_dB);
- BER_EGC = BER_MRC;
- BER_SC = BER_MRC;
- bits = 10^5;
- signal_power = 4;
- random_bits = randi([0 1],1,bits);
- x = random_bits
- x(x == 0) = -sqrt(signal_power);
- x(x == 1) = sqrt(signal_power);
- % Calculate the BPSK representation of the message bits
- Nr = [1 , 2]
- % Compute BER for each value of SNR
- %% Maximal Ratio Combiner
- for i=1:2
- H = [randn(Nr(i),bits)+sqrt(-1)*randn(Nr(i),bits)];
- n = [randn(Nr(i),bits)+sqrt(-1)*randn(Nr(i),bits)];
- xkron=kron(ones(Nr(i),1),x);
- for j=1:length(SNR)
- noise_var = signal_power/SNR(j);
- sigma=sqrt(noise_var/2);
- y= H.*xkron+ sigma*n;
- y_n= sum(conj(H).*y,1)./sum(H.*conj(H),1);
- y_f= real(y_n) > 0;
- N_diff(i,j) = sum(random_bits ~= y_f);
- end
- end
- BER_MRC= N_diff(2,:)/bits;
- %% Equal Gain Combining
- for i=1:2
- H = [randn(Nr(i),bits)+sqrt(-1)*randn(Nr(i),bits)];
- n = [randn(Nr(i),bits)+sqrt(-1)*randn(Nr(i),bits)];
- xkron=kron(ones(Nr(i),1),x);
- for j=1:length(SNR)
- noise_var = signal_power/SNR(j);
- sigma=sqrt(noise_var/2);
- y= H.*xkron+ sigma*n;
- y_n= sum(exp(-1i*angle(H)).*y,1);
- y_f= real(y_n) > 0;
- N_diff(i,j) = sum(random_bits ~= y_f);
- end
- end
- BER_EGC= N_diff(2,:)/bits;
- %% Selection Combiner
- for i=1:2
- H = [randn(Nr(i),bits)+sqrt(-1)*randn(Nr(i),bits)];
- n = [randn(Nr(i),bits)+sqrt(-1)*randn(Nr(i),bits)];
- xkron=kron(ones(Nr(i),1),x);
- for j=1:length(SNR)
- noise_var = signal_power/SNR(j);
- sigma=sqrt(noise_var/2);
- y= H.*xkron+ sigma*n;
- inst_SNR = abs(H).^2;
- [max_SNR, indexes] = max(inst_SNR, [], 1);
- weights = zeros(size(H));
- for k = 1:length(indexes)
- weights(indexes(k), k) = 1;
- end
- y_n= sum(weights.*(y./H),1);
- y_f= real(y_n) > 0;
- N_diff(i,j) = sum(random_bits ~= y_f);
- end
- end
- BER_SC= N_diff(2,:)/bits;
- % Plot BER Vs SNR_dB.
- semilogy(SNR_dB,BER_MRC,'--');
- hold on;
- semilogy(SNR_dB,BER_EGC,'*-');
- hold on;
- semilogy(SNR_dB,BER_SC,'.-');
- hold on;
- grid on;
- xlabel('SNR (dB)');
- ylabel('Bit Error Rate');
- legend('MRC','EGC','SC');
- title('BER Vs SNR plot for SIMO with BPSK with MRC, EGC and SC under Rayleigh channel');
Advertisement
Add Comment
Please, Sign In to add comment