Равномерный линейный массив

Поддержка равномерных линейных массивов

Равномерный линейный массив (ULA) располагает одинаковые сенсорные элементы вдоль линии в пространстве с равномерным интервалом. Вы можете проектировать ULA с phased.ULA. Когда вы используете этот объект, необходимо задать следующие аспекты массива:

  • Элементы датчика массива

  • Интервал между элементами массива

  • Количество элементов в массиве

Положения элементов массива ULA

Создайте и просмотрите ULA, имеющий четыре изотропных антенных элементов, разделенных на 0,5 метра

array = phased.ULA('NumElements',4,'ElementSpacing',0.5);
viewArray(array);

Можно вернуть координаты элементов датчика массива в форме [x;y;z] при помощи getElementPosition способ. Информацию о соглашениях с тулбоксом см. в разделе «Прямоугольные координаты».

sensorpos = getElementPosition(array);

sensorpos является матрицей 3 на 4 с каждым столбцом, представляющим положение элемента датчика. Обратите внимание, что ось Y является осью массива. Положительная ось X является направлением взгляда массива (0 степени широкой стороны). Элементы симметричны относительно центра фазы массива.

Элементы массива ULA

Элементом по умолчанию для ULA является phased.IsotropicAntennaElement объект. Можно задать другой элемент, используя Element свойство.

Ответы элемента массива

Получите отклики элементов массива ULA с 4 элементами на 1 ГГц.

Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step синтаксис. Для примера замените myObject(x) с step(myObject,x).

Задайте изотопные антенны для элементов массива. Затем задайте ULA с 4 элементами. Получите ответ путем выполнения системного object™.

antenna = phased.IsotropicAntennaElement(...
    'FrequencyRange',[3e8 1e9]);
array = phased.ULA('NumElements',4,'ElementSpacing',0.5,...
    'Element',antenna);
freq = 1e9;
azangles = -180:180;
response = array(freq,azangles);

response является матрицей 4 на 361, где каждый столбец содержит отклики при каждом азимутальном угле. Строки матрицы соответствуют четырем элементам. Потому что элементами ULA являются изотропные антенны, response является матрицей таковых.

Задержка сигнала между элементами массива

Этот пример вычисляет задержку между ULA элементов массива 4 элементами, используя phased.ElementDelay Системные object™. Предположим, что падающая форма волны удовлетворяет условию дальнего поля. Задержки вычисляются относительно центра фазы массива. По умолчанию phased.ElementDelay принимает, что падающая форма волны является электромагнитной волной, распространяющейся со скоростью света.

Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step синтаксис. Для примера замените myObject(x) с step(myObject,x).

Создайте ULA с 4 элементами, используя синтаксис только для значений, и вычислите задержку для сигнала, падающего на массив от -90 ° азимута и 0 ° повышения. Модули задержки указаны в секундах.

array = phased.ULA(4);
delay = phased.ElementDelay('SensorArray',array);
tau = delay([-90;0])
tau = 4×1
10-8 ×

   -0.2502
   -0.0834
    0.0834
    0.2502

tau является вектором задержек 4 на 1 относительно центра фазы массива, который является источником локальной системы координат (0; 0; 0). Описание глобальных и локальных систем координат см. в разделе Глобальные и локальные системы координат. Отрицательные задержки указывают, что сигнал приходит к элементу, прежде чем достигнуть центра фазы массива. Поскольку форма волны приходит с азимутального угла -90 °, сигнал приходит к первому и второму элементам ULA, прежде чем он достигнет центра фазы, что приводит к отрицательным задержкам для этих элементов.

Если сигнал падает на массив на 0 ° ширины от источника дальнего поля, сигнал освещает все элементы массива одновременно, получая нулевую задержку.

tau = delay([0;0])
tau = 4×1

     0
     0
     0
     0

Если падающий сигнал является акустическим сигналом давления, распространяющимся со скоростью звука, можно вычислить задержки элемента, установив PropagationSpeed свойство до 340 м/с. Это значение является типичной скоростью звука на уровне моря.

delay = phased.ElementDelay('SensorArray',array,...
    'PropagationSpeed',340);
