Этот пример показывает, как управлять объектами данных и объектами модели, доступными в System Identification Toolbox™. Система идентификации о создавании моделей от данных. Набор данных характеризуется несколькими данными: сигналы ввода и вывода, шаг расчета, имена переменных и модули, и т.д. Точно так же предполагаемые модели содержат информацию различных видов - оцененные параметры, их ковариационные матрицы, образцовая структура и так далее.
Это означает, что подходит и желательно группировать релевантную информацию вокруг данных и моделей в объекты. System Identification Toolbox™ содержит много таких объектов, и основные характеристики их описаны в этом примере.
Сначала создайте некоторые данные:
u = sign(randn(200,2)); % 2 inputs y = randn(200,1); % 1 output ts = 0.1; % The sample time
Чтобы собрать вход и вывод в одном объекте делают
z = iddata(y,u,ts);
Информация о данных отображена, только введя ее имя:
z
z = Time domain data set with 200 samples. Sample time: 0.1 seconds Outputs Unit (if specified) y1 Inputs Unit (if specified) u1 u2
Данные отображены на графике как iddata командой plot
, как в plot(z)
. Нажмите клавишу, чтобы продолжиться и совершенствоваться между подграфиками. Здесь, мы строим каналы отдельно:
plot(z(:,1,1)) % Data subset with Input 1 and Output 1.
plot(z(:,1,2)) % Data subset with Input 2 and Output 1.
Чтобы получить выходные параметры и входные параметры, использовать
u = z.u; % or, equivalently u = get(z,'u'); y = z.y; % or, equivalently y = get(z,'y');
Выбрать фрагмент данных:
zp = z(48:79);
Выбрать первый вывод и второй вход:
zs = z(:,1,2); % The ':' refers to all the data time points.
Подвыборы могут быть объединены:
plot(z(45:54,1,2)) % samples 45 to 54 of response from second input to the first output.
Каналам дают имена по умолчанию 'y1', 'u2' и т.д. Это может быть изменено на любые значения
set(z,'InputName',{'Voltage';'Current'},'OutputName','Speed');
Эквивалентно мы могли записать
z.inputn = {'Voltage';'Current'}; % Autofill is used for properties z.outputn = 'Speed'; % Upper and lower cases are also ignored
Для бухгалтерии и графиков, также могут быть установлены модули:
z.InputUnit = {'Volt';'Ampere'}; z.OutputUnit = 'm/s'; z
z = Time domain data set with 200 samples. Sample time: 0.1 seconds Outputs Unit (if specified) Speed m/s Inputs Unit (if specified) Voltage Volt Current Ampere
Все текущие свойства (что касается любого объекта) получены, доберитесь:
get(z)
ans = struct with fields: Domain: 'Time' Name: '' OutputData: [200x1 double] y: 'Same as OutputData' OutputName: {'Speed'} OutputUnit: {'m/s'} InputData: [200x2 double] u: 'Same as InputData' InputName: {2x1 cell} InputUnit: {2x1 cell} Period: [2x1 double] InterSample: {2x1 cell} Ts: 0.1000 Tstart: [] SamplingInstants: [200x0 double] TimeUnit: 'seconds' ExperimentName: 'Exp1' Notes: {} UserData: []
В дополнение к свойствам, обсужденным до сих пор, у нас есть 'Период', который обозначает период входа, если периодический Период = inf означает апериодический вход:
z.Period
ans = Inf Inf
Междемонстрационное поведение входа может быть дано как 'zoh' ("нулевой порядок, содержат", т.е. кусочная константа) или 'foh' (сначала - содержат порядок, т.е. кусочный линейный). Идентификационные стандартные программы используют эту информацию, чтобы настроить алгоритмы.
z.InterSample
ans = 2x1 cell array {'zoh'} {'zoh'}
Можно добавить каналы (оба ввода и вывода) "горизонтальной конкатенацией", т.е. z = [z1 z2]:
z2 = iddata(rand(200,1),ones(200,1),0.1,'OutputName','New Output',... 'InputName','New Input'); z3 = [z,z2]
z3 = Time domain data set with 200 samples. Sample time: 0.1 seconds Outputs Unit (if specified) Speed m/s New Output Inputs Unit (if specified) Voltage Volt Current Ampere New Input
Давайте построим некоторые каналы z3
:
plot(z3(:,1,1)) % Data subset with Input 2 and Output 1.
plot(z3(:,2,3)) % Data subset with Input 2 and Output 3.
Генерация входных параметров
Команда idinput
генерирует типичные входные сигналы.
u = idinput([30 1 10],'sine'); % 10 periods of 30 samples u = iddata([],u,1,'Period',30) % Making the input an IDDATA object.
u = Time domain data set with 300 samples. Sample time: 1 seconds Inputs Unit (if specified) u1
SIM применился к входу iddata, поставляет iddata вывод. Давайте использовать sim
, чтобы получить ответ предполагаемой модели m
с помощью входа u
. Мы также добавляем шум в образцовый ответ в соответствии с шумовой динамикой модели. Мы делаем это при помощи опции симуляции "AddNoise":
m = idpoly([1 -1.5 0.7],[0 1 0.5]); % This creates a model; see below. options = simOptions; options.AddNoise = true; y = sim(m,u,options) % simulated response produced as an iddata object
y = Time domain data set with 300 samples. Sample time: 1 seconds Outputs Unit (if specified) y1
Вход u
симуляции и вывод y
могут быть объединены в один объект iddata
можно следующим образом:
z5 = [y u] % The output-input iddata.
z5 = Time domain data set with 300 samples. Sample time: 1 seconds Outputs Unit (if specified) y1 Inputs Unit (if specified) u1
Больше о iddata
объект найден под help iddata
.
Все модели поставляются, когда MATLAB® возражает. Существует несколько различных объектов в зависимости от типа используемой модели, но это в основном прозрачно.
load iddata1 m = armax(z1,[2 2 2 1]); % This creates an ARMAX model, delivered as an IDPOLY object
Все соответствующие свойства этой модели группированы как один объект (здесь, idpoly
). Чтобы отобразить его только вводят его имя:
m
m = Discrete-time ARMAX model: A(z)y(t) = B(z)u(t) + C(z)e(t) A(z) = 1 - 1.531 z^-1 + 0.7293 z^-2 B(z) = 0.943 z^-1 + 0.5224 z^-2 C(z) = 1 - 1.059 z^-1 + 0.1968 z^-2 Sample time: 0.1 seconds Parameterization: Polynomial orders: na=2 nb=2 nc=2 nk=1 Number of free coefficients: 6 Use "polydata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using ARMAX on time domain data "z1". Fit to estimation data: 76.38% (prediction focus) FPE: 1.127, MSE: 1.082
Many of the model properties are directly accessible
m.a % The A-polynomial
ans = 1.0000 -1.5312 0.7293
Список свойств получен, доберитесь:
get(m)
A: [1 -1.5312 0.7293] B: [0 0.9430 0.5224] C: [1 -1.0587 0.1968] D: 1 F: 1 IntegrateNoise: 0 Variable: 'z^-1' IODelay: 0 Structure: [1x1 pmodel.polynomial] NoiseVariance: 1.1045 Report: [1x1 idresults.polyest] InputDelay: 0 OutputDelay: 0 Ts: 0.1000 TimeUnit: 'seconds' InputName: {'u1'} InputUnit: {''} InputGroup: [1x1 struct] OutputName: {'y1'} OutputUnit: {''} OutputGroup: [1x1 struct] Notes: [0x1 string] UserData: [] Name: '' SamplingGrid: [1x1 struct]
Используйте present
, чтобы просмотреть предполагаемую ковариацию параметра как + значения/-1 неуверенности стандартного отклонения на отдельных параметрах:
present(m)
m = Discrete-time ARMAX model: A(z)y(t) = B(z)u(t) + C(z)e(t) A(z) = 1 - 1.531 (+/- 0.01801) z^-1 + 0.7293 (+/- 0.01473) z^-2 B(z) = 0.943 (+/- 0.06074) z^-1 + 0.5224 (+/- 0.07818) z^-2 C(z) = 1 - 1.059 (+/- 0.06067) z^-1 + 0.1968 (+/- 0.05957) z^-2 Sample time: 0.1 seconds Parameterization: Polynomial orders: na=2 nb=2 nc=2 nk=1 Number of free coefficients: 6 Use "polydata", "getpvec", "getcov" for parameters and their uncertainties. Status: Termination condition: Near (local) minimum, (norm(g) < tol).. Number of iterations: 3, Number of function evaluations: 7 Estimated using ARMAX on time domain data "z1". Fit to estimation data: 76.38% (prediction focus) FPE: 1.127, MSE: 1.082 More information in model's "Report" property.
Используйте getpvec
, чтобы выбрать плоский список всех параметров модели, или только свободные единицы и их неуверенность. Используйте getcov
, чтобы выбрать целую ковариационную матрицу.
[par, dpar] = getpvec(m, 'free') CovFree = getcov(m,'value')
par = -1.5312 0.7293 0.9430 0.5224 -1.0587 0.1968 dpar = 0.0180 0.0147 0.0607 0.0782 0.0607 0.0596 CovFree = 0.0003 -0.0003 0.0000 0.0007 0.0004 -0.0003 -0.0003 0.0002 -0.0000 -0.0004 -0.0003 0.0002 0.0000 -0.0000 0.0037 -0.0034 -0.0000 0.0001 0.0007 -0.0004 -0.0034 0.0061 0.0008 -0.0005 0.0004 -0.0003 -0.0000 0.0008 0.0037 -0.0032 -0.0003 0.0002 0.0001 -0.0005 -0.0032 0.0035
nf = 0, без обозначения даты = 0 обозначают порядки общей линейной модели, которой модель ARMAX является особым случаем.
Отчет содержит информацию о процессе оценки:
m.Report m.Report.DataUsed % record of data used for estimation m.Report.Fit % quantitative measures of model quality m.Report.Termination % search termination conditions
ans = Status: 'Estimated using ARMAX with prediction focus' Method: 'ARMAX' InitialCondition: 'zero' Fit: [1x1 struct] Parameters: [1x1 struct] OptionsUsed: [1x1 idoptions.polyest] RandState: [1x1 struct] DataUsed: [1x1 struct] Termination: [1x1 struct] ans = struct with fields: Name: 'z1' Type: 'Time domain data' Length: 300 Ts: 0.1000 InterSample: 'zoh' InputOffset: [] OutputOffset: [] ans = struct with fields: FitPercent: 76.3807 LossFcn: 1.0824 MSE: 1.0824 FPE: 1.1266 AIC: 887.1256 AICc: 887.4123 nAIC: 0.1192 BIC: 909.3483 ans = struct with fields: WhyStop: 'Near (local) minimum, (norm(g) < tol).' Iterations: 3 FirstOrderOptimality: 7.2436 FcnCount: 7 UpdateNorm: 0.0067 LastImprovement: 0.0067
Чтобы получить онлайновую информацию о минимизации, используйте опцию оценки 'Отображения' с возможными значениями 'off', 'on', и 'полный'. Это запускает средство просмотра прогресса, которое показывает информацию об образцовом прогрессе оценки.
Opt = armaxOptions('Display','on'); m1 = armax(z1,[2 2 2 1],Opt);
Существует несколько типов линейных моделей. Тот выше является примером версии idpoly
для полиномиальных моделей типа. Различные варианты моделей полиномиального типа, такие как модели Box-Jenkins, модели Output Error, модели ARMAX и т.д. получены с помощью соответствующих средств оценки - bj, oe, armax, arx
и т.д. Все они представлены как объекты idpoly
.
Другими вариантами является idss
для моделей в пространстве состояний; idgrey
для пользовательских структурированных моделей в пространстве состояний; idtf
для моделей передаточной функции и idproc
для моделей процессов (gain+delay+static усиление).
Команды, чтобы оценить модель: bode, step, iopzmap, compare
, и т.д., все работают непосредственно с объектами модели, например:
compare(z1,m1)
Преобразования к пространству состояний, передаточной функции и нулям/полюсам получены idssdata
, tfdata
и zpkdata
:
[num,den] = tfdata(m1,'v')
num = 0 0.9430 0.5224 den = 1.0000 -1.5312 0.7293
'v' означает, что цифра и логово возвращены как векторы и не как массивы ячеек. Массивы ячеек полезны, чтобы обработать многомерные системы. Также получать 1 неуверенность стандартного отклонения в значениях использования den
и num
:
[num, den, ~, dnum, dden] = tfdata(m1,'v')
num = 0 0.9430 0.5224 den = 1.0000 -1.5312 0.7293 dnum = 0 0.0607 0.0782 dden = 0 0.0180 0.0147
Объекты также соединяются непосредственно с объектами модели Control System Toolbox™, как tf
, ss
и zpk
, и могут быть преобразованы в эти объекты LTI, если Control System Toolbox доступен. Например, tf
преобразовывает объект idpoly
в объект tf
.
CSTBInstalled = exist('tf','class')==8; if CSTBInstalled % check if Control System Toolbox is installed tfm = tf(m1) % convert IDPOLY model m1 into a TF object end
tfm = From input "u1" to output "y1": 0.943 z^-1 + 0.5224 z^-2 ---------------------------- 1 - 1.531 z^-1 + 0.7293 z^-2 Sample time: 0.1 seconds Discrete-time transfer function.
При преобразовании модели IDLTI в модели Control Systems Toolbox's LTI не сохраняется шумовой компонент. Чтобы также включать шумовые каналы как регулярные входные параметры модели LTI, используйте 'увеличенный' флаг:
if CSTBInstalled tfm2 = tf(m1,'augmented') end
tfm2 = From input "u1" to output "y1": 0.943 z^-1 + 0.5224 z^-2 ---------------------------- 1 - 1.531 z^-1 + 0.7293 z^-2 From input "v@y1" to output "y1": 1.051 - 1.113 z^-1 + 0.2069 z^-2 -------------------------------- 1 - 1.531 z^-1 + 0.7293 z^-2 Input groups: Name Channels Measured 1 Noise 2 Sample time: 0.1 seconds Discrete-time transfer function.
Шумовой канал называют v@y1
в модели tfm2
.
Для получения дополнительной информации об идентификации динамических систем с System Identification Toolbox посещают страницу информации о продукте System Identification Toolbox.