правильный

Правильное ошибочное использование ковариации оценки состояния и оценки состояния расширено или сигма-точечный фильтр Калмана, или фильтр частиц и измерения

Команда correct обновляет ошибочную ковариацию оценки состояния и оценки состояния extendedKalmanFilter, объект unscentedKalmanFilter или particleFilter с помощью измеренной системы выходные параметры. Чтобы реализовать расширенный или сигма-точечный фильтр Калмана или фильтр частиц, используют correct и команды predict вместе. Если измерение текущей производительности существует, можно использовать correct и predict. Если измерение отсутствует, можно только использовать predict. Для получения информации о порядке, в котором можно использовать команды, смотрите Используя, предсказывают и исправляют Команды.

Синтаксис

[CorrectedState,CorrectedStateCovariance] = correct(obj,y)
[CorrectedState,CorrectedStateCovariance] = correct(obj,y,Um1,...,Umn)

Описание

пример

[CorrectedState,CorrectedStateCovariance] = correct(obj,y) исправляет оценку состояния и ошибочную ковариацию оценки состояния расширенного или сигма-точечного фильтра Калмана или объекта obj фильтра частиц с помощью измеренного вывода y.

Вы создаете obj с помощью extendedKalmanFilter, unscentedKalmanFilter или команд particleFilter. Вы задаете функцию изменения состояния и функцию измерения вашей нелинейной системы в obj. Вы также задаете, являются ли условия шума процесса и измерения дополнением или недополнением в этих функциях. Свойство State объектно-ориентированной памяти последнее предполагаемое значение состояния. Примите, что на временном шаге k, obj.State x^[k|k1]. Это значение является оценкой состояния за время k, оцененное использование измеряло выходные параметры до времени k-1. Когда вы используете команду correct с измеренной системой вывод y[k], программное обеспечение возвращает исправленную оценку состояния x^[k|k] в CorrectedState вывод. Где x^[k|k] оценка состояния во время k, оцененное использование измеряло выходные параметры до времени k. Команда возвращает ошибочную ковариацию оценки состояния x^[k|k] в CorrectedStateCovariance вывод. Программное обеспечение также обновляет свойства State и StateCovariance obj с этими исправленными значениями.

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

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

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

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

пример

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

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

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

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

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

Примеры

свернуть все

Оцените состояния осциллятора Ван дер Поля с помощью расширенного алгоритма Фильтра Калмана и измеренных выходных данных. Осциллятор имеет два состояния и один вывод.

Создайте расширенный объект Фильтра Калмана для осциллятора. Использование ранее записанные и сохраненные функции изменения состояния и измерения, 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;

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

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

for k = 1:size(y)
    [CorrectedState,CorrectedStateCovariance] = correct(obj,y(k));
    [PredictedState,PredictedStateCovariance] = predict(obj);
end

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

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

Загрузите данные об ОДУ Ван дер Поля и задайте шаг расчета.

vdpODEdata.mat содержит симуляцию ОДУ Ван дер Поля с параметром нелинейности mu=1, с помощью ode45, с начальными условиями [2;0]. Истинное состояние было извлечено с шагом расчета dt = 0.05.

addpath(fullfile(matlabroot,'examples','control','main')) % add example data

load ('vdpODEdata.mat','xTrue','dt')
tSpan = 0:dt:5;

Получите измерения. В данном примере датчик измеряет первое состояние с Гауссовым шумом со стандартным отклонением 0.04.

sqrtR = 0.04;
yMeas = xTrue(:,1) + sqrtR*randn(numel(tSpan),1);

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

myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);

Инициализируйте фильтр частиц в [2; 0] состояния с модульной ковариацией и используйте частицы 1000.

initialize(myPF,1000,[2;0],eye(2));

Выберите оценку состояния mean и методы передискретизации systematic.

myPF.StateEstimationMethod = 'mean';
myPF.ResamplingMethod = 'systematic';

Оцените состояния с помощью correct и команд predict, и сохраните предполагаемые состояния.

xEst = zeros(size(xTrue));
for k=1:size(xTrue,1)
    xEst(k,:) = correct(myPF,yMeas(k));
    predict(myPF);
end

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

figure(1)
plot(xTrue(:,1),xTrue(:,2),'x',xEst(:,1),xEst(:,2),'ro')
legend('True','Estimated')

