exponenta event banner

extendedKalmanFilter

Создать расширенный объект фильтра Калмана для оценки состояния в оперативном режиме

Описание

пример

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState) создает расширенный объект фильтра Калмана для оперативной оценки состояния дискретно-временной нелинейной системы. StateTransitionFcn является функцией, которая вычисляет состояние системы в момент времени k, учитывая вектор состояния в момент времени k-1. MeasurementFcn является функцией, которая вычисляет выходное измерение системы в момент времени k, учитывая состояние в момент времени k. InitialState определяет начальное значение оценок состояния.

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

пример

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState,Name,Value) задает дополнительные атрибуты расширенного объекта фильтра Калмана с использованием одного или нескольких Name,Value аргументы пары.

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn) создает расширенный объект фильтра Калмана с использованием заданных функций перехода и измерения состояния. Перед использованием predict и correct укажите начальные значения состояния с помощью точечной нотации. Например, для системы с двумя состояниями с начальными значениями состояния [1;0], указать obj.State = [1;0].

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,Name,Value) задает дополнительные атрибуты расширенного объекта фильтра Калмана с использованием одного или нескольких Name,Value аргументы пары. Перед использованием predict и correct , укажите начальные значения состояния с помощью Name,Value парные аргументы или точечная нотация.

пример

obj = extendedKalmanFilter(Name,Value) создает расширенный объект фильтра Калмана со свойствами, заданными с помощью одного или нескольких Name,Value аргументы пары. Перед использованием predict и correct команды, укажите функцию перехода состояния, функцию измерения и начальные значения состояния с помощью Name,Value парные аргументы или точечная нотация.

Описание объекта

extendedKalmanFilter создает объект для оценки оперативного состояния дискретно-временной нелинейной системы с использованием алгоритма дискретно-временного расширенного фильтра Калмана первого порядка.

Рассмотрим установку со состояниями x, input u, output y, process noise w и measurement noise v. Предположим, что можно представить установку как нелинейную систему.

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

  • Аддитивные шумовые термины - уравнения перехода и измерений состояния имеют следующий вид:

    x [k] = f (x [k 1], us [k 1]) + w [k 1] y [k] = h (x [k], um [k]) + v [k]

    Здесь f - нелинейная функция перехода состояний, описывающая эволюцию состояний x от одного временного шага к следующему. Нелинейная функция измерения h x к измерениям y на шаге времени k. w и v являются нулевыми средними, некоррелированными шумами процесса и измерения соответственно. Эти функции могут также иметь дополнительные входные аргументы, которые обозначаются us и um в уравнениях. Например, дополнительные аргументы могут быть временным шагом k или вводы u в нелинейную систему. Таких аргументов может быть несколько.

    Следует отметить, что шумовые члены в обоих уравнениях являются аддитивными. То есть x(k) линейно связан с технологическим шумом w(k-1), и y(k) линейно связан с шумом измерения v(k).

  • Неаддитивные условия шума - программное обеспечение также поддерживает более сложные функции перехода состояния и измерения, где состояние x [k] и измерение y [k] являются нелинейными функциями шума процесса и шума измерения соответственно. Когда шумовые члены являются неаддитивными, уравнение перехода состояния и измерений имеет следующий вид:

    x [k] = f (x [k 1], w [k 1], us [k 1]) y [k] = h (x [k], v [k], um [k])

При выполнении оценки состояния в режиме онлайн сначала создается функция перехода нелинейного состояния f и функция измерения h. Затем вы создадите extendedKalmanFilter объект, использующий эти нелинейные функции, и указать, являются ли члены шума аддитивными или неаддитивными. Также можно указать якобинцы функций перехода и измерения состояния. Если они не указаны, программа численно вычисляет якобинцев.

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

Можно использовать следующие команды с extendedKalmanFilter объекты:

КомандаОписание
correct

Корректировать ковариацию состояния и ошибки оценки состояния на временном шаге k, используя измеренные данные на временном шаге k.

predict

Предсказать ковариацию состояния и ошибки оценки состояния во время следующего временного шага.

residualВозвращает разницу между фактическими и прогнозируемыми измерениями.
clone

Создайте другой объект с теми же значениями свойств объекта.

Не создавать дополнительные объекты с помощью синтаксиса obj2 = obj. Любые изменения, внесенные в свойства нового объекта, созданного таким образом (obj2) также изменить свойства исходного объекта (obj).

