Пример радара глобальных и локальных систем координат

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

Выберите частоту сигнала 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 микросекунд. Установите пиковую выходную степень передатчика равную 1000 Вт, а коэффициент усиления равным 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);

Задайте фазовращение Beamformer

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

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. Формирует пучок поступающего сигнала на приемную антенну.

  10. Match-фильтрует сигнал формирования луча и находит его пиковое значение.

Передайте 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);

Лучевая форма прибывающей волны. В этом сценарии приемник beamformer указывает в направлении, rxangsteer, заданный как Direction свойство phased.PhaseShiftBeamformer Системный объект. Когда цель фактически лежит в этом направлении, реакция массива максимизировалась.

    wavbf = beamformer(wavcoll);

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

    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')