exponenta event banner

Оценка простых моделей по данным реальных лабораторных процессов

В этом примере показано, как разрабатывать и анализировать простые модели на основе реальных данных лабораторных процессов. Начнем с небольшого описания процесса, научимся импортировать данные на панель инструментов и предварительно обрабатывать/кондиционировать их, а затем систематически приступаем к оценке параметрических и непараметрических моделей. После определения моделей мы сравниваем оцененные модели, а также проверяем модель с фактическими выходными данными эксперимента.

Описание системы

Это тематическое исследование касается данных, собранных из лабораторной шкалы «фен». (Инструктор по процессам обратной связи PT326; См. также страницу 525 в Ljung, 1999). Процесс работает следующим образом: Воздух раздувается через трубку и нагревается на входе. Температура воздуха измеряется термопарой на выходе. Вход - это напряжение на нагревательном устройстве, которое представляет собой только сетку резисторных проводов. Выходной сигнал представляет собой температуру воздуха на выходе, представляемую измеренным напряжением термопары.

Настройка данных для анализа

Сначала загружаем данные ввода-вывода в рабочую область MATLAB ®.

load dryer2;

Вектор y2выходной сигнал содержит 1000 измерений напряжения термопары, которое пропорционально температуре в выходном воздушном потоке. Вектор u2 содержит 1000 входных точек данных, состоящих из напряжения, подаваемого на нагреватель. Вход был сформирован как двоичная случайная последовательность, которая переключается с одного уровня на другой с вероятностью 0,2. Время выборки составляет 0,08 секунды.

Следующим шагом является настройка данных как объекта iddata.

dry = iddata(y2,u2,0.08);

Чтобы получить информацию о данных, просто введите имя iddata объект в окне команды MATLAB:

dry
dry =

Time domain data set with 1000 samples.
Sample time: 0.08 seconds               
                                        
Outputs      Unit (if specified)        
   y1                                   
                                        
Inputs       Unit (if specified)        
   u1                                   
                                        

Для проверки свойств указанного выше объекта iddata используйте get команда:

get(dry)
ans = 

  struct with fields:

              Domain: 'Time'
                Name: ''
          OutputData: [1000x1 double]
                   y: 'Same as OutputData'
          OutputName: {'y1'}
          OutputUnit: {''}
           InputData: [1000x1 double]
                   u: 'Same as InputData'
           InputName: {'u1'}
           InputUnit: {''}
              Period: Inf
         InterSample: 'zoh'
                  Ts: 0.0800
              Tstart: []
    SamplingInstants: [1000x0 double]
            TimeUnit: 'seconds'
      ExperimentName: 'Exp1'
               Notes: {}
            UserData: []

Для лучшего ведения книги рекомендуется называть каналы ввода и вывода и единицы времени. Эти имена будут распространяться в ходе анализа этого объекта iddata:

dry.InputName = 'Heater Voltage';
dry.OutputName = 'Thermocouple Voltage';
dry.TimeUnit = 'seconds';
dry.InputUnit = 'V';
dry.OutputUnit = 'V';

Теперь, когда набор данных готов, мы выбираем первые 300 точек данных для оценки модели.

ze = dry(1:300)
ze =

Time domain data set with 300 samples.       
Sample time: 0.08 seconds                     
                                              
Outputs                    Unit (if specified)
   Thermocouple Voltage       V               
                                              
Inputs                     Unit (if specified)
   Heater Voltage             V               
                                              

Предварительная обработка данных

Постройте график интервала от 200 до 300:

plot(ze(200:300));

Рис. 1: Снимок измеренных данных фена.

Из вышеприведенного графика можно видеть, что данные не являются нулевыми средними. Давайте уберем постоянные уровни и сделаем данные нулевыми.

ze = detrend(ze);

Тот же набор данных после его уничтожения:

plot(ze(200:300)) %show samples from 200 to 300 of detrended data

Рис. 2: Детерминированные оценочные данные.

Оценка непараметрических и параметрических моделей

Теперь, когда набор данных был уменьшен и нет явных отклонений, давайте сначала оценим импульсную характеристику системы с помощью корреляционного анализа, чтобы получить некоторое представление о временных константах и т.п.:

clf
mi = impulseest(ze); % non-parametric (FIR) model
showConfidence(impulseplot(mi),3); %impulse response with 3 standard
                                   %deviations confidence region

Рис. 3: Импульсная характеристика модели КИХ, оцененная с использованием ze.

Затененная область отмечает 99,7% доверительный интервал. Имеется временная задержка (мертвое время) из 3 выборок, прежде чем выходной сигнал реагирует на входной сигнал (значительный выходной сигнал вне доверительного интервала).

Простейшим способом начала работы над программой параметрической оценки является построение модели состояния-пространства, в которой порядок модели определяется автоматически, с использованием метода ошибки прогнозирования. Давайте оценим модель, используя ssest методика оценки:

m1 = ssest(ze);

