Отслеживание с использованием бистатических обнаружений области значений

В этом примере показано, как симулировать обнаружения только для бистатического диапазона с помощью четырех пар датчик-эмиттер. Кроме сложения, этот пример демонстрирует, как локализовать и отслеживать несколько целей, используя бистатические измерения только для области значений.

Введение

Бистатический радар является набором бистатического излучателя или передатчика $T_X$() и бистатического приемника или датчика (). $R_X$Геометрия бистатической системы изображена на рисунке ниже. Датчик принимает сигналы вдоль пути, образуя верхние стороны треугольника$(R_T + R_R)$ с бистатическими обнаружениями, привязанными к области значений излучателей. Относительная бистатическая область значений определяется:

$$R_{Bistatic} = R_T + R_R - L,$$

где$R_T$ - область значений от излучателя до цели,$R_R$ - область значений от цели до датчика и, $L$также известный как прямой путь или базовая линия, - область значений от излучателя до датчика.

Область значений излучатель-цель-датчик, полученная бистатическим радаром, равна сумме:

$$R_T + R_R = 2a.$$

Эта сумма задает эллипсоид постоянной области значений. Изображение, показанное выше, описывает эллипсоид, когда цель, передатчик и датчик находятся в одной плоскости. Это приводит к 2-D эллипсу. Цель лежит где-то на поверхности эллипсоида постоянного диапазона с особым вниманием, которые являются местоположениями излучателя и датчика, которые разделены базовым расстоянием L и с большой осью, равной 2a.

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

Определение сценария

Вы задаете сценарий отслеживания, который моделирует область 3-D, содержащую несколько платформ. В этом сценарии будет определена бистатическая система.

% Set the random seed for repeatable results.
rng(2050);

% Create a tracking scenario to manage the movement of platforms.
scene = trackingScenario;

% Set the duration of the scenario to 30 seconds and the update rate of the
% scenario to 1 Hz.
scene.StopTime = 30;    % sec
scene.UpdateRate = 1;   % Hz

Установите номер каждого типа платформы. В этом примере для измерения целей будут созданы следующие типы платформ:

  • 1 радиолокационный излучатель

  • 4 бистатических радиолокационных датчика

% Set the minimum number of sensor-emitter pairs required by the spherical
% intersection algorithm for a better localization of the targets in
% 3-dimensional space.
numSensors = 4;
emitterIdx = 1; % Emitter is added as first platform in scene

Создайте и монтируйте излучатель

В бистатической системе существует три типа излучателей:

  • Выделенный: Этот тип передатчика намеренно разработан и эксплуатируется для поддержки бистатической обработки.

  • Кооперативный: Этот тип передатчика предназначен для поддержки других функций, но подходит для бистатического использования. Информация о передатчике, такой как его переданная форма волны и положение, известна.

  • Non-Cooperative: Этот тип является «передатчиком возможностей». Некоперативные передатчики не могут контролироваться, но считаются подходящими для бистатического использования.

В этом примере смоделированный излучатель рассматривается как выделенный передатчик. Моделируйте выбросы RF с помощью radarEmitter. Этот излучатель является идеальным изотропным излучателем с полем зрения 360 степеней. Тип формы волны является пользовательским значением, используемым для перечисления различных типов формы волны, которые присутствуют в сценарии. Для этого сценария используйте значение 1, чтобы указать форму волны типа LFM. Установите излучатель на стационарную платформу в источник.

% Define an emitter.
emitter = radarEmitter(emitterIdx,'No scanning', ...
    'FieldOfView',[360 180], ...    % [az el] deg
    'CenterFrequency', 300e6, ...   % Hz
    'Bandwidth', 30e6, ...          % Hz
    'WaveformType', 1);             % Use 1 for an LFM-like waveform

% Mount emitter on a platform.
thisPlat = platform(scene,'Trajectory',kinematicTrajectory('Position',[0 0 0],...
    'Velocity',[0 0 0]));
thisPlat.Emitters = {emitter};

Создайте и установите бистатические радарные датчики

Моделируйте бистатический радарный датчик, используя radarSensor. Радарный датчик является идеальным изотропным приемником с полем зрения 360 степеней. Установите DetectionMode к бистатическим. Убедитесь, что датчик сконфигурирован так, чтобы его центральная частота, полоса пропускания и ожидаемые типы сигналов совпадали с строением эмиттера. Включите INS для отслеживания в координатах сценария и монтируйте бистатический радарный датчик на платформах.

