ggiwphd

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

Описание

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

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

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

  3. Распределение Обратного Уишарта (IW) — представляет пространственную степень цели. На 2D пробеле степень представлена случайной положительной определенной матрицей 2 на 2, которая соответствует 2D описанию эллипса. В трехмерном пространстве степень представлена 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:

ak+1||k=αknkβk+1|k=βknk

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

E=αβVar=αβ2

Поэтому действие деления сохранит ожидаемый уровень измерения как константу, но увеличит отклонение Гамма распределения экспоненциально со временем, если забывающий факторный 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+dT)=R×Ex(t)×RT

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

Примеры

свернуть все

Создание 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')

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

Ссылки

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

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

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

Введенный в R2019a