m1 - модель состояния-пространства, идентифицированная непрерывно и представленная символом idss объект. Алгоритм оценки выбирает 3 в качестве оптимального порядка модели. Чтобы проверить свойства расчетной модели, просто введите имя модели в окне команды:

m1
m1 =
  Continuous-time identified state-space model:
      dx/dt = A x(t) + B u(t) + K e(t)
       y(t) = C x(t) + D u(t) + e(t)
 
  A = 
            x1       x2       x3
   x1  -0.4839   -2.011    2.092
   x2    3.321   -1.913    5.998
   x3    1.623   -17.01   -15.61
 
  B = 
       Heater Volta
   x1      -0.05753
   x2       0.02004
   x3         1.377
 
  C = 
                      x1       x2       x3
   Thermocouple   -14.07  0.07729  0.04252
 
  D = 
                 Heater Volta
   Thermocouple             0
 
  K = 
       Thermocouple
   x1       -0.9457
   x2      -0.02097
   x3         2.102
 
Parameterization:
   FREE form (all coefficients in A, B, C free).
   Feedthrough: none
   Disturbance component: estimate
   Number of free coefficients: 18
   Use "idssdata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                          
Estimated using SSEST on time domain data "ze".  
Fit to estimation data: 95.32% (prediction focus)
FPE: 0.001621, MSE: 0.001526                     

Отображение предполагает, что модель является произвольной (все записи матриц A, B и C рассматривались как свободные параметры) и что оценочная модель вполне подходит для данных (более 90% подходят). Чтобы извлечь свойства этой модели, например, чтобы получить A матрицу генерируемого выше дискретного состояния-космического объекта можно использовать оператор точки:

     A = m1.a;

Дополнительные сведения об объектах модели см. в примере «Данные и объекты модели в панели инструментов идентификации системы». Чтобы узнать, какие свойства объекта модели можно извлечь, используйте get команда:

get(m1)
                A: [3x3 double]
                B: [3x1 double]
                C: [-14.0706 0.0773 0.0425]
                D: 0
                K: [3x1 double]
        StateName: {3x1 cell}
        StateUnit: {3x1 cell}
        Structure: [1x1 pmodel.ss]
    NoiseVariance: 1.2587e-04
       InputDelay: 0
      OutputDelay: 0
               Ts: 0
         TimeUnit: 'seconds'
        InputName: {'Heater Voltage'}
        InputUnit: {'V'}
       InputGroup: [1x1 struct]
       OutputName: {'Thermocouple Voltage'}
       OutputUnit: {'V'}
      OutputGroup: [1x1 struct]
            Notes: [0x1 string]
         UserData: []
             Name: ''
     SamplingGrid: [1x1 struct]
           Report: [1x1 idresults.ssest]

Чтобы получить значения матриц состояния-пространства и их неопределенностей 1 стандартного отклонения, используйте idssdata команда:

[A,B,C,D,K,~,dA,dB,dC,dD,dK] = idssdata(m1)
A =

   -0.4839   -2.0112    2.0917
    3.3205   -1.9135    5.9981
    1.6235  -17.0096  -15.6070


B =

   -0.0575
    0.0200
    1.3770


C =

  -14.0706    0.0773    0.0425


D =

     0


K =

   -0.9457
   -0.0210
    2.1019


dA =

   1.0e+14 *

    1.1413    1.1945    0.8367
    2.0899    1.4613    1.2117
    9.8253    7.1186    1.8997


dB =

   1.0e+13 *

    0.4013
    1.5604
    4.5776


dC =

   1.0e+14 *

    2.1049    1.3852    0.4309


dD =

     0


dK =

   1.0e+13 *

    1.3260
    4.5015
    7.0925

Неопределенности довольно велики, даже несмотря на то, что модель хорошо вписывается в оценочные данные. Это происходит потому, что модель чрезмерно параметризована, то есть имеет больше свободных параметров, чем то, что может быть однозначно идентифицировано. Дисперсия параметров в таких случаях не вполне определена. Однако это не означает, что модель ненадежна. Мы можем построить график временной и частотной характеристики этого графика и рассматривать дисперсию как доверительные области, как описано ниже.

Анализ расчетной модели

График Бода генерируемой модели может быть получен с помощью bode как показано ниже:

h = bodeplot(m1);

Рисунок 4: График построения расчетной модели.

Щелкните правой кнопкой мыши на графике и выберите «Характеристика» - > «Область доверия». Или используйте showConfidence для просмотра расхождения ответа.

showConfidence(h,3) % 3 standard deviation (99.7%) confidence region

Рисунок 5: График Бода с 3 областью достоверности стандартного отклонения.

Аналогично, мы можем генерировать график шага и связанную с ним 3 доверительную область стандартного отклонения. Мы можем сравнить ответы и связанные отклонения параметрической модели m1 с непараметрической моделью mi:

showConfidence(stepplot(m1,'b',mi,'r',3),3)

Рисунок 6: Пошаговый график моделей m1 и mi с доверительными областями.