% Define some random trajectories for the four bistatic radar sensors.
% Circularly distributed with some variance.
r = 2000;                                        % Range, m
theta = linspace(0,pi,numSensors);               % Theta, rad
xSen = r*cos(theta) + 100*randn(1,numSensors);   % m
ySen = r*sin(theta) + 100*randn(1,numSensors);   % m

% To observe the z of the targets, the sensors must have some elevation
% with respect to each other and emitter.
zSen = -1000*rand(1,numSensors);     % m

% Define a bistatic radar sensor.
sensor = radarSensor(1,'No scanning', ...
    'FieldOfView',[360 180], ...    % [az el] deg
    'DetectionMode','Bistatic', ... % Bistatic detection mode
    'CenterFrequency', 300e6, ...   % Hz
    'Bandwidth', 30e6, ...          % Hz
    'WaveformTypes', 1,...          % Use 1 for an LFM-like waveform
    'HasINS',true,...               % Has INS to enable tracking in scenario
    'AzimuthResolution',360,...     % Does not measure azimuth and has a single resolution cell
    'HasElevation',true,...         % Enable elevation to set elevation resolution
    'ElevationResolution',180);     % Single elevation resolution cell

% Mount bistatic radar sensors on platforms.
for iD = 1:numSensors
    % Create a platform with the trajectory. The sensing platforms are
    % considered stationary, but can be provided with a velocity.
    thisPlat = platform(scene,...
        'Trajectory',kinematicTrajectory('Position',[xSen(iD) ySen(iD) zSen(iD)],...
        'Velocity',[0 0 0]));
    % Clone the bistatic radar sensor and mount to platforms.
    thisPlat.Sensors = {clone(sensor)};
    % Provide the correct sensor index.
    thisPlat.Sensors{1}.SensorIndex = iD;
end

Симуляция бистатического сценария включает в себя следующее:

  • Генерация выбросов РФ

  • Распространение выбросов и отражение этих выбросов с платформ

  • Прием выбросов, вычисление потерь помех и генерация обнаружений.

Этот процесс упакован в вспомогательную функцию, detectBistaticTargetRange, заданный в конце этого примера.

Целевая локализация

Рисунок в разделе «Введение» иллюстрирует, что при бистатическом измерении цель лежит где-то на эллипсоиде, заданном положениями излучателя и датчика, а также измеренной бистатической областью значений. Поскольку цель может лежать где угодно на эллипсоиде, одно бистатическое измерение не обеспечивает полной наблюдаемости целевого состояния. Чтобы локализовать цель (триангулировать положение цели) и достичь наблюдаемости состояния цели, необходимы многочисленные измерения от разных датчиков. Целевой алгоритм локализации, который реализован в этом примере, основан на сферическом методе пересечения, описанном в ссылке [1]. Нелинейность задачи локализации приводит к двум возможным целевым местоположениям от пересечения 3 или более бистатических областей значений датчиков. Решение о местоположении цели из двух возможных местоположений может быть облегчено с помощью более 3 датчиков. В этом примере вы используете четыре датчика, чтобы сгенерировать бистатические обнаружения с помощью одного излучателя.

Затем вы добавите цель к сцене, чтобы сгенерировать бистатические обнаружения.

Добавьте один целевой объект к сценарию

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

% Add one target here using the platform method of scenario. Specify the
% trajectory using a kinematicTrajectory with random position and constant
% velocity.
platform(scene,'Trajectory',kinematicTrajectory(...
                            'Position', [2000*randn 100*randn -1000],...
                            'Velocity',[10*randn 10*randn 5*randn]));

% Initialize the display for visualization.
theaterDisplay = helperBistaticRangeFusionDisplay(scene,...
    'XLim',[-3 3],'YLim', [-3 3],'ZLim',[-2.5 0],...
    'GIF',''); % records new GIF if name specified
view(3);

В сценарии с одной целью и без ложных предупреждений можно триангулировать несколько измерений, чтобы получить локализованное целевое положение. Это локализованное положение может использоваться как оценка целевого положения или может также быть передано трекеру для оценки целевого состояния. Теперь вы сгенерируете бистатические радиолокационные обнаружения от одной цели и визуализируете геометрию бистатических эллипсоидов. Вы вычислите триангулированное положение с помощью вспомогательной функции helperBistaticRangeFusion, включенный в этот пример. The helperBistaticRangeFusion функция вычисляет триангулированное положение цели, учитывая бистатические обнаружения области значений, сгенерированные целью.