rmpath(fullfile(matlabroot,'examples','control','main')) % remove example data

Рассмотрите нелинейную систему с входом 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;

Можно теперь оценить состояние системы с помощью команд correct и predict. Вы передаете значения 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)

Входные параметры

свернуть все

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

  • extendedKalmanFilter — Использует расширенный алгоритм Фильтра Калмана.

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

  • particleFilter — Использует алгоритм фильтра частиц.

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

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

Например, предположите, что ваша функция правдоподобия измерения или измерения вычисляет предполагаемую систему, вывод y с помощью системы вводит u и текущее время k, в дополнение к x состояния:

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

Затем, когда вы выполняете онлайновую оценку состояния на временном шаге k, задаете эти дополнительные входные параметры в синтаксисе команд correct:

[CorrectedState,CorrectedStateCovariance] = correct(obj,y,u(k),k);

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

свернуть все

Исправленная оценка состояния, возвращенная как вектор размера M, где M является количеством состояний системы. Если вы задаете начальные состояния obj как вектор-столбец затем, M возвращен как вектор-столбец, в противном случае M возвращен как вектор - строка.

Для получения информации о том, как задать начальные состояния объекта, смотрите extendedKalmanFilter, unscentedKalmanFilter и страницы с описанием particleFilter.

Исправленная ошибочная ковариация оценки состояния, возвращенная как M-by-M матрица, где M является количеством состояний системы.

Больше о

свернуть все

Используя predict и команды correct

После того, как вы создали расширенное или сигма-точечный фильтр Калмана, или объект фильтра частиц, obj, чтобы реализовать алгоритмы оценки, использует correct и команды predict вместе.

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

[CorrectedState,CorrectedCovariance] = correct(obj,y,Um)

Команда correct обновляет свойства State и StateCovariance объекта с ориентировочными стоимостями, CorrectedState и CorrectedCovariance.

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

[PredictedState,PredictedCovariance] = predict(obj,Us)

Команда predict обновляет свойства State и StateCovariance объекта с ожидаемыми значениями, PredictedState и PredictedCovariance.

Если измерение текущей производительности существует в установленный срок шаг, можно использовать correct и predict. Если измерение отсутствует, можно только использовать predict. Для получения дополнительной информации о том, как эти команды реализуют алгоритмы, смотрите Расширенный и Алгоритмы Сигма-точечного фильтра Калмана для Онлайновой Оценки состояния.

Порядок, в котором вы реализуете команды, зависит от доступности результатов измерений y, Us и Um для вашей системы:

  • correct затем predict — Принимает, что на временном шаге k, значение obj.State x^[k|k1]. Это значение является состоянием системы во время k, оцененное использование измеряло выходные параметры до времени k-1. У вас также есть измеренный вывод y[k], и вводит Us[k], и Um[k] одновременно продвигаются.

    Затем вы сначала выполняете команду correct с измеренными системными данными y[k] и дополнительные входные параметры Um[k]. Команда обновляет значение obj.State, чтобы быть x^[k|k], оценка состояния за время k, оцененное использование измерило выходные параметры до времени k. Когда вы затем выполняете команду predict с входом Us[k], obj.State теперь хранит x^[k+1|k]. Алгоритм использует это значение состояния в качестве входа к команде correct в следующем временном шаге.

  • predict затем correct — Принимает, что на временном шаге k, значение obj.State x^[k1|k1]. У вас также есть измеренный вывод y[k], и вход Um[k] одновременно продвигаются, но у вас есть Us[k-1] от предыдущего временного шага.

    Затем вы сначала выполняете команду predict с входом Us[k-1]. Команда обновляет значение obj.State к x^[k|k1]. Когда вы затем выполняете команду correct с входными параметрами y[k] и Um[k], obj.State обновляется с x^[k|k]. Алгоритм использует это значение состояния в качестве входа к команде predict в следующем временном шаге.

Таким образом, в то время как в обоих случаях оценка состояния за время k, x^[k|k] то же самое, если во время k вы не имеете доступа к входным параметрам функции перехода текущего состояния Us[k], и вместо этого имеете Us[k-1], затем используйте predict сначала и затем correct.

Для примера оценки состояний с помощью predict и команд correct, смотрите Оценочные состояния Онлайн Используя Расширенные состояния Фильтра Калмана или Оценки Онлайн с помощью Фильтра частиц.

Введенный в R2017b