exponenta event banner

gmphd

Гауссова смесь (GM) PHD фильтр

Описание

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

Можно непосредственно создать gmphd фильтр. Можно также инициализировать gmphd фильтр, используемый с trackerPHD путем указания FilterInitializationFcn имущество trackingSensorConfiguration. Вы можете использовать предоставленную initcvgmphd, initctgmphd, initcagmphd, и initctrectgmphd в качестве функций инициализации. Кроме того, можно создать собственные функции инициализации.

Создание

Описание

phd = gmphd создает gmphd фильтр со значениями свойств по умолчанию.

phd = gmphd(states,stateCovariances) позволяет задать состояния и соответствующие ковариации состояний гауссова распределения для каждого компонента в плотности. states и stateCovariances установите States и StateCovariances свойства фильтра.

пример

phd = gmphd(states,stateCovariances,Name,Value) также позволяет задать свойства фильтра, используя одну или несколько пар имя-значение. Заключите каждое имя свойства в кавычки.

Свойства

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

Состояние каждого компонента в фильтре, определяемое как матрица P-by-N, где P - размерность состояния, а N - количество компонентов. Каждый столбец матрицы соответствует состоянию одного компонента. Значение по умолчанию для States является матрицей 6 на 2, в которой все элементы первого столбца равны 0, а все элементы второго столбца равны 1.

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

Ковариация ошибок оценки состояния каждого компонента в фильтре, заданная как массив P-by-P-by-N, где P - размерность состояния, а N - количество компонентов. Каждая страница (матрица P-by-P) массива соответствует ковариационной матрице каждого компонента. Значение по умолчанию для StateCovariances множество 6 на 6 на 2, в котором каждая страница (матрица 6 на 6) является матрицей идентичности.

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

Функция перехода состояния, заданная как дескриптор функции. Эта функция вычисляет вектор состояния на временном шаге k из вектора состояния на временном шаге k-1. Функция также может включать значения шума.

  • Если HasAdditiveProcessNoise является true, укажите функцию, используя один из следующих синтаксисов:

    x(k) = transitionfcn(x(k-1))
    
    x(k) = transitionfcn(x(k-1),dT)
    где x(k) - оценка состояния в момент времени k, и dT является временным шагом.

  • Если HasAdditiveProcessNoise является false, укажите функцию, используя один из следующих синтаксисов:

    x(k) = transitionfcn(x(k-1),w(k-1))
    
    x(k) = transitionfcn(x(k-1),w(k-1),dT)
    где x(k) - оценка состояния в момент времени k, w(k) является технологическим шумом в момент времени k, и dT является временным шагом.

    Дополнительные сведения о модели перехода состояний см. в разделе Алгоритмы для trackingEKF.

Пример: @constacc

Типы данных: function_handle

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

  • Если HasAdditiveProcessNoise является true, укажите якобинскую функцию, используя один из следующих синтаксисов:

    Jx(k) = statejacobianfcn(x(k))
    
    Jx(k) = statejacobianfcn(x(k),dT)
    где x(k) - состояние в момент времени k, dT является временным шагом, и Jx(k) обозначает якобиан функции перехода состояния относительно состояния. Якобиан является P-by-P матрицей в момент времени k, где P - размерность состояния.

  • Если HasAdditiveProcessNoise является false, укажите якобинскую функцию, используя один из следующих синтаксисов:

    [Jx(k),Jw(k)] = statejacobianfcn(x(k),w(k))
    
    [Jx(k),Jw(k)] = statejacobianfcn(x(k),w(k),dT)
    где w(k) - Q-элементный вектор шума процесса в момент времени k. В отличие от случая аддитивного технологического шума, вектор технологического шума в случае аддитивного шума не должен иметь те же размеры, что и вектор состояния.

    Jw(k) обозначает P-на-Q якобиана прогнозируемого состояния относительно элементов шума процесса, где P - размерность состояния.

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

Пример: @constaccjac

Типы данных: function_handle

Ковариация шума технологического процесса:

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

  • Когда HasAdditiveProcessNoise является false, укажите ковариацию шума процесса как матрицу Q-by-Q. Q - размер вектора шума процесса. Необходимо указать ProcessNoise перед любым вызовом predict объектная функция.

Пример: [1.0 0.05; 0.05 2]