% Create a fused detection to represent the triangulated position and
% visualize the position as a 3-D fused position detection.
measParam = struct('Frame','Rectangular',...
    'HasAzimuth',true,'HasElevation',true,...
    'HasRange',true,'HasVelocity',false,...
    'OriginPosition',[0;0;0],...% Fused position is in scenario frame
    'OriginVelocity',[0;0;0],...% Scenario frame has zero velocity
    'Orientation',eye(3),...    % Scenario frame has no rotation.
    'IsParentToChild',false);   % Specify if rotation is specified in parent frame

% Represent the fused detection using objectDetection. It has a 3-D
% position and covariance.
fusedDetection = {objectDetection(0,zeros(3,1),'MeasurementNoise',eye(3),...
    'MeasurementParameters',measParam)};

% Change view
view(-125,9);

% Run scenario.
while advance(scene)
    % Get current simulation time.
    time = scene.SimulationTime;

    % Get bistatic range detections from 1 target.
    detections = detectBistaticTargetRange(scene,time,emitterIdx,true);

    % Triangulate detections to estimate target position.
    [position, covariance] = helperBistaticRangeFusion(detections);

    % Update the fused detection.
    fusedDetection{1}.Measurement = position;
    fusedDetection{1}.MeasurementNoise = covariance;

    % Update the display.
    theaterDisplay([detections;fusedDetection]);
end

% Write new GIF if requested
writeGIF(theaterDisplay);

В предыдущих анимациях бистатические радарные датчики изображены с направленными вниз треугольниками. Стационарный излучатель изображён с фиолетовым маркером круга в источник. Цель обозначается белым алмазом, а серая линия показывает траекторию цели. Анимация 2-D срезается в местоположении Z целевого устройства при каждой метке времени.

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

Многоцелевой сценарий

Сценарий с одной целью принимает, что обнаружение, как известно, генерируется одной и той же целью. Поэтому можно триангулировать их, чтобы локализовать цель. Однако в многоцелевом сценарии и при наличии ложных предупреждений и пропущенных обнаружений эта информация обычно недоступна. Это приводит к неизвестной связи данных между обнаружениями и целями. Чтобы решить эту проблему, вы используете staticDetectionFuser. The staticDetectionFuser оценивает неизвестную связь данных между обнаружениями и целями и находит лучшее решение с помощью многомерной формулировки назначения. The staticDetectionFuser формирует на выходе сплавленные обнаружения. Количество сплавленных обнаружений представляет возможное количество целей, и каждое обнаружение представляет Декартово положение цели.

Далее вы добавите новые цели в сценарий и используйте staticDetectionFuser создание слитых обнаружений от нескольких целей при наличии ложных предупреждений. Эти обнаружения дополнительно обрабатываются GNN-трекером, trackerGNN, для отслеживания целей.

% Restart the scenario and add remaining targets.
restart(scene);

% Number of targets added here.
numTargets = 4;

% randomly distributed targets.
r = abs(2000*randn(1,numTargets));                % Random ranges (m)
theta = linspace(0,numTargets*pi/4,numTargets);   % Angular position (rad)
xTgt = r.*cos(theta) + 100*randn(1,numTargets);   % x position (m)
yTgt = -r.*sin(theta) + 100*randn(1,numTargets);  % y position (m)

% Targets above ground.
zTgt = -1000*ones(1,numTargets); % z position (m)

for iD = 1:numTargets
    thisPlat = platform(scene,...
        'Trajectory',kinematicTrajectory('Position',[xTgt(iD) yTgt(iD) zTgt(iD)],...
        'Velocity',[10*randn 10*randn 5*randn]));
end

% Update platforms variable.
platforms = scene.Platforms;

% Reset the display.
release(theaterDisplay);

% Turn off plotting for bistatic ellipse for all targets.
theaterDisplay.PlotBistaticEllipse = false;

% No recording
theaterDisplay.GIF = '';

% Call once to plot new trajectories.
theaterDisplay();

% Scenario display with trajectories.
showScenario(theaterDisplay);
snapnow;
showGrabs(theaterDisplay,[]);

Setup Fuser и Tracker

Этот раздел создает статический fuser обнаружения, который использует сферический алгоритм локализации пересечения, обсужденный ранее. Кроме того, для обработки сплавленных обнаружений определен трекер Global Nearest Neighbor (GNN).

