Matlab - преобразование усиления нулевого полюса в передаточную функцию (zp2tf) не работает должным образом - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу преобразовать передаточную функцию в усиление нулевого полюса, а затем обратно в форму передаточной функции.

tf -> tf2zp -> zp2tf -> tf

Как я понимаю, вывод zp2tf должен возвращать исходную передаточную функцию. Однако я не могу заставить это работать.


У меня есть передаточная функция 5-го порядка вида:

enter image description here

Я приступил к поиску нулей и полюсов для этой передаточной функции, чтобы увидеть, какой полюс можно удалить, чтобы уменьшить порядок. Поскольку эта модель состоит из электрической и механической частей, постоянная времени для электрической части очень мала по сравнению с механическими постоянными времени, и поэтому мы можем заменить электрическую систему усилением и получить эквивалентную систему 4-го порядка ,

Для этого я использовал этот фрагмент кода, доступный на MathWorks , с TF 5-го порядка выше:

b = [0.0001 10];
a = [0.005 5.00010060 0.661600001 61.01102010 2.1101 10];
fvtool(b,a,'polezero')
[b,a] = eqtflength(b,a);
[z,p,k] = tf2zp(b,a) 

Вывод был следующим, что я и ожидал:

z = -100000

k = 0.02

enter image description here

и эквивалентная PZ-карта:

enter image description here

Приведенные выше результаты показывают полюс, связанный с электрической цепью, который находится далеко слева. Это можно убрать, уменьшив тем самым порядок передаточной функции с 5-го по 4-й.

Чтобы уменьшить заказ, я попытался удалить

Моя проблема в том, что я не могу преобразовать форму с нулевого полюса в форму tf, используя zp2tf ( официальные документы здесь ).

Я проследовал за документами и ввел значения p, z и k:

z = [-100000]';
p = roots([0.005 5.00010060 0.661600001 61.01102010 2.1101 10]);
k = 0.0200;
[b,a] = zp2tf(z,p,k)

Я ожидал увидеть свой исходный числитель и знаменатель, однако значения совершенно разные:

enter image description here

Почему я не получаю полюсы и нули, с которых я начал в исходной функции передачи?

1 Ответ

0 голосов
/ 07 ноября 2018

Вы на самом деле получаете ту же функцию передачи. Просто числитель и знаменатель умножаются на коэффициент 200. Возьмите 200 как общее число в числителе и знаменателе, и вы увидите ту же передаточную функцию, с которой вы начали.

>> [bnew,anew] = zp2tf(z,p,k)
bnew =
   1.0e+03 *
    0.0000    2.0000         0         0         0         0

anew =
   1.0e+04 *
    0.0001    0.1000    0.0132    1.2202    0.0422    0.2000

>> bnew/200
ans =
    0.0001   10.0000         0         0         0         0

>> anew/200
ans =
    0.0050    5.0001    0.6616   61.0110    2.1101   10.0000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...