В этом примере показано, как смоделировать и симулировать выход активных и пассивных радарных датчиков с помощью radarDataGenerator
. В этом примере вы наблюдаете, как интерференция радиочастоты (RF) влияет на эффективность обнаружения радара. Кроме того, вы используете пассивные радарные датчики, чтобы оценить местоположение и тип радиочастотной помехи.
Оценка отслеживания эффективности для радаров требует моделирования сценария радиочастоты (RF). Рабочий процесс моделирования следующие:
Сгенерируйте эмиссию RF.
Распространите эмиссию и отразите эти выбросы платформ.
Получите эмиссию, вычислите интерференционные потери и сгенерируйте обнаружения.
В этом примере вы выполняете каждый из этих шагов с помощью сценария, состоящего из трех платформ:
Бортовая платформа летающий север на уровне 500 км/ч от нижней части сценария
Бортовая платформа летающий юг на уровне 600 км/ч от верхней части сценария
Бортовая платформа летающий восток на уровне 700 км/ч посреди сценария
Во-первых, создайте сценарий и установите длительность сценария, затем создайте три бортовых платформы.
scene = radarScenario; scene.StopTime = 10; % s % Platform 1: Airborne and northbound at 500 km/h spd = 500*1e3/3600; % m/s wp1 = [0 0 -6000]; wp2 = [spd*scene.StopTime 0 -6000]; toa = [0; scene.StopTime]; platform(scene,'Trajectory',waypointTrajectory('Waypoints',[wp1; wp2],'TimeOfArrival',toa)); % Platform 2: Airborne and southbound at 600 km/h spd = 600*1e3/3600; % m/s wp1 = [30e3+spd*scene.StopTime 0 -6000]; wp2 = [30e3 0 -6000]; toa = [0; scene.StopTime]; platform(scene,'Trajectory',waypointTrajectory('Waypoints',[wp1; wp2],'TimeOfArrival',toa)); % Platform 3: Airborne and eastbound at 700 km/h spd = 700*1e3/3600; % m/s wp1 = [10e3 1e3 -6000]; wp2 = [10e3 1e3+spd*scene.StopTime -6000]; toa = [0; scene.StopTime]; platform(scene,'Trajectory',waypointTrajectory('Waypoints',[wp1; wp2],'TimeOfArrival',toa));
Используйте theaterPlot
создать отображение, показывающее платформы в сценарии и их траекториях.
ax = axes; theaterDisplay = theaterPlot('Parent',ax,'AxesUnit',["km" "km" "km"], 'XLim',[-10000 40000] , 'YLim', [-20000 20000], 'ZLim',[-1e7 1e7]); view([90 -90]) % swap X and Y axis patch('XData',[-10000 -10000 40000 40000],'YData',[-20000 20000 20000 -20000],'EdgeColor','none', 'FaceColor',[0.8 0.8 0.8],'DisplayName','Ground'); platPlotter = platformPlotter(theaterDisplay,'DisplayName','Platforms','MarkerFaceColor','k'); plotPlatform(platPlotter,vertcat(scene.platformPoses.Position)); trajPlotter = trajectoryPlotter(theaterDisplay,'DisplayName','Trajectories','LineStyle','-'); allTrajectories = cellfun(@(x) x.Trajectory.lookupPose(linspace(0,scene.StopTime,10)), scene.Platforms, 'UniformOutput', false); plotTrajectory(trajPlotter,allTrajectories);
Часто, радар действует в среде, где другая нежелательная эмиссия RF вмешивается в формы волны, испускаемые радаром. Когда это происходит, радар испытывает ухудшение в эффективности обнаружения в направлении вмешивающихся сигналов. Присоедините эмиттер RF к платформе в нижней части сценария (первая платформа) и радар на платформу наверху сценария (вторая платформа).
Создайте эмиттер RF
Смоделируйте эмиссию RF с помощью radarEmitter
объект. Эмиттер находится в перспективной настройке с азимутальным полем зрения 20 градусов, чтобы включать две других платформы в сценарий. Эффективная изотропная излученная степень (EIRP) устанавливает силу вмешивающегося сигнала. Тип формы волны является пользовательским значением, используемым, чтобы перечислить различные типы формы волны, которые присутствуют в сценарии. Для этого сценария используйте значение 0, чтобы указать на шумовой тип формы волны.
% Create the interference emitter. rfEmitter = radarEmitter(1,'No scanning', ... 'FieldOfView',[20 5], ... % [az el] deg 'EIRP',200, ... % dBi 'CenterFrequency',300e6, ... % Hz 'Bandwidth',30e6, ... % Hz 'WaveformType',0) % Use 0 for noise-like emissions
rfEmitter = radarEmitter with properties: EmitterIndex: 1 UpdateRate: 1 ScanMode: 'No scanning' MountingLocation: [0 0 0] MountingAngles: [0 0 0] FieldOfView: [2x1 double] MechanicalAngle: 0 LookAngle: 0 HasElevation: 0 EIRP: 200 CenterFrequency: 300000000 Bandwidth: 30000000 WaveformType: 0 ProcessingGain: 0
Присоедините эмиттер к первой платформе.
platEmit = scene.Platforms{1}; platEmit.Emitters = rfEmitter
platEmit = Platform with properties: PlatformID: 1 ClassID: 0 Position: [0 0 -6000] Orientation: [0 0 0] Dimensions: [1x1 struct] Trajectory: [1x1 waypointTrajectory] PoseEstimator: [1x1 insSensor] Emitters: {[1x1 radarEmitter]} Sensors: {} Signatures: {[1x1 rcsSignature]}
Создайте моностатический радар
Оборудуйте вторую платформу моностатическим радаром. Используйте radarDataGenerator
смоделировать этот тип радара. Во-первых, создайте моностатический радар с помощью radarDataGenerator
. Сконфигурируйте ориентацию монтирования радара так, чтобы она отсканировала сектор азимута перед своей платформой. Включите вход INS так, чтобы радар мог использовать средство оценки положения платформы, чтобы вывести обнаружения в координатах сценария. Включите интерференционный входной порт, таким образом, интерференционный сигнал, созданный эмиттером выше, может быть передан радару.
radar = radarDataGenerator(2, 'Sector', ... 'DetectionMode', 'monostatic', ... 'UpdateRate', 12.5, ... % Hz 'FieldOfView', [2 10]); % [az el] deg radar.MountingAngles = [0 0 0]; % [Z Y X] deg radar.HasINS = true; radar.InterferenceInputPort = true; radar.DetectionCoordinates = 'scenario'
radar = radarDataGenerator with properties: SensorIndex: 2 UpdateRate: 12.5000 DetectionMode: 'Monostatic' ScanMode: 'Mechanical' InterferenceInputPort: 1 EmissionsInputPort: 0 MountingLocation: [0 0 0] MountingAngles: [0 0 0] FieldOfView: [2 10] RangeLimits: [0 100000] DetectionProbability: 0.9000 FalseAlarmRate: 1.0000e-06 ReferenceRange: 100000 TargetReportFormat: 'Clustered detections' Show all properties
Присоедините радар к второй платформе.
platRadar = scene.Platforms{2}; platRadar.Sensors = radar;
Обновите отображение, чтобы показать платформы, радар и эмиттер в сценарии.
emitterColor = [0.9290 0.6940 0.1250]; radarColor = [0 0.4470 0.7410]; platEmitPlotter = platformPlotter(theaterDisplay,'DisplayName', 'RF emitter','Marker','d','MarkerFaceColor',emitterColor); platRadarPlotter = platformPlotter(theaterDisplay,'DisplayName','Monostatic radar','Marker','d','MarkerFaceColor',radarColor); platPlotter.DisplayName = 'Targets'; clearData(platPlotter); covPlotter = coveragePlotter(theaterDisplay,'Alpha',[0.2 0]); detPlotter = detectionPlotter(theaterDisplay,'DisplayName','Radar detections','MarkerFaceColor',radarColor); title('Radar Detection With an Interfering Emitter'); plotPlatform(platRadarPlotter, platRadar.pose.Position); plotPlatform(platEmitPlotter, platEmit.pose.Position); plotPlatform(platPlotter, scene.Platforms{3}.pose.Position); plotCoverage(covPlotter, coverageConfig(scene), [-1 2], {emitterColor, radarColor});
На предыдущем рисунке платформа, несущая перспективный радар, показывается синим ромбом, и текущее поле зрения радара является синей областью, происходящей из платформы. В нижней части фигуры платформа, несущая вмешивающуюся эмиссию RF, показывается желтым ромбом, и текущее поле зрения эмиттера является соответствующей желтой областью. Платформы без любых эмиттеров или датчиков, присоединенных к ним, упоминаются как цели и отображены как черные треугольники.
Симулируйте моностатические обнаружения
В многоскоростных сценариях можно или найти частоту обновления, которая является общим делителем всех датчиков и эмиттерных уровней, заданных в сценарии, или можно использовать непрерывное обновление, которое автоматически совершенствует сценарий к следующему допустимому разу обновления, когда вы вызываете advance
.
scene.UpdateRate = 0
scene = radarScenario with properties: IsEarthCentered: 0 UpdateRate: 0 SimulationTime: 0 StopTime: 10 SimulationStatus: NotStarted Platforms: {1x3 cell}
Для каждого шага в следующем цикле используйте:
advance
перемещать все платформы согласно их траекториям.
emit
обновить направление передачи выбросов platEmit
.
propagate
распространить эмиссию непосредственно на каждую платформу в сценарии, который находится в поле зрения эмиттера. Каждая платформа, которая получает прямую эмиссию пути, генерирует отражение одно возврата, которое также распространено на любую платформу как отраженная эмиссия.
detect
сгенерировать обнаружения от эмиссии, полученной в platRadar
.
Следующий рисунок показывает распространение эмиссии с эмиттера на радарный датчик.
% Set the random seed for repeatable results. rng(2018); plotDets = {}; while advance(scene) % Emit the RF signal. txEmiss = emit(scene); % Reflect the emitted signal off of the platforms in the scenario. reflEmiss = propagate(scene, txEmiss); % Generate detections from the monostatic radar sensor. [dets, config] = detect(scene, reflEmiss); % Reset detections every time the radar completes a sector scan. if config.IsScanDone % Reset plotDets = dets; else % Buffer plotDets = [plotDets;dets]; %#ok<AGROW> end % Update display with current platform positions, beam positions and detections. plotPlatform(platRadarPlotter, platRadar.pose.Position); plotPlatform(platEmitPlotter, platEmit.pose.Position); plotPlatform(platPlotter, scene.Platforms{3}.pose.Position); plotCoverage(covPlotter, coverageConfig(scene), [-1 2], {emitterColor, radarColor}); if ~isempty(plotDets) allDets = [plotDets{:}]; % Extract column vector of measurement positions meas = [allDets.Measurement]'; plotDetection(detPlotter,meas); end end
Предыдущий рисунок показывает, что радар (отображенный синим) только может обнаружить цель посреди сценария. Обнаружения показываются синими, заполненными кругами и сделаны каждый раз, когда поле зрения радара (то есть, ширина луча) развертывается через цель. Однако, когда развертки луча радара через платформу испускания (отображенный желтым), никакие обнаружения не сгенерированы, поскольку интерференция, сгенерированная этой платформой, предотвращает обнаружение радаром.
В предыдущем разделе радар не может обнаружить местоположение платформы испускания, потому что выбросы той платформы маскируют собственную эмиссию радара. Однако такая сильная эмиссия может быть обнаружена и идентифицирована пассивными датчиками, которые прислушиваются к эмиссии RF. Эти датчики часто упоминаются как электронные меры по поддержке (ESM). Эти датчики обычно слушают через широкий диапазон частот и пытаются идентифицировать уникальные эмиттеры, направление прибытия выбросов тех эмиттеров, и каждый раз, когда возможно, тип формы волны, используемой эмиттером.
Создайте датчик ESM
Снова используйте сценарий от предыдущего раздела, но замените моностатический радар на первой платформе с датчиком ESM. Используйте radarDataGenerator
смоделировать датчик ESM и гарантировать, что датчик сконфигурирован так, чтобы его центральная частота и полоса пропускания включали спектр RF эмиттера. В противном случае это будет не мочь обнаружить эмиттер.
restart(scene); esm = radarDataGenerator(1,'No scanning', ... 'DetectionMode','ESM', ... 'UpdateRate',12.5, ... % Hz 'MountingAngles',[0 0 0], ... % [Z Y X] deg 'FieldOfView',[30 10], ... % [az el] deg 'CenterFrequency',300e6, ... % Hz 'Bandwidth',30e6, ... % Hz 'WaveformTypes',0, ... % Detect the interference waveform type 'HasINS',true)
esm = radarDataGenerator with properties: SensorIndex: 1 EmitterIndex: 1 UpdateRate: 12.5000 DetectionMode: 'ESM' ScanMode: 'No scanning' MountingLocation: [0 0 0] MountingAngles: [0 0 0] FieldOfView: [30 10] FalseAlarmRate: 1.0000e-06 Show all properties
Замените радар на второй платформе с датчиком ESM.
platESM = scene.Platforms{2}; platESM.Sensors = esm;
Обновите визуализацию соответственно.
platRadarPlotter.DisplayName = "ESM sensor"; esmColor = [0.4940 0.1840 0.5560]; platRadarPlotter.MarkerFaceColor = esmColor; % use a helper to add an angle-only detection plotter delete(detPlotter); esmDetPlotter = helperAngleOnlyDetectionPlotter(theaterDisplay,'DisplayName','ESM detections','Color',esmColor,'LineStyle','-'); clearData(covPlotter); plotCoverage(covPlotter, coverageConfig(scene), [-1 1], {emitterColor, esmColor}); title('Passive detection of RF emissions');
На предыдущем рисунке радар заменяется датчиком ESM, смонтированным на второй платформе. Поле зрения датчика ESM отображают пурпурным и включает и испускание и целевые платформы.
Симулируйте обнаружения ESM
Теперь симулируйте обнаружения с помощью датчика ESM вместо радара. Заметьте, что, потому что датчик ESM является пассивным датчиком, это не может локализовать платформу испускания, но указывает на направление прибытия эмиссии платформы. Эти обнаружения только для угла показываются лучами, происходящими из датчика ESM к платформе испускания.
% Set the random seed for repeatable results. rng(2018); plotDets = {}; snap = []; while advance(scene) % Emit the RF signal. txEmiss = emit(scene); % Reflect the emitted signal off of the platforms in the scenario. reflEmiss = propagate(scene, txEmiss); % Generate detections from the ESM sensor. [dets, config] = detect(scene, reflEmiss); % Reset detections every time the radar completes a sector scan. if config.IsScanDone % Reset plotDets = dets; else % Buffer plotDets = [plotDets;dets]; %#ok<AGROW> end % Update display with current platform positions, beam positions, and detections. plotPlatform(platRadarPlotter, platRadar.pose.Position); plotPlatform(platEmitPlotter, platEmit.pose.Position); plotPlatform(platPlotter, scene.Platforms{3}.pose.Position); plotCoverage(covPlotter, coverageConfig(scene), [-1 1], {emitterColor, esmColor}); plotDetection(esmDetPlotter,plotDets); % Record the reflected detection at t = 2 seconds. snap = getSnap(ax, scene.SimulationTime, 2, snap); drawnow end title('RF emitter detected by an ESM sensor');
Датчик ESM обнаруживает эмиссию RF и оценивает их направление прибытия. Эту оценку показывает пурпурная линия, происходящая из датчика и тесно передающая эмиттером. Угловая оценка является шумной, который является, почему линия не передает непосредственно через местоположение эмиттера.
Датчик ESM классифицирует типы формы волны на свои обнаружения, о которых сообщают. Для этого эмиттера это сообщает о шумовом типе формы волны, используемом эмиттером: 0.
dets{1}.ObjectAttributes{1}
ans = struct with fields:
TargetIndex: 1
EmitterIndex: 1
WaveformType: 0
SNR: 184.8224
Заметьте, что отношение сигнал-шум (SNR) испускаемого сигнала, обнаруженного датчиком, является очень большим, 185 дБ. Поскольку эмиттер RF имеет большую силу, отражения испускаемой формы волны прочь цели также обнаруживаются датчиком ESM. Это замечено в 2 секунды в симуляцию, когда цель находится в поле зрения эмиттера.
figure; imshow(snap.cdata);
title('Emitter and Target Detected by an ESM Sensor');
Предыдущий рисунок показывает эмиссию, которая обнаруживается и от эмиттера и от цели, когда цель получает энергию от эмиттера и повторно испускает ту форму волны назад в сценарий, заставляя его быть обнаруженной датчиком ESM также.
Моностатические радары также испускают формы волны в сценарий. Пассивное обнаружение этой эмиссии иногда желательно. Для этого необходимо смоделировать и испускание и обнаружение фрагментов радара отдельно. Эмиттер генерирует формы волны, которые становятся частью эмиссии RF сценария. Эти формы волны могут затем быть обнаружены другими датчиками, такими как датчик ESM.
Снова используйте тот же сценарий до. Для этого сценария присоедините моностатический радар к платформе наверху сценария (вторая платформа) и присоедините датчик ESM к платформе в нижней части сценария (первая платформа). Средняя платформа остается цель без эмиттеров или датчиков, присоединенных к нему.
restart(scene);
Создайте моностатический радар путем моделирования и испускания и обнаружения фрагментов датчика. Используйте radarEmitter
смоделировать моностатический радарный эмиттер. Для этого сценария используйте 1, чтобы указать на тип формы волны, используемый этим радаром. Тип формы волны является перечислением, заданным пользователем, чтобы представлять различные виды форм волны, симулированных в сценарии. Перечисление формы волны позволяет эмиттерам и датчикам знать, как обработать эти формы волны, чтобы сгенерировать обнаружения. Например, если эмиттер имеет тип формы волны 1, и датчик включает это в свой список форм волны, то датчик знает, как обработать эмиссию эмиттера (например, с помощью согласованного фильтра) и понимает усиление обработки, сопоставленное с той формой волны.
% Create the emitter for the monostatic radar. radarTx = radarEmitter(2,'Sector', ... 'UpdateRate',12.5, ... % Hz 'MountingAngles',[0 0 0], ... % [Z Y X] deg 'FieldOfView',[2 10], ... % [az el] deg 'CenterFrequency',300e6, ... % Hz 'Bandwidth',3e6, ... % Hz 'ProcessingGain',50, ... % dB 'WaveformType',1) % Use 1 to indicate this radar's waveform.
radarTx = radarEmitter with properties: EmitterIndex: 2 UpdateRate: 12.5000 ScanMode: 'Mechanical' MountingLocation: [0 0 0] MountingAngles: [0 0 0] FieldOfView: [2x1 double] MaxMechanicalScanRate: 75 MechanicalScanLimits: [-45 45] MechanicalAngle: 0 LookAngle: 0 HasElevation: 0 EIRP: 100 CenterFrequency: 300000000 Bandwidth: 3000000 WaveformType: 1 ProcessingGain: 50
Используйте radarDataGenerator
смоделировать распознающийся фрагмент радара, который получает эмиссию RF в сценарии, идентифицирует эмиссию, которая соответствует типу формы волны моностатического эмиттера, и генерирует обнаружения от этой полученной эмиссии. Эмиссия, которая не совпадает с типом формы волны эмиттера, обработана как интерференция.
При использовании radarDataGenerator
чтобы смоделировать распознающийся фрагмент моностатического радара, установите DetectionMode
свойство датчика к Monostatic
. Это говорит датчику использовать настройку эмиттера при обработке полученной эмиссии RF. EmissionsInputPort
свойство должно также быть установлено верное, чтобы включить обнаружения на radarEmission
объекты.
radarRx = radarDataGenerator(2, ... 'DetectionMode','Monostatic', ... 'EmissionsInputPort',true, ... 'EmitterIndex',radarTx.EmitterIndex, ... 'HasINS',true, ... 'DetectionCoordinates','Scenario')
radarRx = radarDataGenerator with properties: SensorIndex: 2 EmitterIndex: 2 DetectionMode: 'Monostatic' InterferenceInputPort: 0 EmissionsInputPort: 1 RangeLimits: [0 100000] FalseAlarmRate: 1.0000e-06 Show all properties
Присоедините радарный эмиттер и датчик на вторую платформу.
platRadar = scene.Platforms{2}; platRadar.Emitters = radarTx; platRadar.Sensors = radarRx;
Снова используйте датчик ESM до, но установите список известных типов формы волны для датчика ESM включать форму волны, испускаемую радаром. Если тип формы волны радара не будет известен датчику ESM, он не будет обнаружен.
% Add the radar's waveform to the list of known waveform types for the ESM sensor. esm.WaveformTypes = [0 1]; % Attach the ESM sensor to the first platform. platESM = scene.Platforms{1}; platESM.Emitters = {}; % Remove the emitter. platESM.Sensors = esm;
Обновите отображение, чтобы показать и моностатические обнаружения и обнаружения ESM.
detPlotter = detectionPlotter(theaterDisplay,'DisplayName','Radar detections','MarkerFaceColor',radarColor); platRadarPlotter.DisplayName = 'Monostatic radar'; platRadarPlotter.MarkerFaceColor = radarColor; platEmitPlotter.DisplayName = 'ESM sensor'; platEmitPlotter.MarkerFaceColor = esmColor; clearData(esmDetPlotter); clearData(covPlotter); covcon = coverageConfig(scene); plotCoverage(covPlotter, covcon([1 3]) , [1 -2], {esmColor, radarColor}); title(ax,'Passive detection of a monostatic radar');
Предыдущий рисунок показывает радар, сканируя сектор азимута перед его платформой, которая включает обоих целевая платформа, а также платформа, несущая датчик ESM. Радар генерирует обнаружения для обеих из этих платформ, когда его поле зрения (отображенный синим) развертывается по их местоположению. Однако, когда луч радара передает по местоположению датчика ESM, датчик ESM обнаруживает радар и указывает на предполагаемое положение, чертя линию, происходя из датчика.
% Set the random seed for repeatable results. rng(2018); platforms = scene.Platforms; numPlat = numel(platforms); plotDets = {}; snap = []; while advance(scene) % Emit the RF signal. [txEmiss, txConfigs] = emit(scene); % Reflect the emitted signal off of the platforms in the scenario. reflEmiss = propagate(scene, txEmiss); % Generate detections from the sensors. [dets, config] = detect(scene, reflEmiss, txConfigs); % Reset detections every time the radar completes a sector scan. if txConfigs(end).IsScanDone % Reset plotDets = dets; else % Buffer plotDets = [plotDets;dets];%#ok<AGROW> end % Update display with current platform positions, beam positions, and detections. plotPlatform(platRadarPlotter, platRadar.pose.Position); plotPlatform(platEmitPlotter, platEmit.pose.Position); plotPlatform(platPlotter, scene.Platforms{3}.pose.Position); covcon = coverageConfig(scene); plotCoverage(covPlotter, covcon([1 3]) , [1 -2], {esmColor, radarColor}); plotDetection(esmDetPlotter,plotDets); plotMonostaticDetection(detPlotter,plotDets); % Record the reflected detection at t = 5.6 seconds. snap = getSnap(ax, scene.SimulationTime, 5.6, snap); drawnow end
Обнаружения от моностатического радара, смоделированного с помощью radarEmitter
и radarDataGenerator
показываются заполненными, синими кругами около цели и платформы, оборудованной датчиком ESM. Датчик ESM также может обнаружить радар, как обозначается обнаружением только для угла, показавшим линией, происходящей из датчика ESM и передающей около радарной платформы.
figure; imshow(snap.cdata);
title('Radar and Target Detected by an ESM Sensor');
Из-за большой мощности (EIRP) эмиссии радара испускаемая энергия отражается прочь цели к платформе ESM. Следовательно, датчик ESM обнаруживает целевую платформу, когда радарное поле зрения эмиттера проносится мимо целевой платформы, в то время как цель все еще в поле зрения датчика ESM.
getSnap
записывает снимок состояния оси в данное поспешное время.
function snap = getSnap(hAx, curTime, snapTime, prevSnap) if ~isempty(prevSnap) snap = prevSnap; elseif curTime >= snapTime && curTime < snapTime + 0.05 hAx.Title.Visible = 'off'; snap = getframe(hAx.Parent); hAx.Title.Visible = 'on'; else snap = []; end end
plotMonostaticDetection
обнаружения синтаксических анализов, чтобы построить только моностатические обнаружения с detectionPlotter
.
function plotMonostaticDetection(plotter, dets) if ~isempty(dets) % Pass only monostatic detections to the detectionPlotter radarDetId = cellfun(@(x) x.SensorIndex == 2, dets); if any(radarDetId) % Extract measurement positions for the monostatic radar radarDets = [dets{radarDetId}]; meas = [radarDets.Measurement]'; plotDetection(plotter,meas); end end end