В этом примере показано, как управлять объектами данных и объектами модели, доступными в 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' ("нулевой порядок, содержат", i.e. кусочная константа) или 'foh' (задержка первого порядка, i.e., кусочный линейный). Идентификационные стандартные программы используют эту информацию, чтобы настроить алгоритмы.
z.InterSample
ans =
2x1 cell array
{'zoh'}
{'zoh'}
Можно добавить каналы (оба ввода и вывода) "горизонтальной конкатенацией", i.e. 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 неопределенность стандартного отклонения в значениях num и den использование:
[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.