residual

Возвратите невязку измерения и остаточную ковариацию при использовании сигма-точечного фильтра Калмана

Описание

residual команда возвращает различие между фактическими и предсказанными измерениями для extendedKalmanFilter и unscentedKalmanFilter объекты. Просмотр невязки обеспечивает способ для вас подтвердить производительность фильтра. Остаточные значения, также известные как innovations, определяют количество ошибки прогноза и управляют шагом коррекции в расширенном и последовательности обновления сигма-точечного фильтра Калмана. При использовании correct и predict чтобы обновить предполагаемое состояние Фильтра Калмана, используйте 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')

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

M = [y,xcorBuf(:,1),residBuf];
plot(M)
grid on
title('Actual and Estimated Measurements, Residual')
legend('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, которые в свою очередь передают их функциям изменения состояния и измерения, соответственно.

Откорректируйте оценку состояния измерением yK]=0.8 и вход uK]=0.2 на временном шаге k.

correct(obj,0.8,0.2)

Предскажите состояние на следующем временном шаге, учитывая uK]=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);

Для примера, показывающего, как использовать дополнительные входные параметры, смотрите, Задают Функции Изменения состояния и Измерения с Дополнительными Входными параметрами.

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

свернуть все

Невязка между текущим и предсказанным измерением, возвращенным как a:

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

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

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

Введенный в R2019b