gmphd

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

Описание

The 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 -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

Функция модели измерения, заданная как указатель на функцию. Эта функция задает переход от состояния к измерению. В зависимости от 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компонент 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компонент 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компонент I состояния в смеси. z(:,i) представляет измерение, полученное из i-й компонент.

true'center'
true'extent'

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

x(:,i) представляет 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) задает измерение шум якобиан, соответствующий 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) задает измерение шум якобиан, соответствующий 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 объект фильтра

Примеры

свернуть все

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

Ссылки

[1] Vo, B. -T и W. K. Ma. Фильтр плотности гипотезы вероятностей Гауссовой смеси. Транзакции IEEE по обработке сигналов, Vol, 54, No, 11, pp. 4091-4104, 2006.

[2] Granstrom, Karl, Christian Lundquist, and Omut Orguner. Расширенное отслеживание цели с использованием PHD-фильтра Гауссовой смеси. Сделки IEEE по аэрокосмическим и электронным системам 48, № 4 (2012): 3268-3286.

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

.
Введенный в R2019b