Применение фильтра Калмана для оценки результатов измерений#

Данные измерений (например, координаты летательного аппарата, данные о погодных условиях среды, окружающей изделие, или параметры актуального технического состояния изделия) всегда содержат погрешности измерений. Погрешности измерений (или зашумленность данных) и неполнота данных затрудняют расчётную оценку актуального технического состояния изделия.

Фильтр Калмана позволяет решать задачи по оценке результатов измерений, содержащих шумы или погрешности, с целью дальнейшего использования результатов измерений в системах управления, а также для расчётов актуального технического состояния изделий на стадии их эксплуатации.

В данном практическом руководстве:

  • Представлена краткая информация о фильтре Калмана,

  • Приведено описание основных шагов о реализации фильтра Калмана на платформе REPEAT VISION на примере оценки результатов измерений датчика давления.

1.  Фильтр Калмана#

Фильтр Калмана является математическим алгоритмом для моделирования линейных динамических систем, состояние которых изменяется во времени.[1] Состоянием системы может быть температура, давление технологического процесса, координаты наблюдаемого объекта в пространстве и другие измеримые состояния системы.

Представление линейной динамической системы в пространстве состояний выражается уравнением (1).

(1)#\[\mathbf x_k = \mathbf{Fx}_{k-1} + \mathbf B_k\mathbf u_k + \mathbf{w_k}\]

В уравнении (1) \(\mathbf x_k\) - вектор актуального состояния системы в момент времени \(t_k\), \(\mathbf x_{k-1}\) - вектор предыдущего состояния системы в момент времени \(t_{k-1}\);

\(\mathbf F\) - переходная матрица состояния системы. Матрица \(\mathbf F\) - дискретная и отражает систему линейных уравнений, которые переходят из состояния \(\mathbf x_{k-1}\) в состояние \(\mathbf x_k\) за дискретный шаг времени \(\Delta t\);

\(\mathbf B_k\) - матрица управления, \(\mathbf u_k\) - вектор управляющих воздействий для момента времени \(t_k\);

\(\mathbf w_k\) описывает нормальный случайный шум системы.

Измерения состояния системы описываются уравнением (2).

(2)#\[\mathbf z_k = \mathbf H_k \mathbf x_k + \mathbf v_k\]

В уравнении (2) \(\mathbf z_k\) - вектор измерения состояния системы, \(\mathbf H_k\) - матрица измерений, \(\mathbf v_k\) описывает нормальный случайный шум измерений.

Фильтр Калмана требует использования параметров с нормальным законом распределения случайных величин, характеризующих как саму моделируемую систему, так и измерения состояний системы.

Для моделирования нелинейных динамических систем возможно применение следующих модификаций фильтра Калмана:

  • Расширенный фильтра Калмана (Extended Kalman Filter),

  • Сигма-точечный фильтра Калмана (Unscented Kalman Filter).

1.1.  Ценность фильтра Калмана#

Ценность фильтра Калмана для обработки результатов измерений заключается в снижении дисперсии ошибки (погрешности) состояния системы после выполнения оценки и последующего уточнения состояния системы по результатам выполненных измерений.

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

См. также

Подробное и доступное описание фильтра Калмана, а также его модификаций излагается в бесплатной интерактивной книге Kalman and Bayesian Filters in Python[1]

2.  Постановка задачи оценки результатов измерений датчика давления#

Для примера реализации фильтра Калмана выбирается модель датчика избыточного давления, который на основании измеренных величин давления выдаёт электрический сигнал.

Через каждый промежуток времени \(\Delta t = 0.01 [с]\) датчиком давления выдаётся электрический сигнал в виде напряжения в диапазоне \([1 - 5] [В]\). Сигнал датчика содержит погрешность измерения в виде стандартного отклонения \(0.2 [В]\).

Подсказка

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

Исторические значения электрического сигнала датчика давления приведены на графике ниже. График содержит изменения электрического сигнала от 1 до 5 \([В]\) на временном интервале \([1 - 5] [с]\).

