MATLAB Answers

Please help this semilogy error message

2 views (last 30 days)
Seahawkgo
Seahawkgo on 20 Nov 2020
Commented: VBBV on 20 Nov 2020
Please help to fix this problem. I try to plot as semilogy the MRC in Rayleigh fading and BPSK scheme. This needs to display in the same figure the simBer1 in M_Rx=1, 2, 3 with M_Rx=1 in 0:2:12; M_Rx2=0:2:14; M_Rx=3 in 0:2:16
ip = rand(1,N)>0.5; % generating 0,1 with equal probability
s = 2*ip-1; % 0 -> -1; 1 -> 0 >> BPSK modulation
nRx_max = 3; %number of M branches
M_Rx = [1:nRx_max];
EbN0dB1 = [0:2:12]; EbN0dB2 = [0:2:14]; EbN0dB3 = [0:2:16];
%%%%% EGC %%%%%%%%%%%
for jj = 1:length(M_Rx)
%%%Common values
for k = 1:length(EbN0dB1)
n = 1/sqrt(2)*[randn(M_Rx(jj),N) + j*randn(M_Rx(jj),N)]; % White gaussian noise, 0dB variance
h = 1/sqrt(2)*[randn(M_Rx(jj),N) + j*randn(M_Rx(jj),N)]; % Rayleigh fading channel
% Channel and noise Noise addition
sD = kron(ones(M_Rx(jj),1),s);
%%% In different values of dBN0dB
y1 = h.*sD + 10^(-EbN0dB1(k)/20)*n; %%%%% EbN0dB1 = [0:2:14] %%%%%%%%%%%
% equalization with EGC
y1Hat = y1.*exp(-j*angle(h)); % removing the phase of the channel
y1Hat = sum(y1Hat,1); % adding values from all the receive chains
% receiver Rx
ip1Hat = real(y1Hat)>0;
% numbers the errors
nErr1(jj,k) = size(find([ip- ip1Hat]),2);
end
end
%theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin1).^(-0.5));
%theoryBer_nRx2 = 0.5*(1 - sqrt(EbN0Lin1.*(EbN0Lin1+2))./(EbN0Lin1+1) );
simBer1 = nErr1/N; % simulated ber
EbN0Lin1 = 10.^(EbN0dB1/10); %EbN0 linear
close all
figure(1)
semilogy(EbN0dB1,simBer1(1,:),'mo-','LineWidth',1);hold on;
semilogy(EbN0dB2,simBer1(2,:),'kp-','LineWidth',1);
semilogy(EbN0dB3,simBer1(3,:),'gs-','LineWidth',1);
grid on
legend('M=1', 'M=2', 'M=3');
xlabel('Eb/No, dB');
ylabel('Bit Error Rate');
title('BER for BPSK modulation with Equal Gain Combining in Rayleigh channel');
axis([0 20 10^-6 2])
Error using semilogy
Vectors must be the same length.
Error in MRC_bpsk.m (line 41)
semilogy(EbN0dB2,simBer1(2,:),'kp-','LineWidth',1);
>>

  0 Comments

Sign in to comment.

Accepted Answer

VBBV
VBBV on 20 Nov 2020
Edited: VBBV on 20 Nov 2020
N = 100
ip = rand(1,N)>0.5; % generating 0,1 with equal probability
s = 2*ip-1; % 0 -> -1; 1 -> 0 >> BPSK modulation
nRx_max = 3; %number of M branches
M_Rx = [1:nRx_max];
%EbN0dB1 = [0:2:12]; EbN0dB2 = [0:2:14]; EbN0dB3 = [0:2:16];
EbN0dB = 0:2:16;
%%%%% EGC %%%%%%%%%%%
for jj = 1:length(M_Rx)
%%%Common values
for k = 1:length(EbN0dB)
n = 1/sqrt(2)*[randn(M_Rx(jj),N) + j*randn(M_Rx(jj),N)]; % White gaussian noise, 0dB variance
h = 1/sqrt(2)*[randn(M_Rx(jj),N) + j*randn(M_Rx(jj),N)]; % Rayleigh fading channel
% Channel and noise Noise addition
sD = kron(ones(M_Rx(jj),1),s);
%%% In different values of dBN0dB
y1 = h.*sD + 10^(-EbN0dB(k)/20)*n; %%%%% EbN0dB1 = [0:2:14] %%%%%%%%%%% % equalization with EGC
y1Hat = y1.*exp(-j*angle(h)); % removing the phase of the channel
y1Hat = sum(y1Hat,1); % adding values from all the receive chains
% receiver Rx
ip1Hat = real(y1Hat)>0;
% numbers the errors
nErr1(jj,k) = size(find([ip- ip1Hat]),2);
end
end
%theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin1).^(-0.5));
%theoryBer_nRx2 = 0.5*(1 - sqrt(EbN0Lin1.*(EbN0Lin1+2))./(EbN0Lin1+1) );
simBer1 = nErr1/N; % simulated ber
EbN0Lin1 = 10.^(EbN0dB/10); %EbN0 linear
close all
figure(1)
semilogy(EbN0dB(1:end-2),simBer1(1,1:end-2),'mo-','LineWidth',1);hold on;
semilogy(EbN0dB(1:end-1),simBer1(2,1:end-1),'kp-','LineWidth',1);hold on;
semilogy(EbN0dB,simBer1(3,:),'gs-','LineWidth',1);
grid on
legend('M=1', 'M=2', 'M=3');
xlabel('Eb/No, dB');
ylabel('Bit Error Rate');
title('BER for BPSK modulation with Equal Gain Combining in Rayleigh channel');
axis([0 20 10^-6 2])
Since you are creating vectors EbN0dB1 ...3, incrementally, with steps of 2, you can create one vector and access those parts individually,
Try the above

  4 Comments

Show 1 older comment
Seahawkgo
Seahawkgo on 20 Nov 2020
Hi Vasishta,
My bad. It works well. Thanks
Wooo
Seahawkgo
Seahawkgo on 20 Nov 2020
Vasishta,
Could you please explain if I want EbN0dB1 = [0:2:14]; EbN0dB2 = [0:2:20]; EbN0dB3 = [0:2:24];?
Thanks Seahawkgo
VBBV
VBBV on 20 Nov 2020
EbN0dB = 0:2:24; % Again create a common vector with max value (24 in EbN0dB3)
>> EbN0dB =
0 2 4 6 8 10 12 14 16 18 20 22 24
EbN0dB(1:end-2); % since 20 is 2nd before last element
>> ans =
0 2 4 6 8 10 12 14 16 18 20
>> EbN0dB(1:end-5) % since 14 is 5th before last element
ans =
0 2 4 6 8 10 12 14

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!