Для extendedKalmanFilter свойства объекта см. в разделе Свойства.

Примеры

свернуть все

Для определения расширенного объекта фильтра Калмана для оценки состояний системы сначала необходимо записать и сохранить функцию перехода состояния и функцию измерения для системы.

В этом примере используются ранее записанные и сохраненные функции перехода и измерения состояния. vdpStateFcn.m и vdpMeasurementFcn.m. Эти функции описывают дискретное приближение к генератору ван дер Пол с параметром нелинейности, mu, равным 1. Генератор имеет два состояния.

Укажите начальное предположение для двух состояний. Вы указываете предположение как M-строка элемента или вектор столбца, где M - количество состояний.

initialStateGuess = [1;0];

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

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,initialStateGuess);

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

Для оценки состояния и ковариации ошибки оценки состояния от построенного объекта используйте correct и predict команды и данные в реальном времени.

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

Поскольку система имеет два состояния и шум процесса является аддитивным, шум процесса является 2-элементным вектором, а ковариация шума процесса является матрицей 2 на 2. Предположим, что отсутствует взаимная корреляция между членами шума процесса, и оба члена имеют одинаковую дисперсию 0,01. Ковариацию шума процесса можно задать как скаляр. Программа использует скалярное значение для создания диагональной матрицы 2 на 2 с 0,01 на диагоналях.

Укажите ковариацию технологического шума при построении объекта.

obj = extendedKalmanFilter(@vdpStateFcn,@vdpMeasurementFcn,[2;0],...
    'ProcessNoise',0.01);

Можно также задать ковариации шума после построения объекта с помощью точечной нотации. Например, задайте ковариацию шума измерения как 0,2.

obj.MeasurementNoise = 0.2;

Поскольку система имеет только один выход, шум измерения является 1-элементным вектором и MeasurementNoise свойство обозначает дисперсию шума измерения.

Copyright 2012 The MathWorks, Inc

Создайте расширенный объект фильтра Калмана для осциллятора ван дер Пол с двумя состояниями и одним выходом. Используйте ранее записанные и сохраненные функции перехода и измерения состояния, vdpStateFcn.m и vdpMeasurementFcn.m. Укажите значения начального состояния для двух состояний как [2; 0 ].

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

Расширенный алгоритм фильтра Калмана использует якобинцы функций перехода и измерения состояния для оценки состояния. Вы записываете и сохраняете якобинские функции и предоставляете их в качестве дескрипторов функций объекту. В этом примере следует использовать ранее записанные и сохраненные функции. vdpStateJacobianFcn.m и vdpMeasurementJacobianFcn.m.

obj.StateTransitionJacobianFcn = @vdpStateJacobianFcn;
obj.MeasurementJacobianFcn = @vdpMeasurementJacobianFcn;

Обратите внимание, что если якобинцы функций не указаны, программа численно вычисляет якобианы. Это численное вычисление может привести к увеличению времени обработки и численной неточности оценки состояния.

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

obj = extendedKalmanFilter('HasAdditiveMeasurementNoise',false);

Укажите функцию перехода состояния и функции измерения. Используйте ранее записанные и сохраненные функции, vdpStateFcn.m и vdpMeasurementNonAdditiveNoiseFcn.m.

Функция перехода состояния записывается в предположении, что шум процесса является аддитивным. Функция измерения записывается в предположении, что шум измерения является неаддитивным.

obj.StateTransitionFcn = @vdpStateFcn;
obj.MeasurementFcn = @vdpMeasurementNonAdditiveNoiseFcn;

Укажите значения начального состояния для двух состояний как [2; 0].

obj.State = [2;0];

Теперь вы можете использовать correct и predict команды оценки значений ковариации состояния и ошибки оценки состояния от построенного объекта.

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

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

свернуть все

Функция перехода состояния f, заданная как дескриптор функции. Функция вычисляет вектор состояния Ns-элемента системы на временном шаге k, учитывая вектор состояния на временном шаге k-1. Ns - количество состояний нелинейной системы.

Следует записать и сохранить функцию перехода состояния для нелинейной системы и использовать ее для построения объекта. Например, если vdpStateFcn.m - функция перехода состояния, укажите StateTransitionFcn как @vdpStateFcn. Можно также указать StateTransitionFcn как дескриптор функции для анонимной функции.