Опция моделирования технологического шума в качестве добавки, указанная как true или false. Когда это свойство true, к вектору состояния добавляется шум процесса. В противном случае шум включается в функцию перехода состояния.

Пример: true

Укажите, есть ли у компонентов экстент, указанный как true или false. Установить для этого свойства значение true если фильтр предназначен для отслеживания расширенных объектов. Расширенный объект может генерировать более одного измерения на сканирование датчика. Установить для этого свойства значение false если фильтр предназначен только для отслеживания точечных целей.

Пример: true

Происхождение измерений от расширенных объектов, указанных как:

  • 'center' - Фильтр предполагает, что измерения происходят из среднего состояния цели. Этот подход применим, когда состояние не моделирует степень цели, даже если цель может генерировать более одного измерения.

  • 'extent' - Фильтр предполагает, что измерения не центрированы в среднем состоянии цели. Для эффективности вычислений ожидаемое измерение часто вычисляется как функция сообщаемых измерений, определенных функцией модели измерения.

Обратите внимание, что настройка функции MeasurementFcn и MeasurementJacobianFcn отличаются для 'center' и 'extent' варианты. См. описания MeasurementFcn и MeasurementJacobianFcn для получения дополнительной информации.

Зависимости

Чтобы включить это свойство, установите значение HasExtent свойство для 'true'.

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

Этикетка каждого компонента в смеси, определенной как вектор ряда неотрицательных целых чисел 1 на Н. N - количество компонентов в смеси. Каждый компонент может иметь только одну метку, но несколько компонентов могут совместно использовать одну метку.

Пример: [1 2 3]

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

Вес каждого компонента в смеси, определенной как вектор ряда положительных реальных ценностей 1 на Н. N - количество компонентов в смеси. Вес каждого компонента задается в том же порядке, что и Labels собственность.

Пример: [1.1 0.82 1.1]

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

Обнаружения, указанные как массив ячеек D-элемента objectDetection объекты. Можно непосредственно создавать обнаружения или получать их из выходных данных объектов датчиков, например: radarSensor, monostaticRadarSensor, irSensor, и sonarSensor.

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

Функция модели измерения, заданная как дескриптор функции. Эта функция определяет переход от состояния к измерению. В зависимости от HasExtent и MeasurementOrigin свойства, функция модели измерения должна быть задана по-другому:

  1. HasExtent является false, или HasExtent является true и MeasurementOrigin является 'center'. В этих двух случаях:

    • Если HasAdditiveMeasurementNoise является true, укажите функцию, используя один из следующих синтаксисов:

      z = measurementfcn(x)
      
      z = measurementfcn(x,parameters)
      где матрица P-by-N x - оценочные гауссовы состояния во время k и x(:,i) представляет iКомпонент в третьем состоянии в смеси. Матрица M-by-N z - соответствующее измерение, и z(:,i) представляет измерение, полученное в результате iТретий компонент. Parameters являются MeasurementParameters предоставлены в objectDetections установить в Detections собственность.

    • Если HasAdditiveMeasurementNoise является false, укажите функцию, используя один из следующих синтаксисов:

      z = measurementfcn(x,v)
      
      z = measurementfcn(x,v,parameters)
      где v - R-мерный вектор шума измерения.

  2. HasExtent является true и MeasurementOrigin является 'extent'. В этом случае ожидаемые измерения происходят от степени цели и зависят от фактического распределения обнаружений:

    • Если HasAdditiveMeasurementNoise является true, укажите функцию с помощью:

      z = measurementfcn(x,detections)
      
      где матрица P-by-N x - оценочные гауссовы состояния во время k и x(:,i) представляет iКомпонент в третьем состоянии в смеси. detections является массивом ячеек objectDetection объекты, и z является ожидаемым измерением. Обратите внимание, что z(:,i,j) должен возвращать ожидаемое измерение на основе iКомпонент в-м состоянии и jth objectDetection в detections.

    • Если HasAdditiveMeasurementNoise является false, укажите функцию с помощью:

      z = measurementfcn(x,v,detections)
      
      где v - R-мерный вектор шума измерения.

HasExtentMeasurementOriginФункция измеренияПримечание
falseНА

HasAdditiveMeasurementNoiseСинтаксисы
true

z = measurementfcn(x)

