Этот пример показывает, как переключиться между передаточной функцией (TF), нули и полюса (ZPK), пространство состояний (SS), и представлениями данных о частотной характеристике (FRD) систем LTI.
Можно преобразовать модели от одного представления до другого использования тех же команд, которые вы используете для построения моделей LTI (tf
, zpk
, ss
и frd
). Например, можно преобразовать модель в пространстве состояний:
sys = ss(-2,1,1,3);
к модели нулей и полюсов путем ввода:
zpksys = zpk(sys)
zpksys = 3 (s+2.333) ----------- (s+2) Continuous-time zero/pole/gain model.
Точно так же можно вычислить передаточную функцию sys
путем ввода:
tf(sys)
ans = 3 s + 7 ------- s + 2 Continuous-time transfer function.
Преобразования в FRD требуют вектора частоты:
f = logspace(-2,2,10); frdsys = frd(sys,f)
frdsys = Frequency(rad/s) Response ---------------- -------- 0.0100 3.5000 - 0.0025i 0.0278 3.4999 - 0.0070i 0.0774 3.4993 - 0.0193i 0.2154 3.4943 - 0.0532i 0.5995 3.4588 - 0.1375i 1.6681 3.2949 - 0.2459i 4.6416 3.0783 - 0.1817i 12.9155 3.0117 - 0.0756i 35.9381 3.0015 - 0.0277i 100.0000 3.0002 - 0.0100i Continuous-time frequency response.
Обратите внимание на то, что модели FRD не могут быть преобразованы назад в TF, ZPK или представления SS (такое преобразование требует идентификационных инструментов частотного диапазона, доступных в System Identification).
Все пути к преобразованию типа модели получены в итоге в схеме ниже.
Некоторые команды ожидают определенный тип модели LTI. Для удобства такие команды автоматически преобразовывают входящие модели LTI в соответствующее представление. Например, в примере кода:
sys = ss(0,1,1,0);
[num,den] = tfdata(sys,'v')
num = 1×2
0 1
den = 1×2
1 0
функциональный tfdata
автоматически преобразовывает модель в пространстве состояний sys
в эквивалентную передаточную функцию, чтобы получить ее числитель и данные о знаменателе.
Преобразования между TF, ZPK и представлениями SS включают численные расчеты и могут подвергнуться потере точности, когда злоупотребили. Поскольку SS и представления FRD подходят лучше всего для численных расчетов, это - хорошая практика, чтобы преобразовать все модели в SS или FRD и только использовать TF и представления ZPK в целях отображения или конструкции.
Например, преобразуйте модель ZPK
G = zpk([],ones(10,1),1,0.1)
G = 1 -------- (z-1)^10 Sample time: 0.1 seconds Discrete-time zero/pole/gain model.
к TF и затем обратно к ZPK:
G1 = zpk(tf(G));
Теперь сравните местоположения полюса для G
и G1
:
G1 = zpk(tf(G)); pzmap(G,'b',G1,'r') axis([0.5 1.5 -0.4 0.4]) legend('G','G1')
Наблюдайте, как полюс кратности 10 в z=1
в G
заменяется кластером полюсов в G1
. Это происходит, потому что полюса G1
вычисляются как корни полинома
и ошибки o(eps)
на последнем коэффициенте этого полинома достаточно, чтобы переместить корни
Другими словами, представление передаточной функции не достаточно точно, чтобы получить поведение системы рядом z=1, который также видим в Диаграмме Боде G
по сравнению с G1
:
bode(G,'b',G1,'r--'), grid legend('G','G1')
Это иллюстрирует, почему необходимо избежать ненужных образцовых преобразований.