Системный радарный пример глобальной и локальной координаты

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

Выберите частоту сигнала 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]);

Таким образом, четыре различных системы координат необходимы, чтобы описать радарный сценарий. Это

  1. Глобальная система координат.

  2. Локальная радарная система координат задана радарными осями передачи.

  3. Система локальной координаты задана целевыми осями.

  4. Вторая локальная радарная система координат задана радарными осями получения.

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

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

Используйте линейную форму волны 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);

Задайте формирователь луча Phaseshift

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

rxangsteer = [22.2244;-5.0615];
rxangsteer = [10;-.07];
beamformer = phased.PhaseShiftBeamformer('SensorArray',rxarray,...
    'DirectionSource','Property','Direction',rxangsteer,...
    'PropagationSpeed',c,'OperatingFrequency',fc);

Цикл симуляции

Каждая итерация цикла обработки выполняет эти операции:

  1. Положения обновлений радаров и цели.

  2. Генерирует форму волны LFM.

  3. Усиливает форму волны.

  4. Излучает сигнал от антенной решетки передачи.

  5. Распространяет сигнал к цели.

  6. Отражает сигнал от цели.

  7. Распространяет сигнал от цели до антенной решетки получения.

  8. Собирает полученный сигнал в антенне получения.

  9. Beamforms прибывающий сигнал в антенне получения.

  10. Фильтры соответствия 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')