(png, hires.png)

../../../_images/sensor_press_measures_plot_figure_and_zoom.png

Исторические значения электрического сигнала датчика давления#

При рассмотрении временного интервала \([1 - 2] [с]\) заметно влияние погрешностей измерений со стандартным отклонением \(0.2 [В]\).

В рамках данного раздела демонстрационная модель датчика давления реализована по принципиальной схеме без детальной проработки особенностей датчика давления.

Для практического ознакомления с порядком реализации фильтра Калмана на платформе REPEAT VISION требуется настроить элементы фильтра Калмана для обработки результатов измерений датчика давления.

3.  Описание математической модели#

Для реализации фильтра Калмана требуется подготовить матрицы уравнений (1) и (2). В данном разделе приводится описание шагов подготовки необходимых матриц.

Для описания исторических значений электрического сигнала вектор состояния системы должен включать:

  1. Значение напряжения \(\mathbf х\),

  2. Первую производную значения сигнала по времени \(\mathbf v\) (скорость изменения значения)

Значение актуального состояния системы в момент времени \(t_k\) связаны с предыдущим состоянием системы в момент времени \(t_{k-1}\) по зависимости (3).

(3)#\[\begin{split}\left\{ \begin{aligned} \mathbf x_k &= \mathbf x_{k-1} + \mathbf v \Delta t \\ \mathbf v &= \mathbf v \end{aligned} \right. \end{split}\]

3.1.  Переходная матрица состояния системы#

На первом и главном шаге реализации фильтра Калмана для решения обозначенной выше задачи требуется подготовить переходную матрицу состояния системы \(\mathbf F\) для уравнения (1).

Переходная матрица состояния системы на основании уравнения (3) выглядит следующим образом.

(4)#\[\begin{split}\mathbf{F} &= \begin{bmatrix} 1 & \Delta t \\ 0 & 1\end{bmatrix}\end{split}\]

В результате первого шага уравнение (1) будет выглядеть следующим образом.

\[\begin{split}\mathbf x_k &= \mathbf{Fx}_{k-1} = \begin{bmatrix} 1 & \Delta t \\ 0 & 1\end{bmatrix} \begin{bmatrix}x_{k-1} \\ v\end{bmatrix}\end{split}\]

3.2.  Нормальный случайный шум системы#

На втором шаге требуется описать \(\mathbf w_k\) нормальный случайный шум системы для шага измерений \(\Delta t = 0.01 [с]\). Матрица \(\mathbf Q\) нормального случайного дискретного шума системы задаётся уравнением (5).

(5)#\[\begin{split}\begin{aligned} \mathbf w_k &\sim N(0, \mathbf Q) \\ \mathbf Q &= \begin{bmatrix} \frac{\Delta t^4}{4} & \frac{\Delta t^3}{2} \\ \frac{\Delta t^3}{2} & \Delta t^2\end{bmatrix} \sigma_{w}^2 \end{aligned}\end{split}\]

В уравнении (5) \(N(0, \mathbf Q)\) - нормальное распределение \(\mathbf Q\) с математическим ожиданием, равным 0; \(\sigma_{w}\) - стандартное отклонение случайного шума системы.

В результате второго шага уравнение (1) будет выглядеть следующим образом.

\[\begin{split}\mathbf x_k &= \mathbf{Fx}_{k-1} + \mathbf{w_k} \\ &= \begin{bmatrix} 1 & \Delta t \\ 0 & 1\end{bmatrix} \begin{bmatrix}x_{k-1} \\ v\end{bmatrix} + \begin{bmatrix} \frac{\Delta t^4}{4} & \frac{\Delta t^3}{2} \\ \frac{\Delta t^3}{2} & \Delta t^2\end{bmatrix} \sigma_{w}^2\end{split}\]

3.3.  Матрица управления#