% Define a static detection fuser.
fuser = staticDetectionFuser( ...
    'MeasurementFusionFcn','helperBistaticRangeFusion', ...
    'UseParallel',true, ...                         % Do parallel processing
    'MaxNumSensors',numSensors, ...                 % Number of bistatic radar sensors
    'Volume',sensor.RangeResolution, ...            % Volumes of the sensors' detection bin
    'MeasurementFormat','custom', ...               % Define custom fused measurement as bistatic cannot not reported by cvmeas
    'MeasurementFcn','helperBistaticMeas',...       % Set measurement function for reporting bistatic measurement
    'DetectionProbability',0.99 ...                 % Probability of detecting the target
    );

% Define a GNN tracker.
tracker = trackerGNN('AssignmentThreshold',100);

Отслеживайте цели с помощью статического слияния

Моделируемые бистатические обнаружения объединяются со staticDetectionFuser использование сферического алгоритма пересечения. Затем сплавленные обнаружения передаются в GNN-трекер.

while advance(scene)
    % Get current simulation time.
    time = scene.SimulationTime;

    % Get bistatic range detections
    detections = detectBistaticTargetRange(scene,time,emitterIdx);

    % Fuse bistatic detections into one structure.
    [superDets, info] = fuser(detections);

    % Track fused bistatic detections using the GNN tracker.
    confTracks = tracker(superDets,scene.SimulationTime);

    % Update display with current platform positions and tracks.
    theaterDisplay([superDets(:);detections(:)],confTracks);
end

Результаты

При наличии нескольких целей и возможных ложных предупреждений пересечения призраков иногда могут быть более благоприятными, чем фактическое решение. Поскольку эти пересечения призраков появляются случайным образом в сценарии, они эффективно рассматриваются централизованным трекером как «ложные предупреждения». На рисунках ниже можно заметить, что статическое слияние выводит обнаружения в неправильных положениях. Когда пересечения призраков конкурируют с истинными пересечениями, в это время пропускаются две истинные цели.

В графике «Current Estimated Tracks» обратите внимание, что трекер способен поддерживать треки по всем 5 целям, не создавая никаких призраков или ложных треков.

showGrabs(theaterDisplay,1);

На графиках ниже показан вид сверху дорожек 1 и 2 с их историями в конце симуляции. История представлена оранжевой линией, соединяющей дорожку. Заметьте, что истории дорожек близки к истинным траекториям целей.

showGrabs(theaterDisplay,2,false);

Сводные данные

В этом примере вы научились симулировать сценарий с бистатическими датчиками. Вы узнали о проблемах, связанных с отслеживанием целей с помощью бистатических измерений. Вы использовали staticDetectionFuser чтобы взрывать бистатические обнаружения области значений от нескольких целей и trackerGNN для отслеживания целей с помощью измерений положения плавления.

Вспомогательные функции

helperBistaticRangeFusion Сплавить обнаружения только диапазона для триангуляции целевого положения

function [pos,cov] = helperBistaticRangeFusion(detections)
% This function is for example purposes only and may be removed in a future
% release.
% This function returns the estimated position and covariance of the target
% given the bistatic detections generated from it.

%   Copyright 2019 The MathWorks, Inc.

% Do a coarse gating, as a minimum of 3 measurements are required for
% finding a solution.
if numel(detections) < 3
    pos = 1e10*ones(3,1);
    cov = 2*eye(3);
else
    % Retrieve info from measurements
    ranges = zeros(numel(detections),1);
    receiverLocations = zeros(3,numel(detections));
    emitterLocation = detections{1}.MeasurementParameters.EmitterPosition;
    for i = 1:numel(detections)
        rLoc =  detections{i}.MeasurementParameters(2).OriginPosition;
        receiverLocations(:,i) = rLoc;
        
        % The spherical intersection method assumes that measurment is 
        % Remit + Rrecv. Bistatic measurement is defined as Remit + Rrecv - Rb. 
        % Add the Rb to the actual measurement
        L = norm(emitterLocation(:) - rLoc(:));
        ranges(i) = detections{i}.Measurement + L;
    end
    pos = helperSphericalIntersection(ranges,receiverLocations,emitterLocation);
    
    % Covariance is calculated only when required. This helps saving
    % computation during cost calculation for static fusion, where only
    % position is required.
    if nargout > 1
        cov = linearFusionFcn(pos,detections);
    end
