Объекты данных и объекты модели в System Identification Toolbox™

В этом примере показано, как управлять объектами данных и объектами модели, доступными в System Identification Toolbox™. Система идентификации о создавании моделей из данных. Набор данных характеризуется несколькими данными: сигналы ввода и вывода, шаг расчета, имена переменных и модули, и т.д. Точно так же предполагаемые модели содержат информацию различных видов - оцененные параметры, их ковариационные матрицы, структура модели и так далее.

Это означает, что подходит и желательно группировать релевантную информацию вокруг данных и моделей в объекты. System Identification Toolbox™ содержит много таких объектов, и основные характеристики их описаны в этом примере.

Объект IDDATA

Сначала создайте некоторые данные:

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
        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]
            Report: [1x1 idresults.polyest]

Используйте 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);

Варианты линейных моделей - IDTF, IDPOLY, IDPROC, IDSS и IDGREY

Существует несколько типов линейных моделей. Тот выше является примером 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

Преобразование идентифицированных моделей в числовой LTIs Control System Toolbox™

Объекты также соединяются непосредственно с объектами модели 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.