В рамках постановки текущей задачи не требуется описывать матрицу управления \(\mathbf B_k\), поскольку система не предполагает управляющих воздействий.

3.4.  Матрица измерений#

На третьем шаге требуется сформировать \(\mathbf H_k\) матрицу измерений.

В соответствии с постановкой задачи измеряется только значение электрического сигнала напряжения \(\mathbf х\), скорость изменения сигнала \(\mathbf v\) не измеряется, поэтому матрица измерений имеет вид (6).

(6)#\[\mathbf H = \begin{bmatrix}1 & 0 \end{bmatrix}\]

3.5.  Нормальный случайный шум измерений#

На четвёртом шаге требуется описать \(\mathbf v_k\) нормальный случайный шум измерений.

В матрице нормального случайного шума указываются дисперсии случайных величин измерений. Для ранее подготовленной матрицы измерений (6) нормальный случайный шум измерений имеет вид (7).

(7)#\[\begin{split}\begin{aligned} \mathbf v_k &\sim N(0,\mathbf R) \\ \mathbf R &= \begin{bmatrix}0.2^2 \end{bmatrix} \end{aligned} \end{split}\]

В уравнении (7) \(N(0, \mathbf R)\) - нормальное распределение \(\mathbf R\) с математическим ожиданием, равным 0. В матрице \(\mathbf R\) \(0.2 [В]\) - стандартное отклонение случайной величины измерений.

После формального описания необходимых матриц фильтра Калмана необходимо реализовать алгоритм на платформе REPEAT VISION.

4.  Реализация фильтра Калмана на платформе REPEAT VISION#

В соответствии с уравнением (1) алгоритм фильтра Калмана для оценки актуального состояния системы требует наличия измерений предыдущего состояния системы.

Для реализации фильтра Калмана на платформе REPEAT VISION необходимо воспользоваться блоком Jython. Блок позволяет описать алгоритм на языке программирования Python с использованием библиотеки Apache Commons Math, которая содержит готовое исполнение фильтра Калмана.[2]

4.1.  Обзор демонстрационного проекта в приложении REPEAT VISION#

В наборе демонстрационных проектов приложения REPEAT VISION доступен пример использования фильтра Калмана для оценки результатов измерений. Далее выполним анализ данного примера, который нам поможет описать все необходимые шаги по реализации фильтра Калмана на платформе REPEAT VISION.

В приложении REPEAT VISION добавьте себе проект [DEMO] Применение фильтра Калмана для оценки результатов измерений из папки Демо проекты и откройте его для последующего выполнения обзора.

../../../_images/all_project-52f459ec.ru.png

Проект с примером использования фильтра Калмана для оценки результатов измерений#

Проект содержит два блока (Датчик и Фильтр Калмана), а также связанные с этими блоками глобальные переменные, которые упрощают процесс настройки необходимых параметров блоков.

Блок Датчик предназначен для формирования исторических значений электрического сигнала датчика давления в соответствии с графиком выше. Значения электрического сигнала формируются на выходном порте signal блока. Также данный блок формирует на выходном порте theoretical_value значения напряжения, не содержащие погрешности измерения, для удобства дальнейшего выполнения анализа результатов моделирования.

Проект содержит набор глобальных переменных в соответствии с таблицей ниже.

Имя переменной

Значение переменной

Назначение

SENSOR_MEASURE_ERROR

0.2

Стандартное отклонение случайной величины измерений для блока Jython.

PROCESS_NOISE

30

Стандартное отклонение случайного шума системы \(\sigma_{w}\) для уравнения (5)

Далее приступим к обзору алгоритма фильтра Калмана в блоке Jython (№2 на рисунке выше).

4.2.  Обзор кода программы в блоке Jython#

Для обзора алгоритма фильтра Калмана требуется в свойствах блока Jython нажать на кнопку Редактировать код блока.

