matlab中的for循环出错

时间:2011-05-19 06:53:47

标签: matlab

我尝试从for循环中绘图并且我成功(在小程序中)但是当我尝试使用更大的程序时,我收到以下错误: “{Error using ==> semilogy没有足够的输入参数。 ==>中的错误test6 at 27     semilogy(PE1, 'B',PE2, 'R');} 我不知道为什么 我希望有人可以看看并帮助我

我的代码是

clc;
clear;
for n=0:45;

    n=n+1;
   q=55;
    w=42;
    r=-228.6;
    y(n+1)=n+34+w-q-r;
end 

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=0; 
s=0;  
pe1= zeros(1, 47);
pe2= zeros(1, 47);

for i=0:45; 
    g=10.^(0.1*z);
    pe1=0.5*erfc(sqrt(g));
    s=10.^(0.1*m);
    pe2=0.5*erfc(sqrt(s));
end

semilogy(pe1,'b',pe2,'r');
xlabel('energy per bit per noise power spectral density (Eb/No) (dB) ');
ylabel('Bit error rate (Pe)');
legend('Bpsk','Qpsk');
grid;

1 个答案:

答案 0 :(得分:3)

导致错误的问题是semilogy(如plot)期望输入格式semilogy(X1,Y1,'b',X2,Y2,'r'),如果您想同时绘制多行。因此,您的semilogy应为semilogy(z,pe1,'b',m,pe2,'r')。您还需要z调用中的msemilogy来获得正确的x轴刻度。

您还有其他一些问题。我没有让它看起来像我做的那样,因为我希望你的代码可以识别。但您可能希望逐行比较您的代码。我做过的一件事可能是错误的是将r更改为否定,因为否则y从远到大(所以pe1pe2为零,通过{{ 1}})。

你的代码已经被矢量化了,所以我摆脱了for循环。请注意,erfc循环中没有n=n+1;它会自动递增。

for n=