В этом примере показано, как смоделировать и симулировать выход активных и пассивных радарных датчиков с помощью radarDataGenerator
. В этом примере вы наблюдаете, как радиочастотная (RF) интерференция влияет на эффективность обнаружения радара. Кроме сложения, вы используете пассивные радарные датчики, чтобы оценить местоположение и тип радиочастотной интерференции.
Оценка эффективности отслеживания для радаров требует моделирования радиочастотного (RF) сценария. Это включает в себя:
Генерация выбросов РФ
Распространение выбросов и отражение этих выбросов с платформ
Прием выбросов, вычисление потерь помех и генерация обнаружений
В этом примере показано, как выполнить каждый из шагов выше с помощью сценария, состоящего из трех платформ:
Воздушная платформа, летящая на север в 500 км/ч от дна сценария
Воздушная платформа, летящая на юг в 600 км/ч от верхней части сценария
Воздушная платформа, летящая на восток в 700 км/ч в середине сценария
% Create a radar scenario to manage the movement of the platforms. scene = radarScenario; % Set the duration of the scenario to 10 seconds. 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 мешают формам волны, излучаемым радаром. Когда это происходит, радар будет испытывать ухудшение эффективности обнаружения в направлении интерферирующих сигналов. Прикрепите радиочастотный излучатель к платформе в нижней части сценария (первая платформа) и радар к платформе в верхней части сценария (вторая платформа).
Создайте радиочастотный излучатель
Моделируйте радиочастотный выброс с помощью radarEmitter
. Излучатель находится в перспективном строении с азимутальным полем зрения 20 степеней, чтобы включить 2 другие платформы в сценарий. Эффективная изотропная излучаемая степень (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
для моделирования этого типа радара. Сконфигурируйте радар, чтобы сканировать сектор азимута перед его платформой, которая включает другие платформы.
% Create a monostatic radar. radar = radarDataGenerator(2, 'Sector', ... 'DetectionMode', 'monostatic', ... 'UpdateRate', 12.5, ... % Hz 'FieldOfView', [2 10]); % [az el] deg % Mount the radar so that it scans the sector in front of the second % platform which includes the interfering signal and the third platform. radar.MountingAngles = [0 0 0]; % [Z Y X] deg % Enable the radar's INS input so that it can use the pose estimated by % the platform's pose estimator to generate detections. radar.HasINS = true; % Enable the radar's interference input so that the interference signal % created by the emitter above can be passed to the radar. radar.InterferenceInputPort = true; % Set coordinate system for detections to scenario 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
% Attach the radar to the second platform.
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});
На предыдущем рисунке платформа, несущая перспективный радар, показана в виде синего алмаза, с текущим полем зрения радара в виде синей области, исходящей от платформы. В нижней части рисунка платформа, несущая мешающий радиочастотный выброс, показана в виде желтого алмаза с текущим полем зрения эмиттера, показанным в виде соответствующей желтой области. Платформы без каких-либо эмиттеров или датчиков, прикрепленных к ним, называются целями и отображаются как черные треугольники.
Моделируйте моностатические обнаружения
В многоскоростных сценариях можно либо найти частоту обновления, которая является общим разделителем всех частот датчиков и излучателей, определенных в сценарии, либо использовать непрерывное обновление, которое автоматически переведет сценарий к следующему допустимому времени обновления при вызове 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
Как показано на предыдущем рисунке, радар (показан синим цветом) способен обнаружить цель только в середине сценария. Обнаружения показаны как синие, заполненные круги и выполняются всякий раз, когда поле зрения радара (например, луч) охватывает цель. Однако, когда луч радара протекает через излучающую платформу (показанную желтым цветом), никаких обнаружений не генерируется, поскольку помехи, генерируемые этой платформой, препятствуют обнаружению радаром.
В предыдущем разделе радар не смог обнаружить местоположение излучающей платформы, потому что выбросы этой платформы маскировали собственные выбросы радара. Однако такие сильные выбросы могут быть обнаружены и идентифицированы пассивными датчиками, которые слушают выбросы РФ в сценарии. Эти датчики часто называются электронными мерами поддержки (ESM). Эти датчики обычно слушают широкую область значений частот и пытаются идентифицировать уникальные излучатели, направление поступления выбросов от этих излучателей и, когда это возможно, тип формы волны, используемой излучателем.
Создайте датчик ESM
Повторно используйте сценарий из предыдущего раздела, но замените моностатический радар на первой платформе на датчик ESM. Использование radarDataGenerator
смоделировать датчик ESM и убедиться, что датчик сконфигурирован так, чтобы его центральная частота и полоса пропускания включали радиочастотный спектр эмиттера. В противном случае он не сможет обнаружить эмиттер.
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 sec snap = getSnap(ax, scene.SimulationTime, 2, snap); drawnow end title('RF emitter detected by an ESM sensor');
Выбросы RF обнаруживаются, и направление их прибытия оценивается датчиком ESM. Это показано пурпурной линией, исходящей от датчика и близко проходящей мимо излучателя. В расчетном угле есть некоторый шум, из-за чего линия не проходит непосредственно через расположение излучателя.
Датчик ESM классифицирует типы сигналов в своих сообщенных обнаружениях. Для этого эмиттера он сообщает тип шумового сигнала, используемый эмиттером: 0.
dets{1}.ObjectAttributes{1}
ans = struct with fields:
TargetIndex: 1
EmitterIndex: 1
WaveformType: 0
SNR: 184.8224
Заметьте, что отношение сигнал/шум (ОСШ) излучаемого сигнала, обнаруженного датчиком, очень велико, 185 дБ. Поскольку радиочастотный излучатель имеет высокую степень, отражения излучаемой формы волны от цели также будут обнаруживаться датчиком ESM. Это видим через 2 секунды в симуляции, когда цель лежит в поле зрения эмиттера.
figure; imshow(snap.cdata);
title('Emitter and target detected by an ESM sensor');
На предыдущем рисунке выбросы обнаруживаются как от излучателя, так и от цели, так как цель получает энергию от излучателя и повторно излучает эту волну обратно в сценарий, вызывая также ее обнаружение датчиком ESM.
Моностатические радары также излучают формы волны в сценарий. Иногда желательно иметь возможность обнаружить их выбросы. Для этого необходимо смоделировать и излучающую, и чувствительные фрагменты радара отдельно. Излучатель генерирует формы сигналов, которые становятся частью выбросов RF сценария. Эти формы волны могут затем быть обнаружены другими датчиками, такими как датчик ESM, представленный в предыдущем разделе.
Повторно используйте тот же сценарий из предыдущих разделов. Для этого сценария приложите моностатический радар к платформе в верхней части сценария (вторая платформа) и прикрепите датчик ESM к платформе в нижней части сценария (первая платформа). Средняя платформа остается мишенью, к которой не прикреплены излучатели или датчики.
restart(scene);
Создайте моностатический радар путем моделирования и излучающей, и чувствительных фрагментов датчика. Использование radarEmitter
для моделирования моностатического радиолокационного излучателя. Для этого сценария используйте 1, чтобы указать тип формы волны, используемый этим радаром, где, возможно, 1 представляет щебет LFM с некоторыми предопределенными параметрами. Тип формы волны является перечислением, заданным пользователем, чтобы представлять различные виды формы волны, моделируемые в сценарии. Это позволяет излучателям и датчикам знать, как обрабатывать эти формы волны для генерации обнаружений. Например, если эмиттер имеет тип формы волны 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
для моделирования чувствительного фрагмента радара, которая получает выбросы РФ в сценарии, идентифицирует выбросы, которые соответствуют типу волны моностатического излучателя, и генерирует обнаружения от этих полученных выбросов. Выбросы, которые не соответствуют типу волны излучателя, рассматриваются как помехи.
При использовании radarDataGenerator
чтобы смоделировать чувствительный фрагмент моностатического радара, установите DetectionMode
свойство датчика к Monostatic
. Это говорит датчику использовать строение излучателя при обработке полученных радиочастотных выбросов. The EmissionsInputPort
свойство также должно быть задано как true, чтобы включить обнаружение на 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 TargetReportFormat: 'Clustered detections' Show all properties
% Attach to the radar emitter and sensor to the second platform.
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 sec 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