exponenta event banner

остаток

Остаточная и остаточная ковариация возвращаемого измерения при использовании расширенного или незаметного фильтра Калмана

Описание

residual команда возвращает разницу между фактическими и прогнозируемыми измерениями для extendedKalmanFilter и unscentedKalmanFilter объекты. Просмотр остатка позволяет проверить производительность фильтра. Остатки, также известные как инновации, количественно определяют ошибку предсказания и управляют этапом коррекции в расширенной и незаметной последовательности обновления фильтра Калмана. При использовании correct и predict (System Identification Toolbox), чтобы обновить предполагаемое состояние фильтра Калмана, используйте residual непосредственно перед использованием correct команда.

пример

[Residual,ResidualCovariance] = residual(obj,y) возвращает остаток Residual между измерениями y и прогнозируемое измерение, произведенное фильтром Калмана obj. Функция также возвращает ковариацию остатка ResidualCovariance.

Вы создаете obj с использованием extendedKalmanFilter или unscentedKalmanFilter команды. Функция перехода состояния f и функция измерения h нелинейной системы задаются в obj. State свойство объекта хранит последнее оценочное значение состояния. На каждом шаге времени используется correct и predict Вместе для обновления состояния x. Остаточное s представляет собой разность между фактическими и прогнозируемыми измерениями для временного шага и выражается как s = y-h (x). Ковариация остаточного S - это сумма R + RP, где R - матрица шума измерения, установленная MeasurementNoise свойство фильтра и RP является матрицей ковариации состояния, проецируемой на пространство измерения.

Используйте этот синтаксис, если функция измерения h, указанная в obj.MeasurementFcn имеет одну из следующих форм:

  • y(k) = h(x(k)) для шума измерения присадки

  • y(k) = h(x(k),v(k)) для неаддитивного шума измерений

Здесь, y(k), x(k), и v(k) - измеренный выходной сигнал, состояния и измеренный шум системы на шаге времени k. Единственными входами в h являются состояния и шум измерения.

пример

[Residual,ResidualCovariance] = residual(obj,y,Um1,...,Umn) указывает дополнительные входные аргументы, если для функции измерения системы требуются эти входные данные. Можно указать несколько аргументов.

Используйте этот синтаксис, если функция измерения h имеет одну из следующих форм:

  • y(k) = h(x(k),Um1,...,Umn) для шума измерения присадки

  • y(k) = h(x(k),v(k),Um1,...,Umn) для неаддитивного шума измерений

Примеры

свернуть все

Оцените состояния генератора ван дер Пол, используя расширенный алгоритм фильтра Калмана и измеренные выходные данные. Генератор имеет два состояния и один выход.

Создайте расширенный объект фильтра Калмана для осциллятора. Используйте ранее записанные и сохраненные функции перехода и измерения состояния, vdpStateFcn.m и vdpMeasurementFcn.m. Эти функции описывают дискретное приближение к генератору ван дер Пол с параметром нелинейности mu, равным 1. Функции предполагают аддитивный процесс и измерение шума в системе. Укажите значения начального состояния для двух состояний как [1; 0]. Это предположение для значения состояния в начальный момент времениk, основываясь на знании системных выходов до времени k-1, xˆ[k'k-1].

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[1;0]);

Загрузить измеренные выходные данные y от генератора. В этом примере для иллюстрации используются смоделированные статические данные. Данные хранятся в vdp_data.mat файл.

load vdp_data.mat y

Укажите ковариации технологического и измерительного шума генератора.

obj.ProcessNoise = 0.01;
obj.MeasurementNoise = 0.16;

Инициализируйте массивы для получения результатов оценки.

residBuf = [];
xcorBuf = [];
xpredBuf = [];

