Octave 倍频程和多波德图

Octave 倍频程和多波德图,octave,Octave,我在自学八度音阶,作为一种激励练习,我试图创造一些波特情节。我想创建一个具有多条曲线的图,用于传递函数中参数的不同值,例如简单RC滤波器的时间常数。我试着做如下: tau = [1,2,3] for i = tau g(i) = tf(1,[tau(i),1]) endfor bode(g(1),g(2),g(3)) 但它不起作用,我得到了错误 错误:倍频程\u基\u值::imag:错误的类型参数'struct' 但是,如果bode命令没有多个参数,并且最后一行是: bode(g(1

我在自学八度音阶,作为一种激励练习,我试图创造一些波特情节。我想创建一个具有多条曲线的图,用于传递函数中参数的不同值,例如简单RC滤波器的时间常数。我试着做如下:

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

bode(g(1),g(2),g(3))
但它不起作用,我得到了错误

错误:倍频程\u基\u值::imag:错误的类型参数'struct'

但是,如果bode命令没有多个参数,并且最后一行是:

bode(g(1))

如果您能告诉我哪里出了问题,我们将不胜感激-有没有更好的方法来做我想做的事情?

我可以用debian上的octave 3.2.4按照以下顺序来做:

bode(g(1))
set (findobj (gcf, "type", "axes"), "nextplot", "add")
bode(g(2))
bode(g(3))
第二个命令类似于hold-on,但在有子地块时有效;我找到了。

使用您自己的代码:

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

我在Matlab中试过你的代码,效果很好,所以我相信这是八度音阶的问题。啊,这很不幸。感谢您为我测试。如果有帮助的话,这里有一个使用旧版本Octave 3.0.3的输出:需要注意的几件事-虽然它确实添加了绘图线,但并没有向图例添加新项目。在图形窗口未关闭时也会持续,这对于手动测试很好,如果您可以自己跟踪绘图的话。