我正在教自己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))
任何有关我出错的建议都会受到赞赏 - 有没有更好的方法来做我想做的事情?
答案 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