Проблема, вызывающая вашу ошибку, заключается в том, что semilogy
(например, plot
) ожидает ввод данных в форме semilogy(X1,Y1,'b',X2,Y2,'r')
, если вы хотите построить более одной линии одновременно.Итак, ваш semilogy
должен быть semilogy(z,pe1,'b',m,pe2,'r')
.Вам также нужны z
и m
в вызове semilogy
, чтобы получить правильную шкалу оси X.
У вас есть несколько других проблем.Я не сделал так, чтобы я выглядел точно так же, как я, потому что я хотел, чтобы ваш код был узнаваемым для вас.Но вы можете сравнить свой код построчно со следующим.Одна вещь, которую я сделал, что, вероятно, неправильно, это изменение r
на его отрицательное значение, так как в противном случае y
слишком велико (поэтому pe1
и pe2
были равны нулю, через erfc
).
Ваш код уже был векторизован, поэтому я избавился от циклов for.Обратите внимание, что у вас не будет n=n+1
в цикле for n=
;увеличивается автоматически.
clc;
clear;
n=0:45;
q=55;
w=42;
r=228.6;
y=n+34+w-q-r;
b=36;
o=0.2;
x=b/(1+o); % RB for Bpsk
k=2*b/(1+o); % Rb for Qpsk
z=y-x; % Eb/No for Bpsk
m=y-k; % Eb/No for Qpsk
g=10.^(0.1*z);
pe1=0.5*erfc(sqrt(g));
s=10.^(0.1*m);
pe2=0.5*erfc(sqrt(s));
semilogy(z,pe1,'b',m,pe2,'r');
xlabel('energy per bit per noise power spectral density (Eb/No) (dB) ');
ylabel('Bit error rate (Pe)');
legend('Bpsk','Qpsk');
grid;