Входные данные записываемой функции зависят от того, указан ли шум процесса в качестве аддитивного или неаддитивного в HasAdditiveProcessNoise свойство объекта:

  • HasAdditiveProcessNoise true - Шум процесса w является аддитивной, и функция перехода состояния определяет, как состояния развиваются как функция значений состояния на предыдущем шаге времени:

    x(k) = f(x(k-1),Us1,...,Usn)

    Где x(k) - оценочное состояние в момент времени k, и Us1,...,Usn любые дополнительные входные аргументы, необходимые для функции перехода состояния, такие как системные входные данные или время выборки. Во время оценки вы передаете эти дополнительные аргументы predict , которая, в свою очередь, передает их функции перехода состояния.

  • HasAdditiveProcessNoise false - шум процесса является неаддитивным, и функция перехода состояния также определяет, как состояния развиваются как функция шума процесса:

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

Для просмотра примера функции перехода состояния с аддитивным технологическим шумом введите edit vdpStateFcn в командной строке.

Функция измерения h, заданная как дескриптор функции. Функция вычисляет вектор выходного измерения N-элемента нелинейной системы на временном шаге k, учитывая вектор состояния на временном шаге k. N - количество измерений системы. Следует записать и сохранить функцию измерения и использовать ее для построения объекта. Например, если vdpMeasurementFcn.m - функция измерения, укажите MeasurementFcn как @vdpMeasurementFcn. Можно также указать MeasurementFcn как дескриптор функции для анонимной функции.

Входные данные функции зависят от того, указан ли шум измерения в качестве аддитивного или неаддитивного в HasAdditiveMeasurementNoise свойство объекта:

  • HasAdditiveMeasurementNoise true - Шум измерения v является аддитивной, и функция измерения определяет, как измерения развиваются в зависимости от значений состояния:

    y(k) = h(x(k),Um1,...,Umn)

    Где y(k) и x(k) являются оценочным выходом и оценочным состоянием во время k, и Um1,...,Umn любые необязательные входные аргументы, необходимые для функции измерения. Например, если для отслеживания объекта используется несколько датчиков, дополнительным вводом может быть положение датчика. Во время оценки вы передаете эти дополнительные аргументы correct , которая, в свою очередь, передает их функции измерения.

  • HasAdditiveMeasurementNoise false - шум измерения является неаддитивным, и функция измерения также определяет, как развивается выходное измерение как функция шума измерения:

    y(k) = h(x(k),v(k),Um1,...,Umn)

Для просмотра примера функции измерения с аддитивным технологическим шумом введите edit vdpMeasurementFcn в командной строке. Для просмотра примера функции измерения с неаддитивным технологическим шумом введите edit vdpMeasurementNonAdditiveNoiseFcn.

Начальное значение оценки состояния, указанное как вектор Ns-элемента, где Ns - количество состояний в системе. Укажите начальные значения состояния на основе знаний о системе.

Указанное значение сохраняется в State свойства объекта. При указании InitialState в виде вектора-столбца, затем State также является вектором столбца, и predict и correct команды возвращают оценки состояния в виде вектора столбца. В противном случае возвращается вектор строки.

Если требуется фильтр с переменными с плавающей запятой с одинарной точностью, укажите InitialState как векторная переменная с одной точностью. Например, для системы с двумя состояниями с функциями перехода и измерения состояний vdpStateFcn.m и vdpMeasurementFcn.m, создайте расширенный объект фильтра Калмана с исходными оценками состояния [1;2] следующим образом:

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

Типы данных: double | single

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Использовать Name,Value аргументы для указания свойств extendedKalmanFilter во время создания объекта. Например, чтобы создать расширенный объект фильтра Калмана и задать ковариацию шума процесса как 0,01:

obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState,'ProcessNoise',0.01);

Свойства

свернуть все