Реализация расширенного алгоритма фильтра Калмана для оценки состояний генератора с помощью correct и predict команды. Сначала необходимо исправить xˆ[k'k-1] с помощью измерений в момент времени. k получить xˆ[k'k]. Затем вы прогнозируете значение состояния на следующем временном шаге xˆ[k+1|k] с помощью xˆ[k'k], оценка состояния на временном шаге k которая оценивается с помощью измерений до времени k.

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

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

for k = 1:size(y)
    [Residual,ResidualCovariance] = residual(obj,y(k));
    [CorrectedState,CorrectedStateCovariance] = correct(obj,y(k));
    [PredictedState,PredictedStateCovariance] = predict(obj);
    
     residBuf(k,:) = Residual;
     xcorBuf(k,:) = CorrectedState';
     xpredBuf(k,:) = PredictedState';
   
end

При использовании correct команда, obj.State и obj.StateCovariance обновляются скорректированными значениями ковариации состояния и ошибки оценки состояния для временного шага k, CorrectedState и CorrectedStateCovariance. При использовании predict команда, obj.State и obj.StateCovariance обновляются прогнозируемыми значениями для временного шага k+1, PredictedState и PredictedStateCovariance. При использовании residual команда, вы не изменяете obj свойства.

В этом примере используется correct прежде predict поскольку начальное значение состояния было xˆ[k'k-1], предположение для значения состояния в начальный момент времени k на основе системных выходов до времени k-1. Если начальное значение состояния равно xˆ[k-1|k-1], значение в предыдущий раз k-1 на основе измерений до k-1, затем используйте predict сначала команда. Дополнительные сведения о порядке использования predict и correct, см. Использование команд прогнозирования и исправления.

Постройте график расчетных состояний с использованием значений посткоррекции.

plot(xcorBuf(:,1), xcorBuf(:,2))
title('Estimated States')

Figure contains an axes. The axes with title Estimated States contains an object of type line.

Постройте график фактического измерения, скорректированного оценочного измерения и остатка. Для функции измерения в vdpMeasurementFcn, измерение является первым состоянием.

M = [y,xcorBuf(:,1),residBuf];
plot(M)
grid on
title('Actual and Estimated Measurements, Residual')
legend('Measured','Estimated','Residual')

Figure contains an axes. The axes with title Actual and Estimated Measurements, Residual contains 3 objects of type line. These objects represent Measured, Estimated, Residual.

Оценка точно отслеживает измерение. После начального переходного процесса остаток остается относительно небольшим на протяжении всего цикла.

Рассмотрим нелинейную систему с входными данными u состояние которого x и измерение y развиваются в соответствии со следующими уравнениями перехода и измерения состояния:

x [k] = x [k-1] + u [k-1] + w [k-1]

y [k] = x [k] + 2 * u [k] + v [k] 2

Технологический шум w системы является аддитивной, а измерительный шум v является неаддитивным.

Создайте функцию перехода состояния и функцию измерения для системы. Укажите функции с дополнительным входом u.

f = @(x,u)(sqrt(x+u));
h = @(x,v,u)(x+2*u+v^2);

f и h представляют собой дескрипторы функций для анонимных функций, которые хранят функции перехода состояния и измерения соответственно. В функции измерения, поскольку шум измерения не является добавочным, v также указывается в качестве входных данных. Обратите внимание, что v задается как вход перед дополнительным входом u.

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

obj = extendedKalmanFilter(f,h,1,'HasAdditiveMeasurementNoise',false);

Укажите ковариацию шума измерения.

obj.MeasurementNoise = 0.01;

Теперь можно оценить состояние системы с помощью predict и correct команды. Вы передаете значения u кому predict и correct, которые, в свою очередь, передают их в функции перехода и измерения состояния соответственно.

Корректировка оценки состояния с помощью измерения y[k]=0.8 и ввод u[k]=0.2 на шаге времени k.

correct(obj,0.8,0.2)

Предсказать состояние на следующем шаге времени, учитывая u[k]=0.2.

predict(obj,0.2)

Извлеките ошибку или остаток между предсказанием и измерением.

[Residual, ResidualCovariance] = residual(obj,0.8,0.2);

Входные аргументы

свернуть все

Расширенный или некачественный фильтр Калмана, созданный с помощью одной из следующих команд:

  • extendedKalmanFilter - использует расширенный алгоритм фильтра Калмана

  • unscentedKalmanFilter - Использует алгоритм фильтра Калмана без запаха

Измеренный выходной сигнал системы на текущем временном шаге, определяемом как вектор N-элемента, где N - количество измерений.

Дополнительные входные аргументы для функции измерения системы, указанные как входные аргументы любого типа. Функция измерения h указана в MeasurementFcn или MeasurementLikelihoodFcn имущество obj. Если функция требует входных аргументов в дополнение к значениям состояния и шума измерения, эти входные значения указываются в residual синтаксис команды. residual команда передает эти входные данные измерению или функции правдоподобия измерения для вычисления оцененных выходных данных. Можно указать несколько аргументов.

Например, предположим, что функция измерения или правдоподобия вычисляет расчетный выходной сигнал системы. y с использованием системных входов u и текущее время k, в дополнение к государству x. Таким образом, Um1 и Um2 термины u(k) и k. Эти входные данные приводят к расчетному результату

y(k) = h(x(k),u(k),k)

Перед выполнением коррекции оценки состояния в режиме онлайн на шаге времени k, укажите эти дополнительные входные данные в residual синтаксис команды:

[Residual,ResidualCovariance] = residual(obj,y,u(k),k);

Пример использования дополнительных входных аргументов см. в разделе Задание функций перехода и измерения состояния с дополнительными входами.

Выходные аргументы

свернуть все

Остаток между текущим и прогнозируемым измерением, возвращаемый как:

  • Скаляр для системы с одним выходом

  • Вектор размера N для системы с несколькими выходами, где N - количество измеренных выходов

Остаточная ковариация, возвращаемая в виде матрицы N-на-N, где N - количество измеренных выходов.

Представлен в R2019b