end

end

%% linear fusion function for measurement noise
function measCov = linearFusionFcn(pos,thisDetections)
% Linear noise fusion function. It requires measJacobian to use linear
% transformation. 
% Use a constant velocity state to calculate jacobians.
estState = zeros(6,1);
estState(1:2:end) = pos;
n = numel(thisDetections);
totalJacobian = zeros(n,3);
totalCovariance = zeros(n,n);
for i = 1:numel(thisDetections)
    H = cvmeasjac(estState,thisDetections{i}.MeasurementParameters);
    totalJacobian(i,:) = H(1,1:2:end);
    totalCovariance(i,i) = thisDetections{i}.MeasurementNoise;
end
toInvertJacobian = totalJacobian'/(totalCovariance)*totalJacobian;
I = eye(3);
% 2-D to 3-D conversion with 0 jacobian wrt z.
if toInvertJacobian(3,3) == 0
    toInvertJacobian(3,3) = 1;
end
measCov = I/toInvertJacobian;
% Return true positive definite.
measCov = (measCov + measCov')/2;
measCov(~isfinite(measCov)) = 1000; % Some big number for inf and nan
end

detectionBistaticTargetRange Сгенерируйте только бистатические обнаружения области значений от целей в сценарии.

function detections = detectBistaticTargetRange(scene,time,emitterIdx,removeFalseAlarms)
    % Get platforms from scenario.
    platforms = scene.Platforms;

    % A flag to indicate if false alarms should be removed from detections.
    if nargin == 3
        removeFalseAlarms = false;
    end

    % Distinguish between receivers and targets to remove detections from
    % the receiver. It is assumed that these detections can be removed from
    % the batch using prior information.
    isReceiver = cellfun(@(x)~isempty(x.Sensors),scene.Platforms);
    allIDs = cellfun(@(x)x.PlatformID,scene.Platforms);
    receiverIDs = allIDs(isReceiver);

    % Generate RF emissions
    emitPlatform = platforms{emitterIdx};
    txEmiss = emit(emitPlatform, time);

    % Propagate the emissions and reflect these emissions from platforms.
    reflSigs = radarChannel(txEmiss, platforms,'HasOcclusion',false);

    % Generate detections from the bistatic radar sensor.
    detections = {};
    numPlat = numel(platforms);
    for iPlat = 1:numPlat
        thisPlatform = platforms{iPlat};

        % Receive the emissions, calculate interference losses, and
        % generate bistatic detections.
        thisDet = detect(thisPlatform, reflSigs, time);

        % Remove the detections that are the bistatic receivers. Only the
        % detections from the target platforms will be fused and tracked.
        detectedTargetIDs = cellfun(@(x)x.ObjectAttributes{1}.TargetIndex,thisDet);
        toRemove = ismember(detectedTargetIDs, receiverIDs) | removeFalseAlarms*(detectedTargetIDs<=0);
        thisDet = thisDet(~toRemove);

        % Add this platform's detections to the detections array.
        detections = [detections; thisDet]; %#ok<AGROW>
    end

    % Determine emitter position and velocity for this simulation time.
    emitterPosition = emitPlatform.Trajectory.Position(:);

    % Update detections structure to indicate that only bistatic range measurements are retained.
    for iD = 1:numel(detections)
        detections{iD}.Measurement = detections{iD}.Measurement(end);  %#ok<AGROW> % Range measurement
        detections{iD}.MeasurementNoise = detections{iD}.MeasurementNoise(end,end); %#ok<AGROW> % Measurement noise for range
        detections{iD}.MeasurementParameters(1).HasAzimuth = false; %#ok<AGROW> % Update measurement parameters to indicate that azimuth no longer exists
        detections{iD}.MeasurementParameters(1).HasElevation = false; %#ok<AGROW> % Update measurement parameters to indicate that elevation no longer exists
        detections{iD}.MeasurementParameters(1).EmitterPosition = emitterPosition; %#ok<AGROW> % Add emitter position
    end
end

Ссылки

  1. Малановски, М. и К. Кульпа. Два метода локализации цели в мультистатическом пассивном радаре. Транзакции IEEE по аэрокосмическим и электронным системам, том 48, № 1, январь 2012 года, стр. 572-578.

  2. Уиллис, Н. Дж. Бистатический радар. Raleigh: SciTech Publishing, Inc., 2005.