В этом примере показано, как несколько различных систем координат играют роль при моделировании типичного радарного сценария. Сценарий, рассмотренный здесь, является бистатической радиолокационной системой, состоящей из радарного массива передачи, цели и радарного массива получения. Радарная антенна передачи испускает радарные сигналы, которые распространяют к цели, отражаются от цели, и затем распространяют к радару получения.
Выберите частоту сигнала 1 ГГц.
fc = 1e9;
c = physconst('LightSpeed');
lam = c/fc;
Во-первых, настройте радарный массив передачи. Массив передачи является универсальным прямоугольным массивом (URA) 5 на 5, состоявшим из изотропных элементов антенны. Массив является стационарным и расположен на уровне метров положения (50,50,50) в глобальной системе координат. Несмотря на то, что вы располагаете массивы в глобальную систему, положения элемента массива всегда задаются в системе локальной координаты массивов. Переданная сила сигнала в любом направлении является функцией угла передачи в системе координат локального массива. Задайте ориентацию массива. Без любой ориентации оси локального массива выравниваются с глобальной системой координат. Выберите ориентацию массивов так, чтобы вектор нормали массивов указал приблизительно в направлении цели. Сделайте это путем вращения массива 90 ° вокруг оси z. Затем вращайте массив немного на 2 ° вокруг оси Y и 1 ° вокруг оси z снова.
antenna = phased.IsotropicAntennaElement('BackBaffled',false); txarray = phased.URA('Element',antenna','Size',[5,5],'ElementSpacing',0.4*lam*[1,1]); txradarAx = rotz(1)*roty(2)*rotz(90); txplatform = phased.Platform('InitialPosition',[50;50;50],... 'Velocity',[0;0;0],'InitialOrientationAxes',txradarAx,... 'OrientationAxesOutputPort',true); radiator = phased.Radiator('Sensor',txarray,'PropagationSpeed',c,... 'WeightsInputPort',true,'OperatingFrequency',fc); steervec = phased.SteeringVector('SensorArray',txarray,'PropagationSpeed',c,... 'IncludeElementResponse',true);
Затем расположите цель приблизительно в 5 км от передатчика вдоль оси Y глобальной системы координат и перемещающийся в направление X. Как правило, вы задаете радарные значения поперечного сечения как функции инцидента и отраженных углов луча относительно локальных целевых осей. Выберите любую целевую ориентацию относительно глобальной системы координат.
Симулируйте не колеблющуюся цель, но позвольте RCS изменяться в каждом вызове target
метод. Настройте простую подставляемую функцию, rcsval
, вычислить фиктивную но рыночную стоимость для RCS под различными углами луча.
tgtAx = rotz(10)*roty(15)*rotx(20); tgtplatform = phased.Platform('InitialPosition',[100; 10000; 100],... 'MotionModel','Acceleration','InitialVelocity',[-50;0;0],'Acceleration',[.015;.015;0],... 'InitialOrientationAxes',tgtAx,'OrientationAxesOutputPort',true); target = phased.RadarTarget('OperatingFrequency',fc,... 'Model','Nonfluctuating','MeanRCSSource','Input port'); rcsval = @(az1,el1,az2,el2) 2*abs(cosd((az1+az2)/2 - 90)*cosd((el1+el2)/2));
Наконец, настройте радарный массив получения. Массив получения является также URA 5 на 5, состоявшим из изотропных элементов антенны. Массив является стационарным и расположен 150 метров в z-направлении от массива передачи. Полученная сила сигнала в любом направлении является функцией инцидентного угла сигнала в системе координат локального массива. Задайте ориентацию массива. Выберите ориентацию так, чтобы этот массив также указал приблизительно в направлении Y к цели, но не совсем выровненный с первым массивом. Сделайте это путем вращения массива 92 ° вокруг оси z и затем 5 ° вокруг оси X.
rxradarAx = rotx(5)*rotz(92); rxradarAx = rotx(-.2)*rotz(92); rxplatform = phased.Platform('InitialPosition',[50;50;200],... 'Velocity',[0;0;0],'InitialOrientationAxes',rxradarAx,... 'OrientationAxesOutputPort',true); rxarray = phased.URA('Element',antenna','Size',[5,5],'ElementSpacing',0.4*lam*[1,1]);
Таким образом, четыре различных системы координат необходимы, чтобы описать радарный сценарий. Это
Глобальная система координат.
Локальная радарная система координат задана радарными осями передачи.
Система локальной координаты задана целевыми осями.
Вторая локальная радарная система координат задана радарными осями получения.
Фигура здесь иллюстрирует эти четыре системы координат. Это не должно масштабировать и точно не представляет сценарий в примере кода.
Используйте линейную форму волны FM в качестве переданного сигнала. Примите частоту дискретизации 1 МГц, импульсную частоту повторения 5 кГц, и импульсная продолжительность 100 микросекунд. Установите выходную мощность пика передатчика на 1 000 Вт и усиление к 40,0.
tau = 100e-6; prf = 5000; fs = 1e6; waveform = phased.LinearFMWaveform('PulseWidth',tau,... 'OutputFormat','Pulses','NumPulses',1,'PRF',prf,'SampleRate',fs); transmitter = phased.Transmitter('PeakPower',1000.0,'Gain',40);
Создайте согласованный фильтр из переданной формы волны.
filter = phased.MatchedFilter('Coefficients',getMatchedFilter(waveform));
Используйте модели свободного пространства в распространении сигнала от радара передачи до цели и назад к радару получения.
channel1 = phased.FreeSpace('OperatingFrequency',fc,... 'TwoWayPropagation',false); channel2 = phased.FreeSpace('OperatingFrequency',fc,... 'TwoWayPropagation',false);
Создайте формирователь луча сдвига фазы. Укажите mainlobe формирователя луча в определенном направлении относительно локальной системы координат получателя. Это направление выбрано, чтобы быть одним, через которое цель передает в некоторое время в его движении. Этот выбор позволяет нам продемонстрировать, как ответ формирователя луча изменяется, когда цель проходит через mainlobe.
rxangsteer = [22.2244;-5.0615]; rxangsteer = [10;-.07]; beamformer = phased.PhaseShiftBeamformer('SensorArray',rxarray,... 'DirectionSource','Property','Direction',rxangsteer,... 'PropagationSpeed',c,'OperatingFrequency',fc);
Каждая итерация цикла обработки выполняет эти операции:
Положения обновлений радаров и цели.
Генерирует форму волны LFM.
Усиливает форму волны.
Излучает сигнал от антенной решетки передачи.
Распространяет сигнал к цели.
Отражает сигнал от цели.
Распространяет сигнал от цели до антенной решетки получения.
Собирает полученный сигнал в антенне получения.
Beamforms прибывающий сигнал в антенне получения.
Фильтры соответствия beamformed сигнализируют и находят его пиковое значение.
Передайте 100 импульсов формы волны. Передайте один импульс каждые 100 миллисекунд.
t = 0; Npulse = 100; dt = 1;
Создайте устройство хранения данных для более позднего графического вывода.
azes1 = zeros(Npulse,1); elevs1 = zeros(Npulse,1); azes2 = zeros(Npulse,1); elevs2 = zeros(Npulse,1); rxsig = zeros(Npulse,1);
Введите цикл симуляции и сгенерируйте переданную форму волны.
for k = 1:Npulse
t = t + dt; wav = waveform();
Обновите положения радаров и целей. Все положения и скорости заданы относительно глобальной системы координат. Поскольку OrientationAxesOutputPort
свойство целевой Системы object™ установлено в true
, можно получить мгновенные локальные целевые оси, tgtAx1
, от target
метод. Эти оси необходимы, чтобы вычислить целевой RCS. Массив локальные оси фиксируются так, вы не должны обновлять их.
[txradarPos,txradarVel] = txplatform(dt); [rxradarPos,rxradarVel] = rxplatform(dt); [tgtPos,tgtVel,tgtAx1] = tgtplatform(dt);
Вычислите мгновенную область значений и направление цели от радара передачи. Сила переданной волны зависит от шаблона усиления массивов. Этот шаблон является функцией направляющих углов относительно локальных радарных осей. Можно вычислить направление цели относительно передатчика локальные оси с помощью rangeangle
функция с дополнительным аргументом, который задает локальные радарные оси, txradarAx
. (Без этого дополнительного аргумента, rangeangle
возвращает азимут и углы вертикального изменения относительно глобальной системы координат).
[~,tgtang_tlcs] = rangeangle(tgtPos,txradarPos,txradarAx);
Альтернативный способ вычислить направляющие углы состоит в том, чтобы сначала вычислить их в глобальной системе координат и затем преобразовать их использующий global2localcoord
функция.
Создайте переданную форму волны. Переданная форма волны является усиленной версией сгенерированной формы волны.
txwaveform = transmitter(wav);
Излучите сигнал в мгновенном целевом направлении. Вспомните, что теплоотвод не управляется в этом направлении, но в углу, заданном держащимся вектором, txangsteer
. Держащийся угол выбран, потому что цель проходит через это направление во время своего движения. График позволит нам видеть улучшение ответа, когда цель перемещается в основной лепесток радара.
txangsteer = [23.1203;-0.5357]; txangsteer = [10;-.07]; sv1 = steervec(fc,txangsteer); wavrad = radiator(txwaveform,tgtang_tlcs,conj(sv1));
Распространите сигнал от радара передачи до цели. Координаты распространения находятся в глобальной системе координат.
wavprop1 = channel1(wavrad,txradarPos,tgtPos,txradarVel,tgtVel);
Отразите форму волны от цели назад к радарному массиву получения. Используйте простую зависимую углом модель RCS, заданную ранее. Входные параметры к rcs-модели являются азимутом и вертикальным изменением поступления и отраженных лучей относительно локальной целевой системы координат.
[~,txang_tgtlcs] = rangeangle(txradarPos,tgtPos,tgtAx1); [~,rxang_tgtlcs] = rangeangle(rxradarPos,tgtPos,tgtAx1); rcs = rcsval(txang_tgtlcs(1),txang_tgtlcs(2),rxang_tgtlcs(1),rxang_tgtlcs(2)); wavreflect = target(wavprop1,rcs); ns = size(wavreflect,1); tm = [0:ns-1]/fs*1e6;
Распространите сигнал с цели на радар получения. Как прежде, все координаты для распространения сигнала выражаются в глобальной системе координат.
wavprop2 = channel2(wavreflect,tgtPos,rxradarPos,tgtVel,rxradarVel);
Вычислите ответ антенной решетки получения в направлении, из которого прибывает излучение. Во-первых, используйте rangeangle
функция, чтобы вычислить направление цели относительно массива получения локальные оси, путем определения системы локальной координаты получателя, rxradarAx
.
[tgtrange_rlcs,tgtang_rlcs] = rangeangle(tgtPos,rxradarPos,rxradarAx);
Сохраните области значений и направляющие углы для более позднего графического вывода.
azes1(k) = tgtang_tlcs(1); elevs1(k) = tgtang_tlcs(2); azes2(k) = tgtang_rlcs(1); elevs2(k) = tgtang_rlcs(2);
Симулируйте входящую плоскую волну в каждом элементе от текущего направления цели, вычисленной в системе локальной координаты получателя.
wavcoll = collectPlaneWave(rxarray,wavprop2,tgtang_rlcs,fc);
Beamform прибывающая волна. В этом сценарии формирователь луча получателя указывает в направлении, rxangsteer
, заданный Direction
свойство phased.PhaseShiftBeamformer
Системный объект. Когда цель на самом деле находится в том направлении, ответе максимизируемого массива.
wavbf = beamformer(wavcoll);
Выполните фильтрацию соответствия beamformed полученная волна и затем найдите и сохраните максимальное значение каждого импульса для отображения. Это значение будет построено после того, как цикл симуляции заканчивается.
y = filter(wavbf); rxsig(k) = max(abs(y));
end
Постройте целевую дорожку в азимуте и вертикальном изменении относительно локальных координат передатчика. Красный круг обозначает направление, на которое указывает массив передатчика.
plot(azes1,elevs1,'.b') grid xlabel('Azimuth (degrees)') ylabel('Elevation (degrees)') title('Target Track in Transmitter Local Coordinates') hold on plot(txangsteer(1),txangsteer(2),'or') hold off
Постройте целевую дорожку в азимуте и вертикальном изменении относительно локальных координат получателя. Красный круг обозначает направление, на которое указывает формирователь луча.
plot(azes2,elevs2,'.b') axis([-5.0,25.0,-5.0,5]) grid xlabel('Azimuth (degrees)') ylabel('Elevation (degrees)') title('Target Track in Receiver Local Coordinates') hold on plot(rxangsteer(1),rxangsteer(2),'or') hold off
Постройте возвращенную амплитуду сигнала по сравнению с азимутом в локальных координатах получателя. Значение амплитуды зависит от нескольких факторов.
plot(azes2,rxsig,'.') grid xlabel('Azimuth (degrees)') ylabel('Amplitude') title('Amplitude vs Azimuth in Receiver Local Coordinates')