Добавлено в версии 3.0.0: Блок Jython получил возможность разделения программы блока на три этапа процесса моделирования.

  1. Инициализация - код данного этапа выполняется для подготовки к процессу расчёта. На данном этапе необходимо выполнить импорт необходимых библиотек и создать объекты, у которых требуется сохранять состояние между выполнением шагов интегрирования в процессе расчёта;

  2. Код расчёта - код данного этапа выполняется на каждом шаге интегрирования от начала до остановки расчёта. Этап выполняется после инициализации;

  3. Завершение - код данного этапа выполняется при остановке расчёта.

Далее в текстовом редакторе кода блока Jython требуется перейти на вкладку Инициализация для анализа кода подготовки и настройки алгоритма фильтра Калмана.

На этапе инициализации выполняется импорт необходимых классов из библиотеки Apache Commons Math.

1"""
2Jython скрипт предназначен для настройки  фильтра Калмана 
3на платформе REPEAT VISION с использованием библиотеки Apache Commons Math.
4
5Скрипт должен выполняться на этапе подготовки к процессу выполнения расчёта
6"""
7from org.apache.commons.math3.linear import Array2DRowRealMatrix, ArrayRealVector
8from org.apache.commons.math3.filter import DefaultProcessModel, DefaultMeasurementModel
9from org.apache.commons.math3.filter import KalmanFilter
  • Строки 1, 6. Краткое описание назначения и особенностей реализации программы;

  • Строка 7. Импорт необходимых структур данных из модуля линейной алгебры библиотеки Apache Commons Math. Матрица Array2DRowRealMatrix и вектор ArrayRealVector вещественных значений будут использоваться далее для настройки классов фильтра Калмана;

  • Строки 8, 9. Импорт классов для настройки фильтра Калмана. Класс DefaultProcessModel позволит настроить матрицы фильтра Калмана в части уравнения (1). Класс DefaultMeasurementModel - в части уравнения (2). Класс KalmanFilter на основании настроенных матриц позволит вычислять состояние динамической системы на основе алгоритма фильтра Калмана.

Обзор функции для настройки фильтра Калмана#

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

11def get_kalman_filter(dt, measure_noise_std, process_noise_std):
12  """
13  Возвращает фильтр Калмана для оценки состояния динамической системы
14  на основании измерения значения сигнала.
15  Данный фильтр Калмана учитывает первую производной состояния системы.
16  Данная реализация фильтра Калмана подходит для описания следующих процессов:
17
18    - Измерение одного параметра физического процесса;   
19    - Движение объекта вдоль одного направления координат.
20
21  Parameters
22  ----------
23  dt : float
24    Временной шаг изменения состояния системы.
25  measure_noise_std : float
26    Стандартное отклонение случайной величины измерений.
27  process_noise_std : float
28    Стандартное отклонение случайного шума системы.
29
30  Returns
31  -------
32  kf : KalmanFilter
33    Объект фильтра Калмана
34  """
35  
36  trans_m = Array2DRowRealMatrix([
37    [1., dt], # x = x_{k-1} + v*dt
38    [0, 1.]   # v = v
39  ])
40  measure_m = Array2DRowRealMatrix([
41    [1., 0] #  измерение только значения сигнала
42  ])
  • Строки 12, 34. Описание задачи, выполняемой функцией get_kalman_filter, а также описание аргументов функции и возвращаемого результата;

  • Строки 36, 39. Создание переходной матрицы состояния системы в соответствии с (4);

  • Строки 40, 42. Создание матрицы измерений в соответствии с (6).

43  measure_noise_m = Array2DRowRealMatrix(
44    [measure_noise_std**2]
45  )
46  pocess_noise_m = Array2DRowRealMatrix([
47    [dt**4 / 4, dt**3 / 2], 
48    [dt**3 / 2, dt**2]
49  ]).scalarMultiply(process_noise_std**2)
50  initial_values = ArrayRealVector([1., 0])
51  initial_error_cov = Array2DRowRealMatrix([
52    [1, 1],
53    [1, 1]
54  ])
  • Строки 43, 45. Создание матрицы нормального случайного шума измерений в соответствии с (7);

  • Строки 46, 49. Создание матрицы нормального случайного дискретного шума системы в соответствии с (5);

  • Строка 50. Создание начальных значений измерения сигнала и скорости изменения сигнала;

  • Строки 51, 54. Создание начальных значений для ковариационной матрицы initialErrorCovariance класса DefaultProcessModel.

