Этот пример иллюстрирует, как модели, симулированные в Simulink®, могут быть идентифицированы с помощью System Identification Toolbox™. Пример описывает, как иметь дело с системами непрерывного времени и задержками, а также важностью междемонстрационного поведения входа.
if exist('start_simulink','file')~=2 disp('This example requires Simulink.') return end
This example requires Simulink.
Считайте систему описанной следующей моделью Simulink:
open_system('iddemsl1') set_param('iddemsl1/Random Number','seed','0')
Красная часть является системой, синяя часть является контроллером, и опорный сигнал является развернутой синусоидой (сигнал щебета). Шаг расчета данных установлен в 0,5 секунды.
Эта система может быть представлена с помощью idpoly
структура:
m0 = idpoly(1,0.1,1,1,[1 0.5],'Ts',0,'InputDelay',1,'NoiseVariance',0.01)
Давайте симулируем модель iddemsl1
и сохраните данные в iddata
объект:
sim('iddemsl1') dat1e = iddata(y,u,0.5); % The IDDATA object
Давайте сделаем вторую симуляцию режима в целях валидации.
set_param('iddemsl1/Random Number','seed','13') sim('iddemsl1') dat1v = iddata(y,u,0.5);
Давайте посмотрим на данные об оценке, полученные во время первой симуляции:
plot(dat1e)
Давайте начнем путем оценки порядка по умолчанию дискретная модель, чтобы получить некоторое предварительное понимание характеристик данных:
m1 = n4sid(dat1e, 'best') % A default order model
Проверяйте, как хорошо модель воспроизводит данные о валидации
compare(dat1v,m1)
Как наблюдается, данные о валидации предсказаны хорошо моделью. Чтобы заняться расследованиями больше в характеристики данных, давайте смотреть непараметрическую импульсную характеристику, вычисленную с помощью dat1e
где отрицательные задержки для анализа автоматически определяются:
ImpModel = impulseest(dat1e,[],'negative');
clf
h = impulseplot(ImpModel);
showConfidence(h,3)
ImpModel
модель FIR чей порядок (нет. из коэффициентов), автоматически определяются. Мы также принимаем решение анализировать эффекты обратной связи вычислительной импульсной характеристикой для отрицательных задержек. Влияния от отрицательных задержек не все незначительны. Это происходит из-за регулятора (выходная обратная связь). Это означает, что оценка импульсной характеристики не может использоваться, чтобы определить задержку. Вместо этого создайте несколько моделей ARX низкоуровневых с различными задержками и узнайте лучшую подгонку:
V = arxstruc(dat1e,dat1v,struc(1:2,1:2,1:10));
nn = selstruc(V,0) %delay is the third element of nn
Задержка определяется к 3 задержкам. (Это правильно: deadtime 1 секунды дает две задержки задержки и ZOH-блок другой.) Соответствующая модель ARX может также быть вычислена, можно следующим образом:
m2 = arx(dat1e,nn) compare(dat1v,m1,m2);
Эти две модели m1
и m2
ведите себя так же в симуляции. Давайте теперь попытаемся подстроить порядки и задержки. Зафиксируйте задержку с 2 (который вместе с отсутствием сквозного соединения дает сетевую задержку 3 выборок), и найдите модель в пространстве состояний порядка по умолчанию с той задержкой:
m3 = n4sid(dat1e,'best','InputDelay',2,'Feedthrough',false); % Refinement for prediction error minimization using pem (could also use % |ssest|) m3 = pem(dat1e, m3);
Позвольте как взгляд на предполагаемую системную матрицу
m3.a % the A-matrix of the resulting model
Третья динамика порядка автоматически выбрана, который вместе с 2 "дополнительными" задержками дает 5-ю модель в пространстве состояний порядка.
Всегда желательно не вслепую положиться на автоматический выбор порядка. Они под влиянием случайных ошибок. Хороший путь состоит в том, чтобы посмотреть на нули и полюса модели, наряду с областями доверия:
clf
h = iopzplot(m3);
showConfidence(h,2) % Confidence region corresponding to 2 standard deviations
Очевидно эти два полюса/нуля в модульном кругу, кажется, отменяют, указывая, что динамика первого порядка может быть достаточной. Используя эту информацию, давайте сделаем новую оценку первого порядка:
m4 = ssest(dat1e,1,'Feedthrough',false,'InputDelay',2,'Ts',dat1e.Ts); compare(dat1v,m4,m3,m1)
compare
постройте показывает что простая модель m4
первого порядка дает очень хорошее описание данных. Таким образом мы выберем эту модель как наш конечный результат.
Преобразуйте эту модель в непрерывное время и представляйте его в форме передаточной функции:
mc = d2c(m4); idtf(mc)
Хорошее описание системы было получено, как отображено выше.
Непрерывная модель времени может также быть оценена непосредственно. Дискретная модель m4
имеет 2 демонстрационных входных задержки, которые представляют 1 вторую задержку. Мы используем ssest
команда для этой оценки:
m5 = ssest(dat1e,1,'Feedthrough',false,'InputDelay',1); present(m5)
Параметры модели m5
покажите высокий уровень неопределенности даже при том, что модель соответствует данным 87%. Это вызвано тем, что модель использует больше параметров, чем абсолютно необходимое продвижение к потере уникальности в оценках параметра. Чтобы просмотреть истинный эффект неопределенности в модели, существует два возможных подхода:
Просмотрите неопределенность как доверительные границы на ответе модели, а не на параметрах.
Оцените модель в канонической форме.
Позвольте использованию попробовать оба подхода. Сначала мы оцениваем модель в канонической форме.
m5Canon = ssest(dat1e,1,'Feedthrough',false,'InputDelay',1,'Form','canonical'); present(m5Canon)
m5Canon
использует каноническую параметризацию модели. Это соответствует данным об оценке, столь же хорошим как модель m5
. Это показывает маленькую неопределенность в значениях его параметров, дающих свидетельские показания его надежности. Однако, когда мы видели m5
, большая неопределенность не обязательно означает "плохую" модель. Чтобы установить качество этих моделей, позвольте использованию просмотреть их ответы во временном и частотном диапазонах с областями доверия, соответствующими 3 стандартным отклонениям. Мы также строим исходную систему m0
для сравнения.
Диаграмма Боде.
clf opt = bodeoptions; opt.FreqScale = 'linear'; h = bodeplot(m0,m5,m5Canon,opt); showConfidence(h,3) legend show
График шага.
clf
showConfidence(stepplot(m0,m5,m5Canon),3)
legend show
Границы неопределенности для этих двух моделей фактически идентичны. Мы можем так же сгенерировать нулевую полюсом карту (iopzplot
) и годограф Найквиста (nyquistplot
) с областями доверия для этих моделей.
idtf(m5)
Когда сравнение непрерывных моделей времени вычислило из выборочных данных, важно рассмотреть междемонстрационное поведение входного сигнала. В примере до сих пор, вход к системе был кусочной константой, из-за "Нулевого порядка Содержат" (zoh) схему в контроллере. Теперь демонтируйте эту схему и рассмотрите действительно непрерывную систему. Сигналы ввода и вывода все еще производятся 2 Гц, и все остальное - то же самое:
open_system('iddemsl3') sim('iddemsl3') dat2e = iddata(y,u,0.5);
Модели дискретного времени все еще преуспеют на этих данных, с тех пор когда они будут настроены к измерениям, они включат свойства выборки и междемонстрационное входное поведение (для текущего входа). Однако, когда создавание непрерывных моделей времени, знание междемонстрационных свойств важны. Сначала создайте модель так же, как для случая ZOH:
m6 = ssest(dat2e,1,'Feedthrough',false,'InputDelay',1,'Form','canonical'); idtf(m6)
Давайте сравним предполагаемую модель (m6
) против истинной модели (m0
):
step(m6,m0) % Compare with true system
Соглашение теперь не так хорошо. Мы можем, однако, включать в информацию об объекте данных о входе. Как приближение, позвольте ему быть описанным как кусочные линейный (Задержка первого порядка, FOH) между моментами выборки. Эта информация затем используется средством оценки для соответствующей выборки:
dat2e.Intersample = 'foh'; m7 = ssest(dat2e,1,'Feedthrough',false,'InputDelay',1,'Form','canonical'); % new estimation with correct intersample behavior idtf(m7)
Давайте посмотрим на сравнение переходного процесса снова:
step(m7,m0) % Compare with true system
Эта модель (m7
) дает намного лучший результат, чем m6
. Это завершает этот пример.
bdclose('iddemsl1'); bdclose('iddemsl3');