z = measurementfcn (x,para)

false

z = measurementfcn(x,v)

z = measurementfcn (x,v,para)

x(:,i) представляет iКомпонент в третьем состоянии в смеси. z(:,i) представляет измерение, полученное в результате iТретий компонент.

true'center'
true'extent'

HasAdditiveMeasurementNoiseСинтаксисы
truez = measurementfcn(x,detections)
falsez = measurementfcn(x,v,detections)

x(:,i) представляет iКомпонент в третьем состоянии в смеси. z(:,i,j) должен возвращать ожидаемое измерение на основе iКомпонент в-м состоянии и jth objectDetection в detections.

Типы данных: function_handle

Якобиан функции измерения, указанной как дескриптор функции. В зависимости от HasExtent и MeasurementOrigin свойства, измеряемая якобинская функция должна быть указана по-другому:

  1. HasExtent является false, или HasExtent является true и MeasurementOrigin является 'center'. В этих двух случаях:

    • Если HasAdditiveMeasurmentNoise является true, укажите якобинскую функцию, используя один из следующих синтаксисов:

      Jmx = measjacobianfcn(x)
      Jmx = measjacobianfcn(x,parameters)
      где вектор P-элемента x является одним компонентом состояния в момент времени k и Jmx - M-by-P якобиана функции измерения относительно состояния. M - размер измерения. Parameters являются MeasurementParameters предоставлены в objectDetections установить в Detections собственность.

    • Если HasAdditiveMeasurmentNoise является false, укажите якобинскую функцию, используя один из следующих синтаксисов:

      [Jmx,Jmv] = measjacobianfcn(x,v)
      
      [Jmx,Jmv] = measjacobianfcn(x,v,parameters)
      где v - R-мерный вектор шума измерения, и Jmv - M-by-R якобиан измерительной функции относительно измерительного шума.

  2. HasExtent является true и MeasurementOrigin является 'extent'. В этом случае ожидаемые измерения происходят от степени цели и зависят от фактического распределения обнаружений. Функция якобиана измерения должна поддерживать один из двух синтаксисов:

    • Если HasAdditiveMeasurmentNoise является true, укажите функцию якобиана, используя:

      Jmx = measjacobianfcn(x,detections)
      
      где x является одним компонентом оценки состояния в момент времени k. detections - набор обнаружений, определенный как массив ячеек objectDetection объекты. Jmx обозначает M-by-P-by-D якобиана функции измерения относительно состояния. M - размерность измерения, P - размерность состояния, D - число objectDetection объекты в detections.

    • Если HasAdditiveMeasurmentNoise является false, укажите функцию якобиана, используя:

      [Jmx,Jmv] = measjacobianfcn(x,v,detections)
      
      где v - R-мерный вектор шума измерения, и Jmv - M-by-R-by-D якобиан измерительной функции относительно измерительного шума.

    Обратите внимание, что Jmx(:,:,j) должен определить состояние якобиан, соответствующее jth objectDetection в detections. Jmv(:,:,j) определяет шум измерения Jacobian, соответствующий jth objectDetection в detections.

HasExtentMeasurementOriginИзмерение функции ЯкобианаПримечание
falseНА

HasAdditiveMeasurementNoiseСинтаксисы
true

Jmx = measjacobianfcn(x)

Jmx = measjacobianfcn(x,para)

false

[Jmx,Jmv] = measjacobianfcn(x,v)

[Jmx,Jmv] = measjacobianfcn(x,v,para)

x является только одним гауссовым компонентом в смеси.
true'center'
true'extent'

HasAdditiveMeasurementNoiseСинтаксисы
truez = measurementfcn(x,detections)
falsez = measurementfcn(x,v,detections)

Jmx(:,:,j) определяет состояние якобиан, соответствующее jth objectDetection в detections. Jmv(:,:,j) определяет шум измерения Jacobian, соответствующий jth objectDetection в detections.

Типы данных: function_handle

Опция для моделирования шума измерений в качестве добавки, указанная как true или false. Когда это свойство trueк вектору состояния добавляют шум измерения. В противном случае шум включается в функцию измерения.

Пример: true

Максимальное количество обнаружений gmphd фильтр может принимать в качестве входного значения, определяемого как положительное целое число.

Пример: 50

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

