Переключение представления модели

В этом примере показано, как переключиться между передаточной функцией (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')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent G, G1.

Наблюдайте как полюс кратности 10 в z=1 в G заменяется кластером полюсов в G1. Это происходит потому что полюса G1 вычисляются как корни полинома

(z-1)10=z10-10z9+45z8-120z7+210z6-252z5+210z4-120z3+45z2-10z+1

и o(eps) ошибки на последнем коэффициенте этого полинома достаточно, чтобы переместить корни

o(ϵ1/10)=o(3×10-2).

Другими словами, представление передаточной функции не достаточно точно, чтобы получить поведение системы рядом z=1, который также отображается в Диаграмме Боде G по сравнению с G1:

bode(G,'b',G1,'r--'), grid
legend('G','G1')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent G, G1. Axes 2 contains 2 objects of type line. These objects represent G, G1.

Это иллюстрирует, почему необходимо избежать ненужных преобразований модели.