расстояние

Значение уверенности измерения

Синтаксис

d = distance(kalmanFilter,zmatrix)

Описание

пример

d = distance(kalmanFilter,zmatrix) вычисляет расстояние между местоположением обнаруженного объекта и предсказанным местоположением объектом Фильтра Калмана. Это вычисление расстояния учитывает ковариацию предсказанного состояния и шума процесса. Функция distance может только быть вызвана после функции 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');

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

свернуть все

Объект фильтра Калмана.

Местоположение обнаруженного объекта, заданного как N - матрица столбца. Каждая матрица строки содержит вектор измерения. Функция distance возвращает вектор - строку, где каждый элемент расстояния соответствует входу измерения.

Больше о

свернуть все

Уравнение расстояния

d(z)=(zHx)T1(zHx)+ln||

Где Σ=HPHT+R и |Σ| детерминант Σ. Можно затем найти лучшие соответствия путем исследования возвращенных значений расстояния.

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

|

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