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

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

Введение

Оценка отслеживания производительности для радаров требует моделирования сценария радиочастоты (RF). Это включает:

  • Генерация эмиссии РФ

  • Распространение эмиссии и отражение этих выбросов платформ

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

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

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

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

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

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

% Add path to helper files used by this example.
helperPath = fullfile(matlabroot,'examples','fusion','main');
addpath(helperPath);

% Remove path to helper files when 'cleanPath' variable is cleared or deleted.
cleanPath = onCleanup(@()rmpath(helperPath));

% Create a tracking scenario to manage the movement of the platforms.
scene = trackingScenario;

% Set the duration of the scenario to 10 seconds.
scene.StopTime = 10; % s

% Platform 1: Airborne and northbound at 500 kph
spd = 500*1e3/3600; % m/s
wp1 = [0 0 0];
wp2 = [spd*scene.StopTime 0 0];
toa = [0; scene.StopTime];
platform(scene, 'Trajectory', waypointTrajectory('Waypoints', [wp1; wp2], 'TimeOfArrival', toa));

% Platform 2: Airborne and southbound at 600 kph
spd = 600*1e3/3600; % m/s
wp1 = [30e3+spd*scene.StopTime 0 0];
wp2 = [30e3 0 0];
toa = [0; scene.StopTime];
platform(scene, 'Trajectory', waypointTrajectory('Waypoints', [wp1; wp2], 'TimeOfArrival', toa));

% Platform 3: Airborne and eastbound at 700 kph
spd = 700*1e3/3600; % m/s
wp1 = [10e3 1e3 0];
wp2 = [10e3 1e3+spd*scene.StopTime 0];
toa = [0; scene.StopTime];
platform(scene, 'Trajectory', waypointTrajectory('Waypoints', [wp1; wp2], 'TimeOfArrival', toa));

Покажите платформы в сценарии.

helperDisplay = helperRadarExampleDisplay(scene);
legend('Ground', 'Platforms');

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

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

Создайте эмиттер РФ

Смоделируйте эмиссию РФ с помощью 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
       Dimensions: [1x1 struct]
       Trajectory: [1x1 waypointTrajectory]
    PoseEstimator: [1x1 insSensor]
         Emitters: {[1x1 radarEmitter]}
          Sensors: {}
       Signatures: {[1x1 rcsSignature]  [1x1 irSignature]  [1x1 tsSignature]}

Создайте моностатический радар

Оборудуйте вторую платформу моностатическим радаром. Используйте monostaticRadarSensor смоделировать этот тип радара. Сконфигурируйте радар, чтобы отсканировать сектор азимута перед его платформой, которая включает другие платформы.

