exponenta event banner

Отслеживание с помощью обнаружения бистатического диапазона

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

Введение

Бистатический радар - совокупность бистатического излучателя или передатчика $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 и большой осью, равной 2а.

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

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

Определяется сценарий отслеживания, моделирующий область 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: Этот тип является «передатчиком возможностей». Некооперативные передатчики не могут управляться, но считаются пригодными для бистатического использования.

В этом примере моделируемый излучатель рассматривается как специализированный передатчик. Моделирование радиочастотного излучения с использованием 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 к бистатической. Убедитесь, что датчик сконфигурирован таким образом, чтобы его центральная частота, ширина полосы пропускания и ожидаемая форма сигнала соответствовали конфигурации эмиттера. Включить ИНС для слежения в координатах сценария и установить на платформы бистатический радиолокационный датчик.

% 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, включен в этот пример. 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. staticDetectionFuser оценивает неизвестную связь данных между обнаружениями и целями и находит наилучшее решение, используя многомерную формулировку назначения. 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,[]);

Установка Fuser и Tracker

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

% 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 для отслеживания целей с измерениями положения взрывателя.

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

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

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

обнаружение BistaticTargetRange Создание обнаружений только бистатического диапазона из целевых объектов в сценарии.

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.