Этот пример показывает, что высокократные полюсы имеют высокую числовую чувствительность и могут смещаться на значительные величины при переключении представления модели.
Поляки с высокой кратностью и кластеры близлежащих полюсов могут быть очень чувствительны к ошибкам округления, что иногда может иметь драматические последствия. Этот пример использует модель пространства состояний 15-го порядка в дискретном времени Hss
с кластером стабильных полюсов около z=1
:
load numdemo Hss
Преобразуйте модель в передаточную функцию с помощью tf
:
Htf = tf(Hss);
Сравнение переходных характеристик Hss
и Htf
чтобы увидеть, как чувствительность полюса может повлиять на стабильность модели и вызвать большие изменения в вычисленных временных и частотных характеристиках:
step(Hss,'b',Htf,'r',20) legend('Hss','Htf')
Область переходной характеристики Htf
расходится, хотя модель пространства состояний Hss
стабильен (все его полюса лежат в модуль круге). Диаграмма Боде также показывает большое расхождение между моделями пространства состояний и передаточной функции:
bode(Hss,'b',Htf,'r--') legend('Hss','Htf')
Алгоритм, используемый для преобразования из пространства состояний в передаточную функцию, не вызывает этого расхождения. Если вы преобразовываете из пространства состояний в нули , полюса и усиления, первый шаг в любом преобразовании SS в TF, расхождения исчезают:
Hzpk = zpk(Hss); step(Hss,'b',Hzpk,'r--') legend('Hss','Hzpk')
bode(Hss,'b',Hzpk,'r--')
Этот анализ показывает, что расхождения возникают в преобразовании ZPK в TF, которое просто включает вычисление полинома из его корней.
Чтобы понять причину этих больших расхождений, сравните карты полюса/нуля модели пространства состояний и ее передаточную функцию:
pzplot(Hss,'b',Htf,'r') legend('Hss','Htf')
Обратите внимание на плотно упакованную кластер полюсов около z = 1 в Hss
. Когда эти полюса рекомбинированы в знаменатель передаточной функции, ошибки округления возмущают кластер полюсов в равномерно распределенное звонок полюсов вокруг z = 1 (типичный шаблон для возмущенных нескольких корней). К сожалению, некоторые возмущенные полюсы пересекают модуль круг и делают передаточную функцию нестабильной. Увеличьте изображение графика, чтобы увидеть эти полюса:
pzplot(Hss,'b',Htf,'r'); axis([0.5 1.5 -.4 .4])
Подтвердить это объяснение можно простым экспериментом. Создайте полином, корни которого являются полюсами R1
от Hss
, вычислите корни этого полинома и сравните эти корни с R1
:
R1 = pole(Hss); % poles of Hss Den = poly(R1); % polynomial with roots R1 R2 = roots(Den); % roots of this polynomial plot(real(R1),imag(R1),'bx',real(R2),imag(R2),'r*') legend('R1','roots(poly(R1))');
Этот график показывает, что ROOTS(POLY(R1))
довольно отличается от R1
из-за кластеризованных корней. В результате корни знаменателя передаточной функции значительно отличаются от полюсов исходной модели пространства состояний Hss
.
В заключение, вы должны избегать преобразования моделей пространства состояний или нулей , полюса и усиления в форму передаточной функции, потому что этот процесс может привести к значительной потере точности.