2011-03-28 44 views
0

我在自学八度和作为一个激励练习试图创建一些波德图。我想创建一个曲线,该曲线对于传递函数中的不同参数值具有多条曲线,例如简单RC滤波器的时间常数。我想如下做到这一点:八度和多个波德图

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

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

但它不工作,我得到的错误

error: octave_base_value::imag(): wrong type argument `struct'

但是,它工作正常,如果没有多个参数的命令兆头最后一行很简单:

bode(g(1)) 

任何意见,因为在那里我已经出了错,将不胜感激 - 有没有更好的办法做我想做的事?

+0

我想你的代码在Matlab和它工作得很好,所以我相信这是八度的问题。 – KnowledgeBone 2011-03-28 20:54:57

+0

啊,那很不幸。感谢您对我进行测试。 – Bitrex 2011-03-28 21:26:58

+0

如果有帮助,以下是使用旧版本(Octave 3.0.3)的输出:http://pastebin.com/25HA3YUW – 2011-03-28 22:54:12

回答

0

我可以用下面的序列(与八度3.2.4在Debian)做到这一点:

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

第二个命令是类似于hold on,但是当有次要情节它的工作原理;我发现它here

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