% Create a monostatic radar.
radar = monostaticRadarSensor(2, 'Sector', ...
    '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.HasInterference = true

% Attach the radar to the second platform.
platRadar = scene.Platforms{2};
platRadar.Sensors = radar;
radar = 

  monostaticRadarSensor with properties:

                  SensorIndex: 2
                   UpdateRate: 12.5000
                     ScanMode: 'Mechanical'

             MountingLocation: [0 0 0]
               MountingAngles: [0 0 0]

          MaxUnambiguousRange: 100000
    MaxUnambiguousRadialSpeed: 200
                  FieldOfView: [2x1 double]
        MaxMechanicalScanRate: 75
         MechanicalScanLimits: [-45 45]
              MechanicalAngle: 0
                    LookAngle: 0

         DetectionProbability: 0.9000
               FalseAlarmRate: 1.0000e-06

  Use get to show all properties

Обновите отображение, чтобы показать платформы и радар и эмиттер в сценарии.

close(helperDisplay);
helperDisplay = helperRadarExampleDisplay(scene);
title('Radar detection with an interfering emitter');

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

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

Сконфигурируйте частоту обновления сценария, чтобы совпадать с частотой обновления датчика и эмиттерных систем в сценарии. Общая частота обновления найдена при помощи локальной функции commonRate.

% Calculate a common rate to advance the scenario.
rate = commonRate(scene.Platforms); % Hz

Усовершенствуйте сценарий в общей частоте обновления до StopTime сценария был достигнут.

scene.UpdateRate = rate
scene = 

  trackingScenario with properties:

        UpdateRate: 12.5000
          StopTime: 10
    SimulationTime: 0
         IsRunning: 1
         Platforms: {1x3 cell}

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

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

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

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

  4. detect сгенерировать обнаружения от эмиссии, полученной в platRadar.

Это распространение эмиссии эмиттера с эмиттера на радарный датчик проиллюстрировано в следующем изображении.

% Set the random seed for repeatable results.
rng(2018);

plotDets = {};
while advance(scene)

    % Get current simulation time.
    time = scene.SimulationTime;

    % Emit the RF signal.
    [txEmiss, txConfig] = emit(platEmit, time);

    % Reflect the emitted signal off of the platforms in the scenario.
    reflEmiss = radarChannel(txEmiss, scene.Platforms);

    % Generate detections from the monostatic radar sensor.
    [dets, ~, config] = detect(platRadar, reflEmiss, time);

    % Reset detections every time the radar completes a sector scan.
    if config.IsScanDone
        % Reset
        plotDets = dets;
    else
        % Buffer
        plotDets = cat(1,plotDets,dets);
    end

    % Update display with current beam positions and detections.
    helperDisplay(txEmiss,plotDets,config);
end

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

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

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

Создайте датчик ESM

Снова используйте сценарий от предыдущего раздела, но замените моностатический радар на первой платформе с датчиком ESM. Используйте radarSensor смоделировать датчик ESM и гарантировать, что датчик сконфигурирован так, чтобы его центральная частота и пропускная способность включали спектр РФ эмиттера. В противном случае это будет неспособно способный обнаружить эмиттер.

restart(scene);
esm = radarSensor(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 = 

  radarSensor with properties:

         SensorIndex: 1
          UpdateRate: 12.5000
            ScanMode: 'No scanning'
       DetectionMode: 'ESM'

    MountingLocation: [0 0 0]
      MountingAngles: [0 0 0]

         FieldOfView: [2x1 double]
     MechanicalAngle: 0
           LookAngle: 0

         Sensitivity: -50
      FalseAlarmRate: 1.0000e-06

  Use get to show all properties

Замените радар на второй платформе с датчиком ESM.

platESM = scene.Platforms{2};
platESM.Sensors = esm;
close(helperDisplay);
helperDisplay = helperRadarExampleDisplay(scene);
title('Passive detection of RF emissions');

% Take a snapshot 2 seconds into the scenario.
snapTime = 2; % s
helperDisplay.GrabFigureFcn = @(scene,fig)helperGrabFigureOnce(scene,fig,snapTime);

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

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

% Set the random seed for repeatable results.
rng(2018);

% Set update rate for the scenario to a common rate for the sensors and
% emitters.
rate = commonRate(scene.Platforms); % Hz
scene.UpdateRate = rate;

plotDets = {};
while advance(scene)

    % Get current simulation time.
    time = scene.SimulationTime;

    % Emit the RF signal.
    [txEmiss, txConfig] = emit(platEmit, time);

    % Reflect the emitted signal off of the platforms in the scenario.
    reflEmiss = radarChannel(txEmiss, scene.Platforms);

    % Generate detections from the monostatic radar sensor.
    [dets, ~, config] = detect(platESM, reflEmiss, time);

    % Reset detections every time the radar completes a sector scan.
    if config.IsScanDone
        % Reset
        plotDets = dets;
    else
        % Buffer
        plotDets = cat(1,plotDets,dets);
    end

    % Update display with current beam positions and detections.
    helperDisplay(txEmiss,plotDets,config);
end
title('RF emitter detected by an ESM sensor');

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

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

dets{1}.ObjectAttributes{1}
ans = 

  struct with fields:

     TargetIndex: 1
    EmitterIndex: 1
    WaveformType: 0
             SNR: 184.7839

Заметьте, что отношение сигнал-шум (SNR) испускаемого сигнала, обнаруженного датчиком, является очень большим, 185 дБ. Поскольку эмиттер РФ имеет большую силу, отражения испускаемой формы волны прочь цели будут также обнаружены датчиком ESM. Это замечено в 2 секунды в симуляции, когда цель находится в поле зрения эмиттера.

% Show the snapshot taken at 2 seconds into the simulation.
showGrabs(helperDisplay, 1);
title('Emitter and target detected by an ESM sensor');

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

Пассивное обнаружение моностатических радаров

Моностатические радары также испускают формы волны в сценарий. Иногда желательно смочь обнаружить их эмиссию. Для этого необходимо смоделировать и испускание и обнаружение фрагментов радара отдельно. Эмиттер генерирует формы волны, которые становятся частью эмиссии РФ сценария. Эти формы волны могут затем быть обнаружены другими датчиками, такими как датчик 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

Используйте radarSensor смоделировать распознающийся фрагмент радара, который получает эмиссию РФ в сценарии, идентифицирует эмиссию, который соответствует типу формы волны моностатического эмиттера и генерирует обнаружения от этой полученной эмиссии. Эмиссия, которая не совпадает с типом формы волны эмиттера, обработана как интерференция.

При использовании radarSensor чтобы смоделировать распознающийся фрагмент моностатического радара, необходимо установить DetectionMode свойство датчика к Monostatic. Это говорит датчику использовать настройку эмиттера при обработке полученной эмиссии РФ.

radarRx = radarSensor(2, ...
    'DetectionMode', 'Monostatic', ...
    'EmitterIndex', radarTx.EmitterIndex, ...
    'HasINS', true)

% Attach to the radar emitter and sensor to the second platform.
platRadar = scene.Platforms{2};
platRadar.Emitters = radarTx;
platRadar.Sensors = radarRx;
radarRx = 

  radarSensor with properties:

                  SensorIndex: 2
                DetectionMode: 'Monostatic'
                 EmitterIndex: 2

          MaxUnambiguousRange: 100000
    MaxUnambiguousRadialSpeed: 200
                    LookAngle: 0

                  Sensitivity: -50
               FalseAlarmRate: 1.0000e-06

  Use get to show all properties

Снова используйте датчик 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;

% Show the configuration of sensors and platforms.
close(helperDisplay);
helperDisplay = helperRadarExampleDisplay(scene);
title('Passive detection of a monostatic radar');

% Take a snapshot 2 seconds into the scenario.
snapTime = 2; % s
helperDisplay.GrabFigureFcn = @(scene,fig)helperGrabFigureOnce(scene,fig,snapTime);

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

% Set the random seed for repeatable results.
rng(2018);

platforms = scene.Platforms;
numPlat = numel(platforms);

% Set update rate for the scenario to a common rate for the sensors and emitters.
rate = commonRate(platforms); % Hz
scene.UpdateRate = rate;

plotDets = {};
while advance(scene)

    % Get current simulation time.
    time = scene.SimulationTime;

    % Collect emitted signals.
    txEmiss = {};
    txConfigs = [];
    for iPlat = 1:numPlat
        thisPlatform = platforms{iPlat};

        % Generate signals for each emitter on this platform.
        [theseSigs, theseConfigs] = emit(thisPlatform, time);
        txEmiss = {txEmiss{:}, theseSigs{:}}; %#ok<CCAT>
        txConfigs = [txConfigs; theseConfigs]; %#ok<AGROW>
    end

    % Reflect signals off of platforms in the scenario.
    reflSigs = radarChannel(txEmiss, platforms);

    % Generate detections.
    bufferDets = {};
    rxConfigs = [];
    for iPlat = 1:numPlat
        thisPlatform = platforms{iPlat};

        % Generate detections for each detector on this platform.
        [theseDets, ~, theseConfigs] = detect(thisPlatform, reflSigs, txConfigs, time);

        bufferDets = [bufferDets; theseDets]; %#ok<AGROW>

        % Collect configurations for each detector.
        rxConfigs = [rxConfigs; theseConfigs]; %#ok<AGROW>
    end

    % Reset detections after every scan of radar sensor.
    if txConfigs(end).IsScanDone
        plotDets = bufferDets;
    else
        plotDets = [plotDets;bufferDets]; %#ok<AGROW>
    end

    % Update display with current beam position, and detections.
    helperDisplay(reflSigs,plotDets,rxConfigs);
end
title('Radar detected by an ESM sensor');

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

% Show the snapshot taken at 2 seconds into the simulation.
showGrabs(helperDisplay, 1);
title('Radar and target detected by an ESM sensor');

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

Сводные данные

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

% Remove path to helper files used by this example.
delete(cleanPath);

Вспомогательные Функции

commonRate

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

function rate = commonRate(platforms)
dt = [];
for iPlat = 1:numel(platforms)
    thisPlatform = platforms{iPlat};
    theseSensors = thisPlatform.Sensors;
    for iSensor = 1:numel(theseSensors)
        thisSensor = theseSensors{iSensor};
        tau = round(1e6/thisSensor.UpdateRate); % microseconds
        if isempty(dt)
            dt = tau;
        else
            dt = gcd(dt,tau);
        end
    end
end
rate = 1e6./dt; % Hz
end