extendedKalmanFilter свойства объекта имеют три типа:

  • Настраиваемые свойства, которые можно задать несколько раз при построении объекта с помощью Name,Value аргументы или любое время после этого во время оценки состояния. После создания объекта используйте точечную нотацию для изменения настраиваемых свойств.

    obj = extendedKalmanFilter(StateTransitionFcn,MeasurementFcn,InitialState);
    obj.ProcessNoise = 0.01;

    Настраиваемые свойства: State, StateCovariance, ProcessNoise, и MeasurementNoise.

  • Неперестраиваемые свойства, которые можно задать один раз, либо во время построения объекта, либо после этого с помощью понятия точки. Укажите эти свойства перед оценкой состояния с помощью correct и predict. StateTransitionFcn, MeasurementFcn, StateTransitionJacobianFcn, и MeasurementJacobianFcn свойства относятся к этой категории.

  • Неперестраиваемые свойства, которые необходимо указать при построении объекта. HasAdditiveProcessNoise и HasAdditiveMeasurementNoise свойства относятся к этой категории.

Характеристики шума измерений, указанные как одно из следующих значений:

  • true - Измерительный шум v является добавкой. Функция измерения h, указанная в MeasurementFcn имеет следующую форму:

    y(k) = h(x(k),Um1,...,Umn)

    Где y(k) и x(k) являются оценочным выходом и оценочным состоянием во время k, и Um1,...,Umn любые необязательные входные аргументы, необходимые для функции измерения.

  • false - Шум измерения не является добавочным. Функция измерения определяет, как развивается выходное измерение в зависимости от состояния и шума измерения:

    y(k) = h(x(k),v(k),Um1,...,Umn)

HasAdditiveMeasurementNoise является неперестраиваемым свойством, и его можно указать только во время построения объекта. Его нельзя изменить с помощью точечной нотации.

Характеристики технологического шума, указанные как одно из следующих значений:

  • true - Технологический шум w является добавкой. Функция перехода состояния f, указанная в StateTransitionFcn имеет следующую форму:

    x(k) = f(x(k-1),Us1,...,Usn)

    Где x(k) - оценочное состояние в момент времени k, и Us1,...,Usn любые дополнительные входные аргументы, необходимые для функции перехода состояния.

  • false - Шум процесса не является аддитивным. Функция перехода состояния определяет, как состояния развиваются как функция состояния, и обрабатывает шум на предыдущем шаге времени:

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

HasAdditiveProcessNoise является неперестраиваемым свойством, и его можно указать только во время построения объекта. Его нельзя изменить с помощью точечной нотации.

Функция измерения h, заданная как дескриптор функции. Функция вычисляет вектор выходного измерения N-элемента нелинейной системы на временном шаге k, учитывая вектор состояния на временном шаге k. N - количество измерений системы. Следует записать и сохранить функцию измерения и использовать ее для построения объекта. Например, если vdpMeasurementFcn.m - функция измерения, укажите MeasurementFcn как @vdpMeasurementFcn. Можно также указать MeasurementFcn как дескриптор функции для анонимной функции.

Входные данные функции зависят от того, указан ли шум измерения в качестве аддитивного или неаддитивного в HasAdditiveMeasurementNoise свойство объекта:

  • HasAdditiveMeasurementNoise true - Шум измерения v является аддитивной, и функция измерения определяет, как измерения развиваются в зависимости от значений состояния:

    y(k) = h(x(k),Um1,...,Umn)

    Где y(k) и x(k) являются оценочным выходом и оценочным состоянием во время k, и Um1,...,Umn любые необязательные входные аргументы, необходимые для функции измерения. Например, если для отслеживания объекта используется несколько датчиков, дополнительным вводом может быть положение датчика. Во время оценки вы передаете эти дополнительные аргументы correct команда, которая, в свою очередь, передает их функции измерения.

  • HasAdditiveMeasurementNoise false - шум измерения является неаддитивным, и функция измерения также определяет, как развивается выходное измерение как функция шума измерения:

    y(k) = h(x(k),v(k),Um1,...,Umn)

Для просмотра примера функции измерения с аддитивным технологическим шумом введите edit vdpMeasurementFcn в командной строке. Для просмотра примера функции измерения с неаддитивным технологическим шумом введите edit vdpMeasurementNonAdditiveNoiseFcn.

MeasurementFcn является неперестраиваемым свойством. Вы можете указать его один раз, прежде чем использовать correct либо во время построения объекта, либо с использованием точечной нотации после построения объекта. Вы не можете изменить его после использования correct команда.

