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.

Если вы хотите фильтр с переменными с плавающей точкой с одинарной точностью, задаете States как векторная переменная с одинарной точностью. Например,

filter =  gmphd(single(zeros(6,4)),single(ones(6,6,4)))

Типы данных: 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) состояние во время kdt временной шаг и 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-by-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 вектором-строкой из неотрицательных целых чисел. N является количеством компонентов в смеси. Каждый компонент может только иметь одну метку, но несколько компонентов могут совместно использовать ту же метку.

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

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

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

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

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

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

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

Модель Measurement функционирует в виде указателя на функцию. Эта функция задает переход от состояния до измерения. В зависимости от 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) представляет ith утверждают компонент в смеси. M-by-N матричный z соответствующее измерение и z(:,i) представляет измерение, следующее из iкомпонент th. 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) представляет ith утверждают компонент в смеси. detections массив ячеек objectDetection объекты и z ожидаемое измерение. Обратите внимание на то, что z(:,i,j) должен возвратить ожидаемое измерение на основе ith утверждают компонент и jth objectDetection в detections.

    • Если HasAdditiveMeasurementNoise false, задайте функциональное использование:

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

HasExtentMeasurementOriginФункция измеренияПримечание
falseN/A

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

z = measurementfcn(x)

z = measurementfcn (x,para)

false

z = measurementfcn(x,v)

z = measurementfcn (x,v,para)

x(:,i) представляет ith утверждают компонент в смеси. z(:,i) представляет измерение, следующее из iкомпонент th.

true'center'
true'extent'

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

x(:,i) представляет ith утверждают компонент в смеси. z(:,i,j) должен возвратить ожидаемое измерение на основе ith утверждают компонент и 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) задает якобиан шума измерения, соответствующий jth objectDetection в detections.

HasExtentMeasurementOriginФункция Якоби измеренияПримечание
falseN/A

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) задает якобиан шума измерения, соответствующий jth objectDetection в detections.

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

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

Пример: true

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

Пример: 50

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

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

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

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

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

Примеры

свернуть все

Создайте фильтр с двумя 3-D постоянными скоростными компонентами. Начальное состояние одного компонента [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 object. The axes object contains 3 objects of type line. These objects represent Detections, Components.

Ссылки

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

[2] Granstrom, Карл, Кристиан Ландкуист и Омут Оргунер. "Расширенное целевое отслеживание с помощью фильтра Gaussian-mixture PHD". Транзакции IEEE на Космических и Электронных системах 48, № 4 (2012): 3268-3286.

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

Введенный в R2019b