八度和多个波德图

时间:2011-03-28 20:16:04

标签: octave

我正在教自己Octave,并试图创造一些Bode情节作为一种激励练习。我想创建一个绘图,其中包含传递函数中参数的不同值的多条曲线,例如简单RC滤波器的时间常数。我试着这样做:

tau = [1,2,3]
for i = tau
    g(i) = tf(1,[tau(i),1])
endfor

bode(g(1),g(2),g(3))

但它不起作用,我收到错误

  

错误:octave_base_value :: imag():错误的类型参数`struct'

但是,如果bode命令没有多个参数,那么它可以正常工作,最后一行只是:

bode(g(1))

任何有关我出错的建议都会受到赞赏 - 有没有更好的方法来做我想做的事情?

2 个答案:

答案 0 :(得分:0)

我能够使用以下序列(在debian上使用octave 3.2.4):

bode(g(1))
set (findobj (gcf, "type", "axes"), "nextplot", "add")
bode(g(2))
bode(g(3))

第二个命令类似于hold on,但是当有子图时它会起作用;我找到了here

答案 1 :(得分:0)

使用您自己的代码:

subplot(211), hold on
subplot(212), hold on
tau = [1,2,3]
for i = 1:length(tau),
   g(i) = tf(1,[tau(i),1]);
   bode(g(i))
endfor

此解决方案的问题在于您无法识别特定的情节。您无法直接通过bode()函数访问图属性。

这是一个合理的解决方案,为您带来丰富多彩的情节:

colorsplot = ["b","m","g"]
tau = [1,2,3]
g = tf(1,[tau(1),1]);
[mag, ph, w] = bode(g);
subplot(211), semilogx(w,20*log(mag)), hold on
subplot(212), semilogx(w,ph), hold on
for i = 2:length(tau),
  g = tf(1,[tau(i),1]);
  [mag, ph, waux] = bode(g,w);
  subplot(211), semilogx(w,20*log(mag),colorsplot(i))
  subplot(212), semilogx(w,ph,colorsplot(i))
endfor