Этот пример показывает вам, как симулировать бистатические обнаружения только для области значений с помощью четырех эмиттерных датчиком пар. Кроме того, этот пример демонстрирует, как локализовать и отследить несколько целей с помощью бистатических измерений только для области значений.
Бистатический радар является набором бистатического эмиттера или передатчика (), и бистатический приемник или датчик (). Геометрия бистатической системы изображена в рисунке ниже. Датчик получает сигналы вдоль пути, формирующего верхние стороны треугольника с бистатическими обнаружениями, на которые ссылаются к эмиттерной области значений. Относительной бистатической областью значений дают:
то, где диапазон от эмиттера до цели, является диапазоном с цели на датчик, и, известное также как прямой путь или базовую линию, диапазон с эмиттера на датчик.
Эмиттер, чтобы предназначаться к области значений датчика, полученной бистатическим радаром, равен сумме:
Эта сумма задает эллипсоид постоянной области значений. Изображение, показанное выше, описывает эллипсоид, когда цель, передатчик и датчик лежат в той же плоскости. Это приводит к 2D эллипсу. Цель находится где-нибудь на поверхности эллипсоида постоянной области значений с особым вниманием, являющимся эмиттером и местоположениями датчика, которые разделяются базовым расстоянием 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
Создайте и смонтируйте эмиттер
В бистатической системе существует три типа эмиттеров:
Выделенный: Этот тип передатчика намеренно проектируется и управляется, чтобы поддержать бистатическую обработку.
Кооператив: Этот тип передатчика спроектирован, чтобы поддерживать другие функции, но подходит для бистатического использования. Информация о передатчике, таком как его переданная форма волны и положение известна.
Некооператив: Этот тип является "передатчиком возможности". Несовместными передатчиками нельзя управлять, но считают подходящими для бистатического использования.
В этом примере смоделированный эмиттер считается специализированным передатчиком. Смоделируйте эмиссию 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 = fusionRadarSensor(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
, заданный в конце этого примера.
Фигура в разделе Introduction проиллюстрировала, что с бистатическим измерением, цель находится где-нибудь на эллипсоиде, заданном эмиттером и положениями датчика, а также измеренной бистатической областью значений. Поскольку цель может лечь где угодно на эллипсоид, одно бистатическое измерение не обеспечивает полную наблюдаемость целевого состояния. Чтобы локализовать цель (триангулируют целевое положение) и достигают наблюдаемости состояния цели, несколько измерений от различных датчиков необходимы. Целевой алгоритм локализации, который реализован в этом примере, основан на сферическом перекрестном методе, описанном в ссылке [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);
В предыдущих анимациях бистатические радарные датчики изображены с указывающими вниз треугольниками. Стационарный эмиттер изображен с фиолетовым круговым маркером в начале координат. Цель обозначается белым ромбом, и серая линия показывает траекторию цели. 2D анимация нарезана в местоположении цели Z в каждой метке времени.
Сплавленное обнаружение, показанное использование желтого кругового маркера, находится близко к перекрестной области, сгенерировал эти четыре эллипсоида и близко к истинному положению цели во время сценария.
Сценарий единой цели принимает, что обнаружения, как известно, сгенерированы той же целью. Поэтому можно триангулировать их, чтобы локализовать цель. Однако в мультицелевом сценарии и в присутствии ложных предупреждений и пропущенных обнаружений, эта информация обычно не доступна. Это приводит к неизвестной ассоциации данных между обнаружениями и целями. Чтобы решить эту задачу, вы используете staticDetectionFuser
. staticDetectionFuser
оценивает неизвестную ассоциацию данных между обнаружениями и предназначается и находит лучшее решение с помощью многомерной формулировки присвоения. staticDetectionFuser
выходные параметры плавили обнаружения. Количество сплавленных обнаружений представляет возможное количество целей, и каждое обнаружение представляет Декартово положение цели.
Затем вы будете добавлять новые цели в сценарий и использовать staticDetectionFuser
создать сплавленные обнаружения из нескольких целей в присутствии ложных предупреждений. Эти обнаружения далее обрабатываются средством отслеживания GNN, trackerGNN
, отслеживать цели.
% Restart the scenario and add remaining targets. restart(scene); % Reproducible geometry rng(2021); % 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) задано, чтобы обработать сплавленные обнаружения.
% 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
В присутствии нескольких целей и возможных ложных предупреждений, фантомные пересечения могут иногда быть более благоприятными, чем фактическое решение. Когда эти фантомные пересечения появляются случайным образом на сценарии, они эффективно обработаны, когда "ложь предупреждает" централизованным средством отслеживания. Можно заметить в рисунках ниже что статический сплав выходные обнаружения в неправильных положениях. Когда фантомные пересечения конкурируют с истинными пересечениями, две истинных цели пропущены в это время.
В "Текущих Предполагаемых Дорожках" график, обратите внимание, что средство отслеживания может обеспечить дорожки на всех 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
Малановский, M. и К. Калпа. "Два Метода для Целевой Локализации в Мультистатическом Пассивном Радаре". Транзакции IEEE на Космических и Электронных системах, Издании 48, № 1, январь 2012, стр 572-578.
Уиллис, N. J. Бистатический радар. Raleigh:SciTech Publishing, Inc., 2005.