distance

Значение доверия измерения

Описание

пример

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