В этом примере показано, как управлять объектами данных и объектами модели, доступными в 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
.