AlphaBetaFilter

Фильтр альфы - беты для объектного отслеживания

Описание

AlphaBetaFilter объект представляет фильтр альфы - беты, спроектированный для объектного отслеживания. Используйте это средство отслеживания в платформах, которые следуют линейной модели движения и имеют линейную модель измерения. Линейное движение задано постоянной скоростью или постоянным ускорением. Используйте фильтр, чтобы предсказать будущее местоположение объекта, уменьшать шум для обнаруженного местоположения или помочь сопоставить несколько объектов с их дорожками.

Создание

Описание

abf = AlphaBetaFilter создает фильтр альфы - беты в течение дискретного времени, 2D постоянной скоростной системы. Модель движения фильтра соответствует установке MotionModel свойство к '2D Constant Velocity'. В этом случае состояние фильтра принимает форму [x; vx; y; vy].

пример

abf = AlphaBetaFilter(Name,Value,...) задает свойства фильтра с помощью одного или нескольких Name,Value парные аргументы. Любые незаданные свойства берут значения по умолчанию.

Свойства

развернуть все

Модель целевого движения в виде вектора символов или строки. Определение 1D, 2D или 3D устанавливает размерности целевого движения. Определение Constant Velocity принимает, что целевое движение имеет постоянную скорость в каждом шаге симуляции. Определение Constant Acceleration принимает, что целевое движение имеет постоянное ускорение в каждом шаге симуляции.

Типы данных: char | string

Состояние фильтра в виде скаляра или M с действительным знаком - вектор элемента. Скалярный вход расширен к M - вектор элемента. Вектор состояния является конкатенированными состояниями от каждой размерности.

Векторы состояния для каждой модели движения являются вектор-столбцами:

Свойство MotionModelВектор состояния
'1D Constant Velocity'[x; vx]
'2D Constant Velocity'[x; vx; y; vy]
'3D Constant Velocity'[x; vx; y; vy; z; vz]
'1D Constant Acceleration'[x; vx; ax]
'2D Constant Acceleration'[x; vx; ax; y; vy; ay]
'3D Constant Acceleration'[x; vx; ax; y; vy; ay; z; vz; az]

где, например, vx обозначает скорость в x - направление и ax обозначает ускорение в x - направление.

Пример: [200;0.2;150;0.1;0;0.25]

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

Ошибочная ковариация состояния в виде M-by-M матрица, где M является размером состояния фильтра. Скалярный вход расширен к M-by-M матрица. Ковариационная матрица представляет неопределенность в состоянии фильтра.

Пример: eye(6)

Ковариация шума процесса в виде скаляра или D-by-D матрица, где D является размерностью движения. Например, если MotionModel '2D Constant Velocity, затем D = 2. Скалярный вход расширен к D-by-D матрица.

Пример: [20 0.1; 0.1 1]

Ковариация шума измерения в виде скаляра или D-by-D матрица, где D является размерностью движения. Например, если MotionModel '2D Constant Velocity, затем D = 2. Скалярный вход расширен к M-by-M матрица.

Пример: [20 0.1; 0.1 1]

Коэффициенты фильтра альфы - беты в виде скалярного или вектора-строки из действительных значений. Любой скалярный вход расширен к вектору-строке. Если вы задаете постоянную скорость в MotionModel свойство, коэффициентами является [alpha beta]. Если вы задаете постоянное ускорение в MotionModel свойство, коэффициентами является [alpha beta gamma].

Пример: [20 0.1]

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

predictПредскажите ошибочную ковариацию оценки состояния и оценки состояния
correctОткорректируйте ошибочную ковариацию оценки состояния и оценки состояния
distanceРасстояния между измерениями и предсказанными измерениями
likelihoodВероятность измерения
cloneСоздайте одинаковый объект

Примеры

свернуть все

Примените фильтр альфы - беты, чтобы отследить цель, перемещающуюся в постоянную скорость вдоль оси X.

T = 0.1;
V0 = 100;
N = 100;
plat = phased.Platform('MotionModel','Velocity', ...
    'VelocitySource','Input port','InitialPosition',[100;0;0]);
abfilt = phased.AlphaBetaFilter('MotionModel','1D Constant Velocity');
Z = zeros(1,N);
Zp = zeros(1,N);
Zc = zeros(1,N);
for m = 1:N
    pos = plat(T,[100+20*randn;0;0]);
    Z(m) = pos(1);
    [~,~,Zp(m)] = predict(abfilt,T);
    [~,~,Zc(m)] = correct(abfilt,Z(m));
end
t = (0:N-1)*T;
plot(t,Z,t,Zp,t,Zc)
xlabel('Time (s)')
ylabel('Position (m)')
legend('True Track','Predicted Track','Corrected Track', ...
    'Location','Best')

Примените фильтр альфы - беты, чтобы отследить цель, перемещающуюся в постоянное ускорение вдоль оси X.

T = 0.1;
a0 = 100;
N = 100;
plat = phased.Platform('MotionModel','Acceleration', ...
    'AccelerationSource','Input port','InitialPosition',[100;0;0]);
abfilt = phased.AlphaBetaFilter( ...
    'MotionModel','1D Constant Acceleration', ...
    'Coefficients',[0.5 0.5 0.1]);
Z = zeros(1,N);  
Zp = zeros(1,N);
Zc = zeros(1,N);
for m = 1:N
    pos = plat(T,[100+20*randn;0;0]);
    Z(m) = pos(1);
    [~,~,Zp(m)] = predict(abfilt,T);
    [~,~,Zc(m)] = correct(abfilt,Z(m));
end
t = (0:N-1)*T;
plot(t,Z,t,Zp,t,Zc)
xlabel('Time (s)')
ylabel('Position (m)');
legend('True Track','Predicted Track','Corrected Track', ...
    'Location','Best');

Примените фильтр альфы - беты, чтобы отследить цель, перемещающуюся в постоянную скорость в трех измерениях.

T = 0.1;
V0 = 100;
N = 100;
plat = phased.Platform('MotionModel','Velocity', ...
    'VelocitySource','Input port','InitialPosition',[100;0;0]);
abfilt = phased.AlphaBetaFilter('MotionModel', ...
    '3D Constant Velocity','State',zeros(6,1));
Z = zeros(3,N);
Zp = zeros(3,N);
Zc = zeros(3,N);
for m = 1:N
    Z(:,m) = plat(T,[V0+20*randn;0;0]);
    [~,~,Zp(:,m)] = predict(abfilt,T);
    [~,~,Zc(:,m)] = correct(abfilt,Z(:,m));
end
t = (0:N-1)*T;
plot(t,Z(1,:),t,Zp(1,:),t,Zc(1,:))
xlabel('Time (s)')
ylabel('Position along X (m)')
legend('True Track','Predicted Track','Corrected Track', ...
    'Location','Best')

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2018b