Этот пример показывает, как переключаться между передаточной функцией (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 (для такого преобразования требуются инструменты идентификации частотной области, доступные в Систему идентификации).
Все пути преобразования типов модели суммированы в схеме ниже.
Некоторые команды ожидают определенного типа модели 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')
Это иллюстрирует, почему вы должны избегать ненужных преобразований модели.