Мы также можем рассмотреть график Найквиста и отметить области неопределенности на определенных частотах эллипсами, соответствующими 3 стандартным отклонениям:

Opt = nyquistoptions;
Opt.ShowFullContour = 'off';
showConfidence(nyquistplot(m1,Opt),3)

Рисунок 7: График Найквиста оценочной модели, показывающий области неопределенности на определенных частотах.

Графики ответов показывают, что расчетная модель m1 является достаточно надежным.

Оценка моделей с предписанной структурой

Панель инструментов идентификации системы может также использоваться для получения модели с заданной структурой. Например, модель уравнения разности с 2 полюсами, 1 нулем и 3 задержками выборки может быть получена с помощью arx как показано ниже:

m2 = arx(ze,[2 2 3]);

Для просмотра модели введите имя модели в окне команд.

m2
m2 =
Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t)
  A(z) = 1 - 1.274 z^-1 + 0.3942 z^-2              
                                                   
  B(z) = 0.06679 z^-3 + 0.04429 z^-4               
                                                   
Sample time: 0.08 seconds
  
Parameterization:
   Polynomial orders:   na=2   nb=2   nk=3
   Number of free coefficients: 4
   Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                          
Estimated using ARX on time domain data "ze".    
Fit to estimation data: 95.08% (prediction focus)
FPE: 0.001756, MSE: 0.001687                     

Функция непрерывной временной передачи с 2 полюсами, одной нулевой и 0,2 секундной задержкой передачи может быть оценена с использованием tfest команда:

m3 = tfest(ze, 2, 1, 0.2)
m3 =
 
  From input "Heater Voltage" to output "Thermocouple Voltage":
                   1.183 s + 26.55
  exp(-0.2*s) * ---------------------
                s^2 + 11.61 s + 28.63
 
Continuous-time identified transfer function.

Parameterization:
   Number of poles: 2   Number of zeros: 1
   Number of free coefficients: 4
   Use "tfdata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                        
Estimated using TFEST on time domain data "ze".
Fit to estimation data: 88.79%                 
FPE: 0.009126, MSE: 0.008768                   

Проверка расчетной модели на экспериментальный выход

Насколько хорошая модель? Один из способов выяснить это - смоделировать его и сравнить выходные данные модели с измеренными выходными данными. Выберите часть исходных данных, которая не использовалась при построении модели, например, от образцов 800 до 900. После предварительной обработки данных проверки мы используем compare как показано ниже, для просмотра качества прогноза:

zv = dry(800:900);   % select an independent data set for validation
zv = detrend(zv);    % preprocess the validation data
set(gcf,'DefaultLegendLocation','best')
compare(zv,m1);      % perform comparison of simulated output

Рис. 8: Смоделированный отклик модели в сравнении с выводом данных проверки.

Здесь можно заметить, что соглашение очень хорошее. Показанное значение «Fit» рассчитывается следующим образом:

Fit = 100*(1 - norm(yh - y)/norm(y-mean(y)))

где y - измеренный выходной сигнал (= | zv.y |), иyh - вывод модели m1.

Сравнение расчетных моделей

Чтобы сравнить производительность моделей, которые мы оценили, например m1, m2 и m3 с данными проверки zv, мы можем снова использовать compare команда:

compare(zv,m1,'b',m2,'r',m3,'c');

Рис. 9: Сравнение ответов моделей m1, m2, m3 о наборе данных проверки ze.

Графики полюсов и нулей для моделей можно получить с помощью iopzplot:

h = iopzplot(m1,'b',m2,'r',m3,'c');

Рис. 10: Полюса и нули моделей m1, m2 и m3.

Неопределенности в полюсах и нулях также могут быть получены. В следующем операторе '3' относится к числу стандартных отклонений.

showConfidence(h,3);

Рисунок 11: Карта полюсов и нулей с областями неопределенности.

Приведенные выше частотные функции, полученные из моделей, можно сравнить с той, которая получена непараметрическим методом спектрального анализа (spa):

gs = spa(ze);

spa создает модель IDFRD. bode снова может использоваться для сравнения с передаточными функциями полученных моделей.

w = linspace(0.4,pi/m2.Ts,200);
opt = bodeoptions; opt.PhaseMatching = 'on';
bodeplot(m1,'b',m2,'r',m3,'c',gs,'g',w,opt);
legend('m1','m2','m3','gs')

Рис. 12: Ответы Bode m1, m2 и m3 сравнение с непараметрической моделью спектральной оценки gs.

Частотные характеристики трех моделей/методов очень близки. Это означает, что этот ответ надежен.

Также график Найквиста может быть проанализирован с областями неопределенности, отмеченными на определенных частотах:

showConfidence(nyquistplot(m1,'b',m2,'r',m3,'c',gs,'g'),3)

Рисунок 13: Найквистские графики моделей m1, m2, m3 и gs.

Непараметрическая модель gs проявляет наибольшую неопределенность в ответ.