Якобиан функции измерения h, указанный как один из следующих:

  • [] - Якобиан численно вычисляется при каждом вызове correct команда. Это может увеличить время обработки и численную неточность оценки состояния.

  • дескриптор функции - запись и сохранение функции якобиана и указание дескриптора функции. Например, если vdpMeasurementJacobianFcn.m - функция Якобиана, указать MeasurementJacobianFcn как @vdpMeasurementJacobianFcn.

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

    • HasAdditiveMeasurementNoise true - функция вычисляет частные производные функции измерения относительно состояний (∂h/∂x). Выходной сигнал представляет собой матрицу якобиана N-by-Ns, где N - число измерений системы, а Ns - число состояний.

    • HasAdditiveMeasurementNoise false - функция также возвращает второй выходной сигнал, представляющий собой частную производную функции измерения относительно членов шума измерения (∂h/∂v). Второй выходной сигнал возвращается в виде матрицы якобиана N-на-V, где V - число членов шума измерения.

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

MeasurementJacobianFcn является неперестраиваемым свойством. Вы можете указать его один раз, прежде чем использовать correct либо во время построения объекта, либо с использованием точечной нотации после построения объекта. Вы не можете изменить его после использования correct команда.

Ковариация шума измерения, заданная как скаляр или матрица в зависимости от значения HasAdditiveMeasurementNoise свойство:

  • HasAdditiveMeasurementNoise true - укажите ковариацию как скаляр или матрицу N-на-N, где N - число измерений системы. Укажите скаляр, если нет взаимной корреляции между членами шума измерения и все члены имеют одинаковую дисперсию. Программа использует скалярное значение для создания диагональной матрицы N-на-N.

  • HasAdditiveMeasurementNoise false - определяет ковариацию как матрицу V-by-V, где V - число членов шума измерения. MeasurementNoise необходимо указать перед использованием correct. После указания MeasurementNoise в качестве матрицы в первый раз, чтобы затем изменить MeasurementNoise можно также указать его как скаляр. Укажите как скаляр, если нет взаимной корреляции между членами шума измерения, и все члены имеют одинаковую дисперсию. Программа расширяет скаляр до диагональной матрицы V-by-V со скаляром на диагоналях.

MeasurementNoise является настраиваемым свойством. Его можно изменить с помощью точечной нотации.

Ковариация шума процесса, заданная как скаляр или матрица в зависимости от значения HasAdditiveProcessNoise свойство:

  • HasAdditiveProcessNoise true - укажите ковариацию как скаляр или матрицу Ns-by-Ns, где Ns - число состояний системы. Укажите скаляр, если между членами шума процесса нет взаимной корреляции, и все члены имеют одинаковую дисперсию. Программа использует скалярное значение для создания диагональной матрицы Ns-by-Ns.

  • HasAdditiveProcessNoise false - определяет ковариацию как матрицу W-by-W, где W - число членов шума процесса. ProcessNoise необходимо указать перед использованием predict. После указания ProcessNoise в качестве матрицы в первый раз, чтобы затем изменить ProcessNoise можно также указать его как скаляр. Укажите как скаляр, если нет взаимной корреляции между членами шума процесса, и все члены имеют одинаковую дисперсию. Программное обеспечение расширяет скаляр до диагональной матрицы W-by-W.

ProcessNoise является настраиваемым свойством. Его можно изменить с помощью точечной нотации.

Состояние нелинейной системы, определяемое как вектор размера Ns, где Ns - количество состояний системы.

При использовании predict команда, State обновляют прогнозируемым значением на временном шаге k с использованием значения состояния на временном шаге k-1. При использовании correct команда, State обновляют оцененным значением на временном шаге k с использованием измеренных данных на временном шаге k.

Начальное значение State - это значение, указанное в InitialState входной аргумент при создании объекта. При указании InitialState в виде вектора-столбца, затем State также является вектором столбца, и predict и correct команды возвращают оценки состояния в виде вектора столбца. В противном случае возвращается вектор строки. Если требуется фильтр с переменными с плавающей запятой с одинарной точностью, необходимо указать State как переменная с одной точностью при построении объекта с использованием InitialState входной аргумент.

State является настраиваемым свойством. Его можно изменить с помощью точечной нотации.

Ковариация ошибок оценки состояния, заданная как скаляр или матрица Ns-by-Ns, где Ns - количество состояний системы. Если указать скаляр, программа использует скалярное значение для создания диагональной матрицы Ns-by-Ns.

Укажите высокое значение ковариации, если нет уверенности в исходных значениях состояния, указанных в InitialState входной аргумент.

