В этом примере показано, как сгенерировать радарные обнаружения от многоплатформенной радарной сети. Сеть включает три платформы дальних: два бортовых и одно наземное. Такие синтетические данные могут использоваться, чтобы проверить производительность отслеживания архитектур для различных целевых типов и маневров.
Радарные платформы и цели моделируются в сценарии как platforms
. Симуляция движения платформ в сценарии управляема trackingScenario
.
% Create a tracking scenario to manage the movement of the platforms. scene = trackingScenario; % Create tracking scenario scene.UpdateRate = 0; % Use continuous update rate to handle sensors with different update rates sceneDuration = 60; % Duration of scenario in seconds scene.StopTime = sceneDuration;
Добавьте бортовую платформу в сценарий, переместившись на север на уровне 650 км/час на крейсерской высоте 10 км. Сгенерируйте траекторию платформы от waypoints использование waypointTrajectory
.
ht = 10e3; % Altitude in meters spd = 650*1e3/3600; % Speed in m/s start = [-spd*sceneDuration/2 5e3 -ht]; stop = [spd*sceneDuration/2 5e3 -ht]; traj = waypointTrajectory('Waypoints',[start;stop],'TimeOfArrival',[0; sceneDuration]); % Create the airborne platform with its trajectory. plat1 = platform(scene,'Trajectory',traj);
Добавьте плоский радар массивов в платформу. Смонтируйте радар в антенном колпаке на 5 метров выше платформы. Смоделируйте радар как механически вращающуюся фазированную решетку. Радар электронно складывает лучи в вертикальном изменении вдоль опорного направления массива. Технические требования для смоделированного радара сведены в таблицу ниже:
Чувствительность: 0 dBsm 375 км
Механический Скан: Азимут только
Механические Пределы Скана: от 0 до 360 градусов
Электронный Скан: Вертикальное изменение только
Электронные Пределы Скана:-2 к 45 градусам
Поле зрения: азимут на 1 градус, вертикальное изменение на 47 градусов
Измерения: Азимут, вертикальное изменение, область значений
Разрешение азимута: 1 градус
Разрешение вертикального изменения: 5 градусов
Разрешение области значений: 30 м
Смоделируйте механически вращающийся радар с помощью fusionRadarSensor
.
sensorIndex = 1; % Identifies originating sensor of each detection radar = fusionRadarSensor(sensorIndex,'Rotator', ... 'MountingLocation', [0 0 -5], ... % m 'UpdateRate', 12.5, ... % Hz 'ReferenceRCS', 0, ... % dBsm 'ReferenceRange', 375e3, ... % m 'ScanMode', 'Mechanical and electronic', ... 'MechanicalAzimuthLimits', [0 360], ... % deg 'MechanicalElevationLimits', [0 0], ... % deg 'ElectronicAzimuthLimits', [0 0], ... 'ElectronicElevationLimits', [-2 45], ... % deg 'FieldOfView',[1;47.1], ... % deg 'HasElevation', true, ... 'AzimuthResolution', 1, ... % deg 'ElevationResolution', 5, ... % deg 'RangeResolution', 30, ... % m 'HasINS', true); % Attach the radar to its airborne platform. plat1.Sensors = radar;
Добавьте вторую бортовую платформу в сценарий, переместившись на юг на уровне 550 км/час на крейсерской высоте 8 км.
ht = 8e3; % Altitude in meters spd = 550*1e3/3600; % Speed in m/s start = [spd*sceneDuration/2 5e3 -ht]; stop = [-spd*sceneDuration/2 5e3 -ht]; traj = waypointTrajectory('Waypoints',[start;stop],'TimeOfArrival',[0; sceneDuration]); plat2 = platform(scene,'Trajectory',traj);
Несколько датчиков могут быть смонтированы на платформе. Добавьте радар, состоявший из двух линейных фазированных решеток, смонтированных на 5 метров выше платформы. Смонтируйте массивы так, чтобы один массив просмотрел правую сторону корпуса, и другой массив просматривает левую сторону корпуса. Оба массива предоставляют страховую защиту по 150 секторам азимута степени по обе стороны от платформы. Вертикальное изменение не измеряется линейными матрицами. Технические требования для этого радара сведены в таблицу ниже:
Чувствительность: 0 dBsm 350 км
Механический скан: нет
Электронный Скан: Азимут только
Электронные Пределы Скана:-75 к 75 градусам
Поле зрения: азимут на 1 градус, вертикальное изменение на 60 градусов
Измерения: Азимут, область значений
Разрешение азимута: 1 градус
Разрешение области значений: 30 м
Смоделируйте линейный радар фазированной решетки с помощью fusionRadarSensor
.
% Create right facing radar by setting radar's yaw to 90 degrees. sensorIndex = sensorIndex+1; rightRadar = fusionRadarSensor(sensorIndex,'Sector', ... 'MountingLocation', [0 0 -5], ... % m 'MountingAngles', [90 0 0], ... % deg, look over right side 'UpdateRate', 12.5, ... % Hz 'ReferenceRCS', 0, ... % dBsm 'ReferenceRange', 350e3, ... % m 'ScanMode','Electronic', ... 'ElectronicAzimuthLimits',[-75 75], ... % deg 'FieldOfView',[1;60], ... % deg 'HasElevation', false, ... 'AzimuthResolution', 1, ... % deg 'RangeResolution', 30, ... % m 'HasINS', true); % Create an identical radar looking over the left side of the airframe. leftRadar = clone(rightRadar); sensorIndex = sensorIndex+1; leftRadar.SensorIndex = sensorIndex; leftRadar.MountingAngles(1) = -90; % Look over the left side % Attach the two linear radar arrays to the airborne platform. plat2.Sensors = {leftRadar, rightRadar};
Добавьте наземный радар с помощью прямоугольной фазированной решетки, смонтированной на 5 метров выше ее трейлера. Радар электронно рассматривает 60 промежутков азимута степени и 20 градусов вертикального изменения над землей с помощью электронного шаблона развертки растра.
Чувствительность: 0 dBsm 350 км
Механический скан: нет
Электронный Скан: Азимут и повышение
Электронные Пределы Скана:-30 к азимуту на 30 градусов,-20 к вертикальному изменению на 0 градусов
Поле зрения: азимут на 1 градус, вертикальное изменение на 5 градусов
Измерения: Азимут, вертикальное изменение, область значений
Разрешение азимута: 1 градус
Разрешение вертикального изменения: 5 градусов
Разрешение области значений: 30 м
Смоделируйте прямоугольный радар фазированной решетки с помощью fusionRadarSensor
.
% Create an electronically scanning rectangular array radar. sensorIndex = sensorIndex+1; radar = fusionRadarSensor(sensorIndex,'Raster', ... 'MountingLocation', [0 0 -5], ... % m 'UpdateRate', 25, ... % Hz 'ReferenceRCS', 0, ... % dBsm 'ReferenceRange', 350e3, ... % m 'ScanMode','Electronic', ... 'ElectronicAzimuthLimits', [-30 30],... % deg 'ElectronicElevationLimits', [-20 0],... % deg 'FieldOfView', [1;5], ... % deg 'HasElevation', true, ... 'AzimuthResolution', 1, ... % deg 'ElevationResolution', 5, ... % deg 'RangeResolution', 30, ... % m 'HasINS', true); % Attach the rectangular radar array to the trailer platform. plat3 = platform(scene,'Sensors',radar); plat3.Trajectory.Position = [-30e3 30e3 0]; plat3.Trajectory.Orientation = quaternion([-60 0 0],'eulerd','zyx','frame');
Добавьте четыре бортовых цели в области наблюдения.
Авиалайнер перемещаясь на северо-восток на уровне 700 км/час на высоте на 3 000 м
Пересечение авиалайнера, перемещаясь на юго-восток на уровне 900 км/час на высоте на 4 000 м
Авиалайнер перемещаясь на восток на уровне 600 км/час на высоте на 9 000 м
Струя, перемещающаяся на уровне 300 км/час и выполняющая 90 поворотов степени на высоте на 3 000 м
% Add airliner traveling northeast. ht = 3e3; % Altitude in meters spd = 700*1e3/3600; % Speed in m/s ang = 45; rot = [cosd(ang) sind(ang) 0;-sind(ang) cosd(ang) 0; 0 0 1]; offset = [-15e3 -25e3 -ht]; start = offset - [spd*sceneDuration/2 0 0]*rot; stop = offset + [spd*sceneDuration/2 0 0]*rot; traj = waypointTrajectory('Waypoints',[start;stop],'TimeOfArrival',[0; sceneDuration]); rcs = rcsSignature('Pattern', [10 10; 10 10], ... 'Azimuth', [-180 180], 'Elevation', [-90 90], ... 'Frequency', [0 10e9]); % Define custom RCS signature of target platform(scene,'Trajectory',traj,'Signatures',rcs); % Add crossing airliner traveling southeast. ht = 4e3; % Altitude in meters spd = 900*1e3/3600; % Speed in m/s offset = [(start(1)+stop(1))/2 (start(2)+stop(2))/2 -ht]; start = offset + [0 -spd*sceneDuration/2 0]*rot; stop = offset + [0 spd*sceneDuration/2 0]*rot; traj = waypointTrajectory('Waypoints',[start;stop],'TimeOfArrival',[0; sceneDuration]); rcs = rcsSignature; % Default 10 dBsm RCS at all viewing angles platform(scene,'Trajectory',traj,'Signatures',rcs); % Add eastbound airliner. ht = 9e3; % Altitude in meters spd = 600*1e3/3600; % Speed in m/s start = [30e3 -spd*sceneDuration/2-20e3 -ht]; stop = [30e3 spd*sceneDuration/2-20e3 -ht]; traj = waypointTrajectory('Waypoints',[start;stop],'TimeOfArrival',[0; sceneDuration]); platform(scene,'Trajectory',traj); % Default 10 dBsm RCS at all viewing angles % Add jet turning with horizontal acceleration of 0.3 G. ht = 3e3; % Altitude in meters spd = 300*1e3/3600; % Speed in m/s accel = 0.3*9.8; % Centripetal acceleration m/s^2 radius = spd^2/accel; % Turn radius in meters t0 = 0; t1 = t0+5; t2 = t1+pi/2*radius/spd; t3 = sceneDuration; start = [0e4 -4e4 -ht]; wps = [ ... 0 0 0; ... % Begin straight segment spd*t1 0 0; ... % Begin horizontal turn spd*t1+radius radius 0; ... % End of horizontal turn spd*t1+radius radius+spd*(t3-t2) 0]; % End of second straight segment traj = waypointTrajectory('Waypoints',start+wps,'TimeOfArrival',[t0; t1; t2; t3]); platform(scene,'Trajectory',traj);
Следующий цикл совершенствует платформу и целевые положения до конца сценария. Для каждого шага вперед в сценарии обнаружения сгенерированы с каждой платформы.
trackingScenario
может совершенствоваться в фиксированном временном интервале или автоматически определить в следующий раз обновления. Установите UpdateRate
к 0
позволять trackingScenario
определите в следующий раз обновления.
rng(2018); % Set random seed for repeatable results % Create a theaterPlot to show the true and measured positions of the detected targets and platforms. theaterDisplay = helperMultiPlatDisplay(scene); title('Multiplatform Radar Scenario'); legend('show'); % Show 3D view of the scenario. view(-60,10); % Log all the detections detLog = {}; timeLog = []; while advance(scene) % Generate detections from radars on each platform. [dets,configs] = detect(scene); % Update display with current beam positions and detections. theaterDisplay(dets); % Log sensor data and ground truth. detLog = [detLog; dets]; %#ok<AGROW> timeLog = [timeLog; scene.SimulationTime];%#ok<AGROW> end
Заметьте широкие лучи с бортовых платформ и узкий луч от наземного радара, выполняющего развертку растра. Можно визуализировать траектории основной истины в 2D представлении ниже. Четыре цели представлены треугольниками. Приблизительно 30 км на оси X являются авиалайнером, перемещаясь на восток (слева направо). Приблизительно 2 км на оси X являются струей, выполняющей поворот по часовой стрелке. Дальнейший юг является двумя пересекающимися авиалайнерами.
view(-90,90); % 2D view
Постройте регистрируемые обнаружения с их неопределенностью измерения. Каждый цвет соответствует платформе, генерирующей обнаружения. Легенда от предыдущего отображения применяется ко всем следующим графикам. Заметьте, что радары генерируют ложные предупреждения, которые являются обнаружением далеко от целевых траекторий.
theaterDisplay(detLog); title([num2str(numel(detLog)) ' Detections Logged from ' num2str(numel(timeLog)) ' Simulation Steps']); legend('hide');
Следующее 3D представление показывает, как эти обнаружения распределяются в вертикальном изменении. Для платформ с 3D датчиками (синие и желтые платформы), обнаружения сопровождают целевые траектории. Обнаружения платформы 2D представления (красная платформа) возмещены в вертикальном изменении от целевых траекторий, потому что ее радар не может измериться в вертикальном изменении. Неопределенность измерения с 1 сигмой показывают для каждого обнаружения как серый эллипсоид, сосредоточенный на измеренных целевых положениях (показавшую заполненными кругами).
view([-60 25]); % 3D view
Увеличьте масштаб струи, выполняющей 90 горизонтальных поворотов степени. О неопределенности измерения с 1 сигмой сообщает радар согласно разрешению радара и отношению сигнал-шум (SNR) для каждого обнаружения. Цели в более длинных областях значений или с меньшими значениями ОСШ будут иметь большую неопределенность измерения, чем цели в более близких областях значений или с большими значениями ОСШ. Заметьте, что синие обнаружения имеют меньшую неопределенность измерения, чем желтые обнаружения. Это вызвано тем, что синие обнаружения происходят из бортовой платформы (Платформа 1), который намного ближе к цели, чем наземная платформа (Платформа 3) генерация желтых обнаружений.
xlim([-3000 9000]); ylim([-44000 -32000]); zlim([-12000 0000]); axis('square'); title('Jet Executing Horizontal Turn');
Заметьте большую неопределенность в вертикальном изменении красной генерации обнаружений с бортовой платформы (Платформа 2), который использует две линейных матрицы. Эллипсоиды имеют маленькие оси в области значений и направлениях азимута, но имеют очень большие оси вдоль направления вертикального изменения. Это вызвано тем, что линейные матрицы на этой платформе не могут обеспечить оценки в вертикальном изменении. В этом случае, обнаружения показаний радара платформы в 0 градусах с неопределенностью в вертикальном изменении, соответствующем полю зрения вертикального изменения.
Увеличьте масштаб двух пересекающихся авиалайнеров. Синий бортовой радар с вращающимся массивом генерирует наименьшее количество количества обнаружений (только 4 обнаружения для этих двух целей), но эти обнаружения являются самыми точными (самые маленькие замещающие знаки). Небольшое количество обнаружений с этой платформы происходит из-за 360 механических сканов ее радара, которые ограничивают, как часто ее луч может пересмотреть цель в сценарии. Другие платформы имеют радары с меньшими областями сканирования, позволяя им пересмотреть цели на более высоком уровне.
view([-55 20]);
xlim([-22000 -10000]); ylim([-31000 -19000]);
title('Crossing Airliners');
Увеличьте масштаб авиалайнера, переместившись на восток. Те же наблюдения относительно количества обнаружений и точности с различных радарных платформ применяются.
view([-70 10]);
xlim([24000 36000]); ylim([-26000 -14000]); zlim([-15000 -3000])
title('Airliner Traveling East');
В этом примере показано, как смоделировать радарную сеть наблюдения и симулировать обнаружения, сгенерированные несколькими бортовыми и наземными радарными платформами. В этом примере вы изучили, как задать сценарии, включая цели и платформы, которые могут быть стационарными или в движении. Вы также изучили, как визуализировать траектории основной истины, лучи датчика, обнаружения и сопоставленную неопределенность измерения. Можно обработать эти синтетические данные через алгоритмы отслеживания и сплава, чтобы оценить их эффективность для этого сценария. Можно также изменить этот пример, чтобы осуществить мультицелевое средство отслеживания против различных целевых типов и маневров.