Симулируйте пассивные радарные датчики и радарную интерференцию

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

Создайте сценарий

Оценка отслеживания эффективности для радаров требует моделирования сценария радиочастоты (RF). Рабочий процесс моделирования следующие:

  • Сгенерируйте эмиссию RF.

  • Распространите эмиссию и отразите эти выбросы платформ.

  • Получите эмиссию, вычислите интерференционные потери и сгенерируйте обнаружения.

В этом примере вы выполняете каждый из этих шагов с помощью сценария, состоящего из трех платформ:

  1. Бортовая платформа летающий север на уровне 500 км/ч от нижней части сценария

  2. Бортовая платформа летающий юг на уровне 600 км/ч от верхней части сценария

  3. Бортовая платформа летающий восток на уровне 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);

Figure contains an axes object. The axes object contains 3 objects of type patch, line. These objects represent Ground, Platforms, Trajectories.

Радарное обнаружение в присутствии вмешивающейся эмиссии

Часто, радар действует в среде, где другая нежелательная эмиссия 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});

Figure contains an axes object. The axes object with title Radar Detection With an Interfering Emitter contains 6 objects of type patch, line. These objects represent Ground, Targets, Trajectories, RF emitter, Monostatic radar, Radar detections.

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

Симулируйте моностатические обнаружения

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

scene.UpdateRate = 0
scene = 
  radarScenario with properties:

     IsEarthCentered: 0
          UpdateRate: 0
      SimulationTime: 0
            StopTime: 10
    SimulationStatus: NotStarted
           Platforms: {1x3 cell}

Для каждого шага в следующем цикле используйте:

  1. advance перемещать все платформы согласно их траекториям.

  2. emit обновить направление передачи выбросов platEmit.

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

  4. 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

Figure contains an axes object. The axes object with title Radar Detection With an Interfering Emitter contains 6 objects of type patch, line. These objects represent Ground, Targets, Trajectories, RF emitter, Monostatic radar, Radar detections.

Предыдущий рисунок показывает, что радар (отображенный синим) только может обнаружить цель посреди сценария. Обнаружения показываются синими, заполненными кругами и сделаны каждый раз, когда поле зрения радара (то есть, ширина луча) развертывается через цель. Однако, когда развертки луча радара через платформу испускания (отображенный желтым), никакие обнаружения не сгенерированы, поскольку интерференция, сгенерированная этой платформой, предотвращает обнаружение радаром.

Пассивное обнаружение эмиссии RF

В предыдущем разделе радар не может обнаружить местоположение платформы испускания, потому что выбросы той платформы маскируют собственную эмиссию радара. Однако такая сильная эмиссия может быть обнаружена и идентифицирована пассивными датчиками, которые прислушиваются к эмиссии 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');

Figure contains an axes object. The axes object with title Passive detection of RF emissions contains 6 objects of type patch, line. These objects represent Ground, Targets, Trajectories, RF emitter, ESM sensor, ESM detections.

На предыдущем рисунке радар заменяется датчиком 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');

Figure contains an axes object. The axes object with title RF emitter detected by an ESM sensor contains 6 objects of type patch, line. These objects represent Ground, Targets, Trajectories, RF emitter, ESM sensor, ESM detections.

Датчик 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');

Figure contains an axes object. The axes object with title Emitter and Target Detected by an ESM Sensor contains an object of type image.

Предыдущий рисунок показывает эмиссию, которая обнаруживается и от эмиттера и от цели, когда цель получает энергию от эмиттера и повторно испускает ту форму волны назад в сценарий, заставляя его быть обнаруженной датчиком 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');

Figure contains an axes object. The axes object with title Passive detection of a monostatic radar contains 7 objects of type patch, line. These objects represent Ground, Targets, Trajectories, ESM sensor, Monostatic radar, ESM detections, Radar detections.

Предыдущий рисунок показывает радар, сканируя сектор азимута перед его платформой, которая включает обоих целевая платформа, а также платформа, несущая датчик 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

Figure contains an axes object. The axes object with title Passive detection of a monostatic radar contains 7 objects of type patch, line. These objects represent Ground, Targets, Trajectories, ESM sensor, Monostatic radar, ESM detections, Radar detections.

Обнаружения от моностатического радара, смоделированного с помощью radarEmitter и radarDataGenerator показываются заполненными, синими кругами около цели и платформы, оборудованной датчиком ESM. Датчик ESM также может обнаружить радар, как обозначается обнаружением только для угла, показавшим линией, происходящей из датчика ESM и передающей около радарной платформы.

figure; imshow(snap.cdata);
title('Radar and Target Detected by an ESM Sensor');

Figure contains an axes object. The axes object with title Radar and Target Detected by an ESM Sensor contains an object of type image.

Из-за большой мощности (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