55  process_model =  DefaultProcessModel(
56    trans_m, # Переходная матрица состояния системы 
57    None, # Матрица управления
58    pocess_noise_m, # Матрица нормального случайного дискретного шума системы
59    initial_values, # Начальные значения измерения сигнала
60    initial_error_cov # Начальные значения initialErrorCovariance
61  )
62  measure_model = DefaultMeasurementModel(
63    measure_m, # Матрица измерений
64    measure_noise_m # Матрица нормального случайного шума измерений
65  )
66  kf = KalmanFilter(process_model, measure_model)
67
68  return kf
  • Строки 55, 61. Создаётся экземпляр класса DefaultProcessModel с настройками матриц уравнения (1);

  • Строки 62, 65. Создаётся экземпляр класса DefaultMeasurementModel с настройками матриц уравнения (2);

  • Строки 66, 68. Создаётся, настраивается и возвращается из функции экземпляр класса KalmanFilter.

Функцию необходимо использовать в скрипте блока Jython на этапе инициализации для получения настроенного экземпляра фильтра Калмана.

Инициализация фильтра Калмана#

Ниже приведено описание кода программы на этапе инициализации фильтра Калмана.

70dt = 0.01
71measure_noise_std = SENSOR_MEASURE_ERROR 
72process_noise_std = PROCESS_NOISE
73
74sensor_kf = get_kalman_filter(dt, measure_noise_std, process_noise_std)
  • Строка 70. Создаётся параметр dt временного шага изменения состояния системы в соответствии постановкой задачи;

Добавлено в версии 2.6.0: Пользовательские программы Jython блоков получили возможность применения глобальных переменных проекта. Пример использования данной возможности приведён на строках программы 71-72.

  • Строки 71, 72. Создаются следующие параметры: стандартное отклонение случайных величин измерения, стандартное отклонение случайного шума системы. Значения параметров назначаются из ранее созданных глобальных переменных проекта;

  • Строка 74. Создаётся и настраивается экземпляр класса KalmanFilter фильтра Калмана в соответствии с описанием функции get_kalman_filter.

Весь код программы этапа инициализации#

На этапе инициализации выполняется код, приведённый ниже.

 1"""
 2Jython cкрипт предназначен для настройки  фильтра Калмана 
 3на платформе REPEAT VISION с использованием библиотеки Apache Commons Math.
 4
 5Скрипт должен выполняться на этапе подготовки к процессу выполнения расчёта
 6"""
 7from org.apache.commons.math3.linear import Array2DRowRealMatrix, ArrayRealVector
 8from org.apache.commons.math3.filter import DefaultProcessModel, DefaultMeasurementModel
 9from org.apache.commons.math3.filter import KalmanFilter