Максимальное количество компонентов gmphd фильтр может поддерживать, указанное как положительное целое число.

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

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

predictПредсказать плотность вероятностной гипотезы phd-фильтра
correctUndetectedПравильный phd фильтр без гипотезы обнаружения
correctПравильный phd фильтр с обнаружениями
likelihoodЛогарифмическая вероятность ассоциации между ячейками обнаружения и компонентами в плотности
appendДобавить два phd фильтрация объектов
mergeОбъединение компонентов в плотности phd фильтр
scaleМасштабирование весов компонентов в плотности
pruneУдаление фильтра путем удаления выбранных компонентов
labeledDensityСохранение компонентов с заданным идентификатором метки
extractStateИзвлечь оценки целевого состояния из phd фильтр
cloneСоздать дубликат phd объект фильтра

Примеры

свернуть все

Создайте фильтр с двумя 3D постоянными скоростными компонентами. Начальное состояние одного компонента - [0; 0; 0; 0; 0; 0]. Исходное состояние другого компонента - [1; 0; 1; 0; 1; 0]. Каждый компонент инициализируют с ковариацией положения, равной 1, и ковариацией скорости, равной 100.

states = [zeros(6,1) [1;0;1;0;1;0]];
cov1 = diag([1 100 1 100 1 100]);
covariances = cat(3,cov1,cov1);
phd = gmphd(states, covariances, 'StateTransitionFcn', @constvel,...
    'StateTransitionJacobianFcn',@constveljac,...
    'MeasurementFcn',@cvmeas,...
    'MeasurementJacobianFcn',@cvmeasjac,...
    'ProcessNoise', eye(3),...
    'HasAdditiveProcessNoise',false);
    

Спрогнозировать фильтр на 0,1 шаг вперед.

predict(phd,0.1);

Определите три обнаружения с помощью ojbectDetection.

rng(2019);
detections = cell(3,1);
detections{1} = objectDetection(0,[1;1;1] + randn(3,1));
detections{2} = objectDetection(0,[0;0;0] + randn(3,1));
detections{3} = objectDetection(0,[4;5;5] + randn(3,1));
phd.Detections = detections;

Рассчитайте вероятность каждого обнаружения. Для фильтра «точка-цель» разбиение обнаружений не требуется, и каждое обнаружение занимает ячейку. Поэтому detectionIndices является единичной матрицей. Результирующая вероятность обнаружения 1 и 2 выше, чем вероятность обнаружения 3, поскольку они ближе к компонентам.

detectionIndices = logical(eye(3)); 
logLikelihood = likelihood(phd,detectionIndices)
logLikelihood = 2×3

   -5.2485   -4.7774  -22.8899
   -4.5171   -5.0008  -17.3973

Исправьте фильтр с помощью масштабированного правдоподобия.

lhood = exp(logLikelihood);
lhood = lhood./sum(lhood,2);
correct(phd,detectionIndices,lhood); 

Объединение компонентов с порогом объединения, равным 1.

merge(phd,1);

Извлекают оценки состояния с порогом извлечения, равным 0,5.

minWeight = 0.5;
targetStates = extractState(phd,minWeight);
[ts1,ts2]= targetStates.State;

Визуализация результатов.

% Extract the measurements.
d = [detections{:}];
measurements = [d.Measurement];
% Plot the measurements and estimates.
figure()
plot3(measurements(1,:),measurements(2,:),measurements(3,:),'x','MarkerSize',10,'MarkerEdgeColor','b');
hold on;
plot3(ts1(1),ts1(3),ts1(5),'ro');
hold on;
plot3(ts2(1),ts2(3),ts2(5),'ro');
xlabel('x')
ylabel('y')
zlabel('z')
hold on;
legend('Detections','Components')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Detections, Components.

Ссылки

[1] Vo, B.-T и В. К. Ма. «Фильтр плотности гипотезы вероятности гауссовой смеси». Транзакции IEEE по обработке сигналов, том 54, № 11, стр. 4091-4104, 2006.

[2] Гранстрем, Карл, Кристиан Лундквист и Омут Оргунер. «Расширенное отслеживание цели с помощью PHD-фильтра гауссовой смеси». Сделки IEEE по аэрокосмическим и электронным системам 48, № 4 (2012): 3268-3286.

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

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