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

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

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