10
11def get_kalman_filter(dt, measure_noise_std, process_noise_std):
12  """
13  Возвращает фильтр Калмана для оценки состояния динамической системы
14  на основании измерения значения сигнала.
15  Данный фильтр Калмана учитывает первую производной состояния системы.
16  Данная реализация фильтра Калмана подходит для описания следующих процессов:
17
18    - Измерение одного параметра физического процесса;   
19    - Движение объекта вдоль одного направления координат.
20
21  Parameters
22  ----------
23  dt : float
24    Временной шаг изменения состояния системы.
25  measure_noise_std : float
26    Стандартное отклонение случайной величины измерений.
27  process_noise_std : float
28    Стандартное отклонение случайного шума системы.
29
30  Returns
31  -------
32  kf : KalmanFilter
33    Объект фильтра Калмана
34  """
35  
36  trans_m = Array2DRowRealMatrix([
37    [1., dt], # x = x_{k-1} + v*dt
38    [0, 1.]   # v = v
39  ])
40  measure_m = Array2DRowRealMatrix([
41    [1., 0] #  измерение только значения сигнала
42  ])
43  measure_noise_m = Array2DRowRealMatrix(
44    [measure_noise_std**2]
45  )
46  pocess_noise_m = Array2DRowRealMatrix([
47    [dt**4 / 4, dt**3 / 2], 
48    [dt**3 / 2, dt**2]
49  ]).scalarMultiply(process_noise_std**2)
50  initial_values = ArrayRealVector([1., 0])
51  initial_error_cov = Array2DRowRealMatrix([
52    [1, 1],
53    [1, 1]
54  ])
55  process_model =  DefaultProcessModel(
56    trans_m, # Переходная матрица состояния системы 
57    None, # Матрица управления
58    pocess_noise_m, # Матрица нормального случайного дискретного шума системы
59    initial_values, # Начальные значения измерения сигнала
60    initial_error_cov # Начальные значения initialErrorCovariance
61  )
62  measure_model = DefaultMeasurementModel(
63    measure_m, # Матрица измерений
64    measure_noise_m # Матрица нормального случайного шума измерений
65  )
66  kf = KalmanFilter(process_model, measure_model)
67
68  return kf
69
70dt = 0.01
71measure_noise_std = SENSOR_MEASURE_ERROR 
72process_noise_std = PROCESS_NOISE
73
74sensor_kf = get_kalman_filter(dt, measure_noise_std, process_noise_std)
75

Объект sensor_kf, экземпляр класса KalmanFilter, будет сохранять своё состояние между шагами интегрирования в процессе выполнения расчёта, код которого создаётся на следующем этапе, рассматриваемый в разделе ниже.

Обзор кода расчёта#

Далее в текстовом редакторе кода блока Jython требуется перейти на вкладку Кода расчёта для анализа программы которая выполняется на каждом шаге интегрирования с начального времени моделирования и до остановки расчёта.

Важно

Объекты, созданные в рамках кода расчёта не сохраняют своего состояния после завершения шага интегрирования.

Если вашим объектам необходимо сохранять состояние между шагами интегрирования, то их необходимо создавать и настраивать на этапе инициализации, а затем использовать в коде расчёта.

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

  1. Оценку состояния системы, которая выполняется методом .predict() экземпляра класса KalmanFilter, который присвоен объекту с именем sensor_kf в коде ниже;

  2. Уточнение состояния системы, которая выполняется методом .correct() экземпляра класса KalmanFilter.

После каждого этапа выполнения оценки состояния системы возвращаются значения оценки состояния системы методом .getStateEstimation() экземпляра класса KalmanFilter.

 1"""
 2Jython cкрипт предназначен для применения фильтра Калмана 
 3в процессе выполнения расчёта.
 4"""
 5
 6current_measure = in_1 
 7sensor_kf.predict()
 8before_update = sensor_kf.getStateEstimation()
 9sensor_kf.correct(
10  ArrayRealVector([current_measure])
11)
12after_update = sensor_kf.getStateEstimation()
13out_1 = before_update[0]
14out_2 = after_update[0]

После работы фильтра Калмана формируются результаты оценки состояния системы, которые передаются в выходные порты Jython блока:

  • В порт out_1 передаётся значение оценки сигнала;

  • В порт out_2 передаётся значение оценки сигнала после уточнения состояния системы на основании текущего измерения на момент времени \(t_k\).

13out_1 = before_update[0]
14out_2 = after_update[0]

4.3.  Результаты работы фильтра Калмана по оценке измерений#

Выполните запуск проекта на расчёт и создайте новый график на панели Визуализация.

На график добавьте параметры в соответствии с таблицей ниже.

Параметр

