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

Примеры

свернуть все

Создание 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 = 2×2

    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.0000]
                          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
tStates = 6×1

    0.1947
    0.9733
    0.8319
    4.1599
   -0.0124
   -0.0621

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

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

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

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