Оценка Моделей Непрерывного времени с помощью Данных Simulink

Этот пример иллюстрирует, как модели, симулированные в Simulink®, могут быть идентифицированы с помощью System Identification Toolbox™. Пример описывает, как иметь дело с системами непрерывного времени и задержками, а также важностью междемонстрационного поведения входа.

if exist('start_simulink','file')~=2
    disp('This example requires Simulink.')
    return
end

This example requires Simulink.

Получение данных моделирования из модели 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 первого порядка дает очень хорошее описание данных. Таким образом мы выберем эту модель как наш конечный результат.

Преобразование дискретной модели к непрерывному времени (LTI)

Преобразуйте эту модель в непрерывное время и представляйте его в форме передаточной функции:

mc = d2c(m4);
idtf(mc)

Хорошее описание системы было получено, как отображено выше.

Оценка модели непрерывного времени непосредственно

Непрерывная модель времени может также быть оценена непосредственно. Дискретная модель m4 имеет 2 демонстрационных входных задержки, которые представляют 1 вторую задержку. Мы используем ssest команда для этой оценки:

m5 = ssest(dat1e,1,'Feedthrough',false,'InputDelay',1);
present(m5)

Анализ неопределенности

Параметры модели m5 покажите высокий уровень неопределенности даже при том, что модель соответствует данным 87%. Это вызвано тем, что модель использует больше параметров, чем абсолютно необходимое продвижение к потере уникальности в оценках параметра. Чтобы просмотреть истинный эффект неопределенности в модели, существует два возможных подхода:

  1. Просмотрите неопределенность как доверительные границы на ответе модели, а не на параметрах.

  2. Оцените модель в канонической форме.

Позвольте использованию попробовать оба подхода. Сначала мы оцениваем модель в канонической форме.

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');