Описание

Проект [1] - signal

Исторические значения электрического сигнала датчика давления в соответствии с постановкой задачи

Проект [1] - theoretical_value

Значения напряжения, не содержащие погрешности измерения

Jython [2] - out_1

Значения оценки сигнала фильтром Калмана из порта out_1 блока Jython

Jython [2] - out_2

Значения оценки сигнала после уточнения состояния системы из порта out_2 блока Jython

Далее необходимо выполнить анализ работы фильтра Калмана.

На первом этапе анализа работы фильтра Калмана необходимо рассмотреть, в целом, все исторические значения измерений и соответствующие им оценки состояния системы фильтра Калмана.

(png, hires.png)

../../../_images/sensor_press_measures_plot_kalman_filter_results.png

Результаты оценки измерений фильтром Калмана.#

На графике выше приняты следующие обозначения.

Линии, метки

Описание

Синие метки

Исторические значения электрического сигнала датчика давления

Зелёная линия

Оценка состояния системы фильтром Калмана

Далее требуется рассмотреть оценку фильтра Калмана на временном диапазоне \([0.2 - 1] [c]\) с плавным возрастанием значений электрического сигнала.

(png, hires.png)

../../../_images/sensor_press_measures_subplot_1_kalman_filter_results.png

Результаты оценки измерений фильтром Калмана на временном диапазоне [0.2 - 1] [с].#

На графике выше приняты следующие обозначения.

Линии, метки

Описание

Синие метки

Исторические значения электрического сигнала датчика давления

Оранжевая пунктирная линия

Теоретические значения

Зелёная линия

Оценка состояния системы фильтром Калмана с последующим уточнением состояния

На диапазоне \([0.2 - 1] [c]\) видна близость оценочных значений фильтра Калмана измерениям сигнала особенно после выполнения уточнения состояния системы (зелёная линия).

На следующем этапе необходимо рассмотреть оценку состояния системы фильтром Калмана в диапазоне \([0.9 - 1.4] [c]\), когда измерения переходят от плавно возрастающих значений к постоянным значениям (с учётом стандартного отклонения случайных величин) измерений.

(png, hires.png)

../../../_images/sensor_press_measures_subplot_2_kalman_filter_results.png

Результаты оценки измерений фильтром Калмана на временном диапазоне [0.9 - 1.4] [с].#

Необходимо отметить, что фильтру Калмана требуется определённое время на возможность оценки последующего состояния с постоянными значениями измерений.

Подсказка

Если в данной области требуется более точная оценка состояния системы, то в настройке фильтра Калмана необходимо учитывать матрицу управления \(\mathbf B_k\), а в цикле работы фильтра Калмана необходимо включать вектор управляющих воздействий \(\mathbf u_k\).

На графике ниже также хорошо видно, что в момент времени \(t = 3.1 [с]\) выполнена оценка состояния системы с близким состоянием к измеренным значениям.

(png, hires.png)

../../../_images/sensor_press_measures_subplot_3_kalman_filter_results.png

Результаты оценки измерений фильтром Калмана на временном диапазоне [2.7 - 3.5] [с].#

Совет

Для адаптации фильтра Калмана на актуальные исторические данные результатов измерений рекомендуется варьировать стандартным отклонением случайного шума системы (PROCESS_NOISE в наборе глобальных переменных примера использования фильтра Калмана на платформе REPEAT VISION)

5.  Выводы#

В рамках данного практического руководства вам удалось освоить процесс реализации фильтра Калмана на платформе REPEAT VISION с применением блока Jython.

Фильтр Калмана:

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

  • с другой стороны, от инженера требуется понимание физики процессов, происходящих в системе, и возможность формального описания процессов в математическом аппарате фильтра Калмана.

Платформа REPEAT VISION предоставляет инженерам необходимый набор инструментов для реализации фильтра Калмана, а также для его применения в междисциплинарных моделях отраслевых систем.

6.  Список литературы#