vision.KalmanFilter

Коррекция измерения, состояния и состояния ошибки расчета ковариации

Описание

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

Создание

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

Примечание

Чтобы облегчить настройку фильтра Калмана, можно использовать configureKalmanFilter объект для настройки фильтра Калмана. Он настраивает фильтр для отслеживания физического объекта в Декартовой системе координат, перемещаясь с постоянной скоростью или постоянным ускорением. Статистика одинаковая по всем размерностям. Если вам нужно сконфигурировать фильтр Калмана с различными допущениями, не используйте функцию, используйте этот объект непосредственно.

В системе пространства состояний модель перехода состояния, A и модель измерения, H, заданы следующим образом:

ПеременнаяЗначение
A[1 1 0 0; 0 1 0 0; 0 0 1 1; 0 0 0 1]
H[1 0 0 0; 0 0 1 0]

Описание

пример

kalmanFilter = vision.KalmanFilter возвращает фильтр Калмана для системы дискретного времени, постоянной скорости.

kalmanFilter = vision.KalmanFilter(StateTransitionModel,MeasurementModel) дополнительно конфигурирует модель управления, B.

kalmanFilter = vision.KalmanFilter(StateTransitionModel,MeasurementModel,ControlModel,Name,Value) конфигурирует свойства объекта фильтра Калмана, заданные как один или несколько Name,Value аргументы в виде пар. Неопределенные свойства имеют значения по умолчанию.

Свойства

расширить все

Модель, описывающая переход между временными шагами (A), заданная как M матрица -by M. После создания объекта это свойство не может быть изменено. Это свойство относится к переменной A в модели пространства состояний.

Модель, описывающая состояние к преобразованию измерения (H), заданная как N -by- M матрица. После создания объекта это свойство не может быть изменено. Это свойство относится к переменной H в модели пространства состояний.

Модель, описывающая вход управления в преобразование состояния (B), заданная как матрица M -by L. После создания объекта это свойство не может быть изменено. Это свойство относится к переменной B в модели thestate-space.

Состояние (x), заданное как скаляр или M элемент. Если вы задаете State в качестве скаляра он будет расширен до вектора M-element. Это свойство относится к переменной x в модели пространства состояний.

Ошибка расчета состояния (P), заданная в виде скаляра или матрицы M -by M. Если вы задаете StateCovariance в качестве скаляра он будет расширен до M -by M диагональной матрицы. Это свойство относится к переменной P в системе в пространстве состояний.

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

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

Функции объекта

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

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

    [...] = predict(kalmanFilter);
    [...] = correct(kalmanFilter,measurement);

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

    [...] = predict(kalmanFilter);
    If measurement exists
    	[...] = correct(kalmanFilter,measurement);
    end

  • Если отслеживаемый объект становится доступным после отсутствия в течение последних t -1 непрерывных временных шагов, можно вызвать predict функция t раз. Этот синтаксис особенно полезен для обработки асинхронного видео. Для примера,

    for i = 1:k
      [...] = predict(kalmanFilter);
    end
    [...] = correct(kalmanFilter,measurement) 

correctКоррекция измерения, состояния и состояния ошибки расчета ковариации
predictПредсказание измерения
distanceДоверительное значение измерения

Примеры

свернуть все

Отслеживайте местоположение физического объекта, движущееся в одном направлении.

Сгенерируйте синтетические данные, которые имитируют 1-D местоположение физического объекта, движущегося с постоянной скоростью.

detectedLocations = num2cell(2*randn(1,40) + (1:40));

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

detectedLocations{1} = [];
  for idx = 16: 25 
      detectedLocations{idx} = []; 
  end

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

figure;
hold on;
ylabel('Location');
ylim([0,50]); 
xlabel('Time');
xlim([0,length(detectedLocations)]);

Figure contains an axes. The axes is empty.

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

kalman = []; 
for idx = 1: length(detectedLocations) 
   location = detectedLocations{idx}; 
   if isempty(kalman)
     if ~isempty(location) 
       
       stateModel = [1 1;0 1]; 
       measurementModel = [1 0]; 
       kalman = vision.KalmanFilter(stateModel,measurementModel,'ProcessNoise',1e-4,'MeasurementNoise',4);
      kalman.State = [location, 0]; 
     end 
   else
     trackedLocation = predict(kalman);
     if ~isempty(location) 
       plot(idx, location,'k+');
      d = distance(kalman,location); 
       title(sprintf('Distance:%f', d));
       trackedLocation = correct(kalman,location); 
     else 
       title('Missing detection'); 
     end 
     pause(0.2);
     plot(idx,trackedLocation,'ro'); 
   end 
 end 
legend('Detected locations','Predicted/corrected locations');

Figure contains an axes. The axes with title Distance:3.126145 contains 66 objects of type line. These objects represent Detected locations, Predicted/corrected locations.

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

Синтезируйте случайный сигнал, который имеет значение 1 и поврежден нулевым Гауссовым шумом со стандартным отклонением 0,1.

x = 1;
len = 100;
z = x + 0.1 * randn(1,len);

Снимите шум с сигнала с помощью фильтра Калмана. Ожидается, что состояние будет постоянным, и измерение будет таким же, как состояние.

stateTransitionModel = 1;
measurementModel = 1;
obj = vision.KalmanFilter(stateTransitionModel,measurementModel,'StateCovariance',1,'ProcessNoise',1e-5,'MeasurementNoise',1e-2);

z_corr = zeros(1,len);
for idx = 1: len
 predict(obj);
 z_corr(idx) = correct(obj,z(idx));
end

Постройте график результатов.

figure, plot(x * ones(1,len),'g-'); 
hold on;
plot(1:len,z,'b+',1:len,z_corr,'r-');
legend('Original signal','Noisy signal','Filtered signal');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Original signal, Noisy signal, Filtered signal.

Алгоритмы

расширить все

Ссылки

[1] Уэлч, Грег и Гэри Бишоп, введение в фильтр Калмана, TR 95-041. Университет Северной Каролины в Чапел-Хилл, департамент компьютерных наук.

[2] Blackman, S. Multi-Target Tracking with Radar Applications. Artech House, Inc., pp. 93, 1986.

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

.

См. также

Функции

Введенный в R2012b