Октава и несколько участков Боде - PullRequest
0 голосов
/ 29 марта 2011

Я учу себя Октаве и в качестве мотивационного упражнения пытаюсь создать несколько сюжетов Боде. Я хотел бы создать график, который имеет несколько кривых для разных значений параметра в передаточной функции, например постоянная времени простого 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 голосов
/ 19 ноября 2012

Используя свой собственный код:

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
0 голосов
/ 29 марта 2011

Мне удалось сделать это в следующей последовательности (с октавой 3.2.4 на debian):

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

Вторая команда похожа на hold on, но работает при наличии делянок; Я нашел это здесь .

...