ggiwphd

Фильтр Gamma Gaussian Inverse Wishart (GGIW) PHD

Описание

Объект ggiwphd является фильтром, который реализует плотность гипотезы вероятности (PHD) с помощью смеси компонентов Гэммы Госсиэна Обратного Уишарта. Реализация GGIW фильтра PHD обычно используется, чтобы отследить расширенные объекты. Расширенный объект может произвести несколько обнаружений на датчик, и фильтр GGIW использует случайную матричную модель, чтобы составлять пространственное распределение этих обнаружений. Фильтр состоит из трех дистрибутивов, чтобы представлять состояние расширенного объекта.

  1. Распределение Гаусса — представляет кинематическое состояние расширенного объекта.

  2. Гамма распределение — представляет ожидаемое количество обнаружений на датчике от расширенного объекта.

  3. Распределение Обратного Уишарта (IW) — представляет пространственную степень цели. На 2D пробеле степень представлена случайной положительной определенной матрицей 2 на 2, которая соответствует 2D описанию эллипса. На 3-D пробеле степень представлена 3х3 случайной матрицей, которая соответствует 3-D описанию эллипсоида. Плотность вероятности этих случайных матриц дана как распределение Обратного Уишарта.

Для получения дополнительной информации о ggiwphd, см. [1] и [2].

Примечание

Объект ggiwphd не совместим с trackerGNN, trackerJPDA и системными объектами trackerTOMHT.

Создание

Синтаксис

PHD = ggiwphd
PHD = ggiwphd(States,StateCovariances)
phd = ggiwphd(States,StateCovariances,Name,Value)

Описание

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

PHD = ggiwphd(States,StateCovariances) позволяет вам задавать States и StateCovariances Распределения Гаусса для каждого компонента в плотности. States и StateCovariances устанавливают свойства тех же имен.

пример