При использовании predict команда, StateCovariance обновляют прогнозируемым значением на временном шаге k с использованием значения состояния на временном шаге k-1. При использовании correct команда, StateCovariance обновляют оцененным значением на временном шаге k с использованием измеренных данных на временном шаге k.

StateCovariance является настраиваемым свойством. Вы можете изменить его с помощью точечной нотации после использования correct или predict команды.

Функция перехода состояния f, заданная как дескриптор функции. Функция вычисляет вектор состояния Ns-элемента системы на временном шаге k, учитывая вектор состояния на временном шаге k-1. Ns - количество состояний нелинейной системы.

Следует записать и сохранить функцию перехода состояния для нелинейной системы и использовать ее для построения объекта. Например, если vdpStateFcn.m - функция перехода состояния, укажите StateTransitionFcn как @vdpStateFcn. Можно также указать StateTransitionFcn как дескриптор функции для анонимной функции.

Входные данные записываемой функции зависят от того, указан ли шум процесса в качестве аддитивного или неаддитивного в HasAdditiveProcessNoise свойство объекта:

  • HasAdditiveProcessNoise true - Шум процесса w является аддитивной, и функция перехода состояния определяет, как состояния развиваются как функция значений состояния на предыдущем шаге времени:

    x(k) = f(x(k-1),Us1,...,Usn)

    Где x(k) - оценочное состояние в момент времени k, и Us1,...,Usn любые дополнительные входные аргументы, необходимые для функции перехода состояния, такие как системные входные данные или время выборки. Во время оценки вы передаете эти дополнительные аргументы predict , которая, в свою очередь, передает их функции перехода состояния.

  • HasAdditiveProcessNoise false - шум процесса является неаддитивным, и функция перехода состояния также определяет, как состояния развиваются как функция шума процесса:

    x(k) = f(x(k-1),w(k-1),Us1,...,Usn)

Для просмотра примера функции перехода состояния с аддитивным технологическим шумом введите edit vdpStateFcn в командной строке.

StateTransitionFcn является неперестраиваемым свойством. Вы можете указать его один раз, прежде чем использовать predict либо во время построения объекта, либо с использованием точечной нотации после построения объекта. Вы не можете изменить его после использования predict команда.

Якобиан функции перехода состояния f, определяемой как одно из следующих:

  • [] - Якобиан численно вычисляется при каждом вызове predict команда. Это может увеличить время обработки и численную неточность оценки состояния.

  • дескриптор функции - запись и сохранение функции якобиана и указание дескриптора функции. Например, если vdpStateJacobianFcn.m - функция Якобиана, указать StateTransitionJacobianFcn как @vdpStateJacobianFcn.

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

    • HasAdditiveProcessNoise true - функция вычисляет частную производную функции перехода состояния относительно состояний (∂f/∂x). Выходной сигнал представляет собой матрицу якобиана Ns-by-Ns, где Ns - число состояний.

    • HasAdditiveProcessNoise false - функция также должна возвращать второй выход, который является частной производной функции перехода состояния относительно членов шума процесса (∂f/∂w). Второй выходной сигнал возвращается в виде матрицы якобиана Ns-by-W, где W - число членов шума процесса.

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

Для просмотра примера функции якобиана для аддитивного технологического шума введите edit vdpStateJacobianFcn в командной строке.

StateTransitionJacobianFcn является неперестраиваемым свойством. Вы можете указать его один раз, прежде чем использовать predict либо во время построения объекта, либо с использованием точечной нотации после построения объекта. Вы не можете изменить его после использования predict команда.

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

свернуть все

Расширенный объект фильтра Калмана для оценки состояния в режиме онлайн, возвращенный как extendedKalmanFilter объект. Этот объект создается с использованием указанных свойств. Используйте correct и predict команды для оценки ковариации состояния и ошибки оценки состояния с использованием расширенного алгоритма фильтра Калмана.

При использовании predict, obj.State и obj.StateCovariance обновляют прогнозируемым значением на временном шаге k, используя значение состояния на временном шаге k-1. При использовании correct, obj.State и obj.StateCovariance обновляют оценочными значениями на временном шаге k с использованием измеренных данных на временном шаге k.

Вопросы совместимости

развернуть все

В R2020b изменилось поведение

Расширенные возможности

.
Представлен в R2016b