Этот пример показывает, как сгенерировать радиолокационные обнаружения из мультиплатформенной радиолокационной сети. Сеть включает три дальние платформы: две воздушные и одну наземную. Такие синтетические данные могут использоваться для тестирования эффективности архитектур слежения за различными типами целей и маневрами.
Радиолокационные платформы и цели моделируются в сценарии следующим 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 км. Сгенерируйте траекторию платформы из точек пути с помощью 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 дБсм @ 375 км
Механический скан: Только азимут
Пределы механического скана: от 0 до 360 °
Электронный скан: Только по повышению
Пределы электронного скана: от -2 до 45 o
Поле зрения: азимут 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 дБсм @ 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 дБсм @ 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 км/ч на высоте 3000 м
Переправа авиалайнера на юго-восток в 900 км/ч на высоте 4 000 м
Авиалайнер, следовавший на восток со скоростью 600 км/ч на высоте 9000 м
Джет, перемещающийся в 300 км/ч и выполнявший поворот на 90 степени на высоте 3000 м
% 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);
Следующий цикл продвигает платформу и целевые положения до конца сценария. Для каждого шага вперед в сценарии обнаружения генерируются с каждой платформы.
The 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-view платформы (красная платформа) смещены по повышению от траекторий цели, потому что ее радар не может измерить повышение. Неопределенность измерения 1-сигма показана для каждого обнаружения как серый эллипсоид с центром на измеренных целевых положениях (показан как заполненные круги).
view([-60 25]); % 3D view
Увеличьте изображение струи, выполняя 90 степени горизонтальный поворот. Неопределенность измерения 1-сигма сообщается радаром в соответствии с разрешением радара и отношением сигнал/шум (ОСШ) для каждого обнаружения. Цели на больших областях значений или с меньшими значениями ОСШ будут иметь большие неопределенности измерения, чем цели на более близких областях значений или с большими значениями ОСШ. Заметьте, что голубые обнаружения имеют меньшие неопределенности измерения, чем желтые обнаружения. Это происходит потому, что голубые обнаружения происходят с воздушной платформы (Платформа 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');
Этот пример показывает, как смоделировать радиолокационную сеть наблюдения и моделировать обнаружения, сгенерированные несколькими радиолокационными платформами воздушного и наземного базирования. В этом примере вы научились определять сценарии, включая цели и платформы, которые могут быть стационарными или в движении. Вы также научились визуализировать основную истину траектории, пучки датчиков, обнаружения и связанные с ними неопределенности измерений. Можно обработать эти синтетические данные с помощью алгоритмов отслеживания и слияния, чтобы оценить их эффективность для этого сценария. Можно также изменить этот пример, чтобы применить многоцелевой трекер против различных типов целей и маневров.