phd = ggiwphd(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

Индексы положения координируют в состоянии, заданном как вектор - строка из положительных целых чисел. Например, по умолчанию состояние располагается как [x; vx; y;; z;] и соответствующий индекс положения является [1 3 5], представляющий x-, y-и координаты z-position.

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

Типы данных: 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 является временным шагом.

Пример: @constacc

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

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

  • Если HasAdditiveProcessNoise является true, задайте Функцию Якоби с помощью одного из этих синтаксисов:

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

  • Если 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. Q является размерностью шума процесса. В отличие от случая шума аддитивного процесса, вектор шума процесса в неаддитивном шумовом случае не должен иметь тех же размерностей как вектор состояния.

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

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

Пример: @constaccjac

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

Ковариация шума процесса:

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

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

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

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

Пример: true

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

Пример: [1.0 0.95 2]

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

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

Пример: [1.2 0.85 1.5]

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

Упущение фактора Гамма распределения для каждого компонента, заданного как 1 N вектором - строкой из положительных действительных значений. N является количеством компонентов в плотности. Во время прогноза, для каждого компонента, Гамма параметры распределения, форма (α) и уровень (β), оба разделены путем упущения факторного n:

где k и k +1 представляют два последовательных временных шага. Среднее значение (E) и отклонение (Var) Гамма распределения:

Поэтому действие деления сохранит ожидаемый уровень измерения как константу, но увеличит отклонение Гамма распределения экспоненциально со временем, если забывающий факторный n будет больше, чем 1.

Пример: [1.2 1.1 1.4]

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

Параметр степеней свободы распределения Обратного Уишарта для каждого компонента, заданного как 1 N вектором - строкой из положительных действительных значений. N является количеством компонентов в плотности.

Пример: [55.2 31.1 20.4]

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

Матрица шкалы распределения Обратного Уишарта для каждого компонента, заданного как d-by-d-by-N массив положительных действительных значений. d является размерностью пробела (например, d = 2 для 2D пробела), и N является количеством компонентов в плотности. Значение по умолчанию для ScaleMatrices является 3 3 2 массивами, где каждой страницей (3х3 матрица) массива является 100*eye(3).

Пример: 20*eye(3,3,4)

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

Функция перехода вращения степени цели, заданной как указатель на функцию. Функция позволяет предсказывать вращение степени цели, когда угловая скорость объекта оценивается в векторе состояния. Чтобы задать вашу собственную функцию вращения степени, следуйте за синтаксисом, данным

R = myRotationFcn(x,dT)

где x является состоянием компонента, dT является временным шагом, и R является соответствующей матрицей вращения. Обратите внимание на то, что R возвращен как матрица 2 на 2, если степень 2D, и 3х3 матрица, если степень 3-D. Степенью на следующем шаге дают

где Ex (t) является степенью во время t.

Пример: @myRotationFcn

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

Временный фактор затухания распределения IW, заданного как положительная скалярная величина. Можно использовать это свойство управлять неуверенностью степени (отклонение распределения IW) во время прогноза. Чем меньше значение TemporalDecay, тем быстрее отклонение распределения IW увеличивается.

Пример: 120

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

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

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

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

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

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

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

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

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

Функция модели Measurement, заданная как указатель на функцию. Эта функция задает переход от состояния до измерения. Входом к функции является P - вектор состояния элемента. Выводом является M - вектор измерения элемента. Функция может взять дополнительные входные параметры, такие как положение датчика и ориентация.

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

    z(k) = measurementfcn(x(k))
    
    z(k) = measurementfcn(x(k),parameters)
    где x(k) является состоянием во время, k и z(k) являются соответствующим измерением. Аргумент parameters обозначает все дополнительные аргументы, требуемые функцией измерения.

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

    z(k) = measurementfcn(x(k),v(k))
    
    z(k) = measurementfcn(x(k),v(k),parameters)
    где x(k) является состоянием во время, k и v(k) являются шумом измерения во время k. Аргумент parameters обозначает все дополнительные аргументы, требуемые функцией измерения.

Пример: @cameas

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

Якобиан функции измерения, заданной как указатель на функцию. Функция имеет те же входные параметры как функция измерения. Функция может взять дополнительные входные параметры, такие как положение датчика и ориентация.

  • Если HasAdditiveMeasurmentNoise является true, задайте Функцию Якоби с помощью одного из этих синтаксисов:

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

  • Если HasAdditiveMeasurmentNoise является false, задайте Функцию Якоби с помощью одного из этих синтаксисов:

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

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

Пример: @cameasjac

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

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

Пример: true

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

Пример: 50

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

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

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

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

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

Примеры

свернуть все

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

states = [zeros(6,1),[1;0;1;0;1;0]];
cov1 = diag([1 100 1 100 1 100]);
covariances = cat(3,cov1,cov1);

phd = ggiwphd(states,covariances,'StateTransitionFcn',@constvel,...
             'StateTransitionJacobianFcn',@constveljac,...
             'MeasurementFcn',@cvmeas,'MeasurementJacobianFcn',@cvmeasjac,...
             'ProcessNoise',eye(3),'HasAdditiveProcessNoise',false,...
             'PositionIndex',[1;3;5]);

Укажите информацию о степени.

dofs = [21 30];
scaleMatrix1 = 13*diag([4.7 1.8 1.4].^2);
scaleMatrix2 = 22*diag([1.8 4.7 1.4].^2);
scaleMatrices = cat(3,scaleMatrix1,scaleMatrix2);
phd.DegreesOfFreedom = dofs;
phd.ScaleMatrices = scaleMatrices;
phd.ExtentRotationFcn = @(x,dT)eye(3); % No rotation during prediction

Предскажите фильтр 0,1 секунды вперед.

predict(phd,0.1);

Задайте обнаружения в 0,1 секунды. Фильтр получает 10 обнаружений на текущем сканировании.

detections = cell(10,1);
rng(2018); % Reproducible results
for i = 1:10
   detections{i} = objectDetection(0.1,randi([0 1]) + randn(3,1));
end
phd.Detections = detections;

Выберите две ячейки обнаружения и вычислите их вероятности.

detectionIDs = false(10,2);
detectionIDs([1 3 5 7 9],1) = true;
detectionIDs([2 4 6 8 10],2) = true;
lhood = likelihood(phd,detectionIDs)
lhood =

    1.5575   -0.3183
    0.1513   -0.7616

Исправьте фильтр с двумя ячейками обнаружения и сопоставленными вероятностями.

correct(phd,detectionIDs, exp(lhood)./sum(exp(lhood),1));
phd
phd = 

  ggiwphd with properties:

                         States: [6x4 double]
               StateCovariances: [6x6x4 double]
                  PositionIndex: [3x1 double]
             StateTransitionFcn: @constvel
     StateTransitionJacobianFcn: @constveljac
                   ProcessNoise: [3x3 double]
        HasAdditiveProcessNoise: 0

                         Shapes: [6 6 6 6]
                          Rates: [2 2 2 2]
         GammaForgettingFactors: [1 1 1 1]

               DegreesOfFreedom: [25.9870 34.9780 25.9870 34.9780]
                  ScaleMatrices: [3x3x4 double]
              ExtentRotationFcn: @(x,dT)eye(3)
                  TemporalDecay: 100

                        Weights: [0.8032 0.1968 0.6090 0.3910]
                         Labels: [0 0 0 0]

                     Detections: {1x10 cell}
                 MeasurementFcn: @cvmeas
         MeasurementJacobianFcn: @cvmeasjac
    HasAdditiveMeasurementNoise: 1

Объедините компоненты в фильтре.

merge(phd,5);
phd
phd = 

  ggiwphd with properties:

                         States: [6x2 double]
               StateCovariances: [6x6x2 double]
                  PositionIndex: [3x1 double]
             StateTransitionFcn: @constvel
     StateTransitionJacobianFcn: @constveljac
                   ProcessNoise: [3x3 double]
        HasAdditiveProcessNoise: 0

                         Shapes: [6 6]
                          Rates: [2 2]
         GammaForgettingFactors: [1 1]

               DegreesOfFreedom: [25.9870 34.9780]
                  ScaleMatrices: [3x3x2 double]
              ExtentRotationFcn: @(x,dT)eye(3)
                  TemporalDecay: 100

                        Weights: [1.4122 0.5878]
                         Labels: [0 0]

                     Detections: {1x10 cell}
                 MeasurementFcn: @cvmeas
         MeasurementJacobianFcn: @cvmeasjac
    HasAdditiveMeasurementNoise: 1

Извлеките оценки состояния и обнаружения.

targetStates = extractState(phd,0.5);
tStates = targetStates.State

d = [detections{:}];
measurements = [d.Measurement];
tStates =

    0.1947
    0.9733
    0.8319
    4.1599
   -0.0124
   -0.0621

Визуализируйте результаты.

figure()
plot3(measurements(1,:),measurements(2,:),measurements(3,:),'x','MarkerSize',10,'MarkerEdgeColor','b');
hold on;
plot3( tStates(1,:),tStates(3,:),tStates(5,:),'ro');
xlabel('x')
ylabel('y')
zlabel('z')
legend('Detections','Components')

Ссылки

[1] Granstorm, K. и О. Оргунер". Фильтр PHD для отслеживания нескольких расширенных целей с помощью случайных матриц". Транзакции IEEE на Обработке сигналов. Издание 60, Номер 11, 2012, стр 5657-5671.

[2] Granstorm, K., и А. Натале, П. Брэка, Г. Лудено и Ф. Серафино. "Гамма Гауссова инверсия плотность гипотезы вероятности Уишарта для расширенной целевой X-полосы использования отслеживания морские радарные данные". Транзакции IEEE на Геонауке и Дистанционном зондировании. Издание 53, Номер 12, 2015, стр 6617-6631.

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

Введенный в R2019a

Для просмотра документации необходимо авторизоваться на сайте