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-пробела.

Состояние (x) в виде скаляра или M - вектор элемента. Если вы задаете State как скаляр, это будет расширено к M - вектор элемента. Это свойство относится к переменной 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Значение доверия измерения

Примеры

свернуть все

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

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

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)]);

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

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');

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

Синтезируйте случайный сигнал, который имеет значение 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');

Алгоритмы

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

Ссылки

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

[2] Блэкмен, S. Несколько - Целевое Отслеживание с Радарными Приложениями. Artech House, Inc., стр 93, 1986.

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

Смотрите также

Функции

Представленный в R2012b