tau = delay([90;0])
tau = 4×1

    0.0022
    0.0007
   -0.0007
   -0.0022

Вектор управления

Вектор управления представляет относительные сдвиги фазы для падающей волны дальнего поля через элементы массива. Можно определить эти сдвиги фазы с помощью phased.SteeringVector объект.

Для одной несущей частоты вектор управления для ULA, состоящий из N элементов, является:

(ej2πfτ1ej2πfτ2ej2πfτ3...ej2πfτN)

where При nN обозначает задержку относительно центра фазы массива в n-м элементе массива.

Вычисление вектора управления ULA

Вычислите вектор управления для ULA с 4 элементами на рабочей частоте 1 ГГц. Предположим, что форма волны падает на массив от 45 ° азимута и 10 ° повышения.

Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step синтаксис. Для примера замените myObject(x) с step(myObject,x).

fc = 1e9;
array = phased.ULA(4);
steervec = phased.SteeringVector('SensorArray',array);
sv = steervec(fc,[45;10])
sv = 4×1 complex

  -0.0495 + 0.9988i
  -0.8742 + 0.4856i
  -0.8742 - 0.4856i
  -0.0495 - 0.9988i

Можно также вычислить вектор управления со следующим эквивалентным кодом.

delay = phased.ElementDelay('SensorArray',array);
tau = delay([45;10]);
exp(-1i*2*pi*fc*tau)
ans = 4×1 complex

  -0.0495 + 0.9988i
  -0.8742 + 0.4856i
  -0.8742 - 0.4856i
  -0.0495 - 0.9988i

Реакция массива

Чтобы получить ответ массива, который является взвешенной комбинацией элементов вектора управления для каждого падающего угла, используйте phased.ArrayResponse Системные object™.

Реакция массива ULA

Создайте ULA с четырьмя элементами с интервалами в 0,25 м. Получите ответ величины массива (абсолютное значение комплексной характеристики массива) для углов азимута (-180: 180) на 1 ГГц. Затем постройте график нормированной величины характеристики в дБ.

Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step синтаксис. Для примера замените myObject(x) с step(myObject,x).

fc = 1e9;
array = phased.ULA('NumElements',4,'ElementSpacing',0.25);
azangles = -180:180;
response = phased.ArrayResponse('SensorArray',array);
resp = abs(response(fc,azangles));
plot(azangles,mag2db((resp/max(resp))))
grid on
title('Azimuth Cut at Zero Degrees Elevation')
xlabel('Azimuth Angle (degrees)')

Figure contains an axes. The axes with title Azimuth Cut at Zero Degrees Elevation contains an object of type line.

Визуализируйте ответ массива с помощью pattern способ. Создайте 3-D график отклика в UV пространстве; доступны другие опции графического изображения.

pattern(array,fc,[-1:.01:1],[-1:.01:1],'CoordinateSystem','uv',...
    'PropagationSpeed',physconst('Lightspeed'))

Figure contains an axes. The axes with title 3D Directivity Pattern in u-v space contains an object of type surface.

Прием плоской волны через массив

Можно симулировать эффекты сдвигов фазы через массив с помощью collectPlaneWave метод любого системного объекта массива.

The collectPlaneWave способ модулирует входные сигналы элементом вектора управления, соответствующим элементу массива. Заявлено иначе, collectPlaneWave учитывает сдвиги фазы между элементами массива на основе угла прихода. Однако collectPlaneWave не учитывает реакцию отдельных элементов массива.

Прием плоской волны через ULA

Симулируйте прием 100-Hz синусоиды, модулированной несущей частотой 1 ГГц в ULA с 4 элементами. Предположим, что угол прихода сигнала равен (-90; 0).

Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step синтаксис. Для примера замените myObject(x) с step(myObject,x).

array = phased.ULA(4);
t = unigrid(0,0.001,0.01,'[)');
x = cos(2*pi*100*t)';
y = collectPlaneWave(array,x,[-90;0],1e9,physconst('LightSpeed'));

Предыдущий код эквивалентен следующему.

steervec = phased.SteeringVector('SensorArray',array);
sv = steervec(1e9,[-90;0]);
y1 = x*sv.';

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте