В этом примере показано, как моделировать бистатические обнаружения только в диапазоне с использованием четырех пар датчик-излучатель. Кроме того, в этом примере показано, как локализовать и отслеживать несколько целей с помощью бистатических измерений только по дальности.
Бистатический радар - совокупность бистатического излучателя или передатчика
(), бистатического приемника или датчика ().
Геометрия бистатической системы изображена на рисунке ниже. Датчик принимает сигналы вдоль траектории, образующей верхние стороны треугольника
, с бистатическими обнаружениями, относящимися к диапазону излучателей. Относительный бистатический диапазон задаётся:
![]()
где
- дальность от излучателя до цели,
- дальность от цели до датчика и,
известная также как прямой путь или базовая линия, - дальность от излучателя до датчика.

Дальность «излучатель-цель-датчик», полученная бистатической РЛС, равна сумме:
![]()
Эта сумма определяет эллипсоид постоянного диапазона. Изображение, показанное выше, описывает эллипсоид, когда цель, передатчик и датчик лежат в одной плоскости. В результате получается эллипс 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,[]);
![]()
В этом разделе создается статический предохранитель обнаружения, который использует алгоритм локализации сферического пересечения, рассмотренный ранее. Кроме того, определяется трекер глобального ближайшего соседа (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
Малановский, М. и К. Кульпа. «Два метода локализации цели в мультистатическом пассивном радаре». Сделки IEEE по аэрокосмическим и электронным системам, том 48, № 1, январь 2012 года, стр. 572-578.
Уиллис, Н. Дж. Бистатический радар. Raleigh: SciTech Publishing, Inc., 2005.