Равномерный линейный массив (ULA) располагает одинаковые сенсорные элементы вдоль линии в пространстве с равномерным интервалом. Вы можете проектировать ULA с phased.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 является 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 элементов, является:
where При nN обозначает задержку относительно центра фазы массива в n-м элементе массива.
Вычислите вектор управления для 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 с четырьмя элементами с интервалами в 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)')
Визуализируйте ответ массива с помощью pattern
способ. Создайте 3-D график отклика в UV пространстве; доступны другие опции графического изображения.
pattern(array,fc,[-1:.01:1],[-1:.01:1],'CoordinateSystem','uv',... 'PropagationSpeed',physconst('Lightspeed'))
Можно симулировать эффекты сдвигов фазы через массив с помощью collectPlaneWave
метод любого системного объекта массива.
The collectPlaneWave
способ модулирует входные сигналы элементом вектора управления, соответствующим элементу массива. Заявлено иначе, collectPlaneWave
учитывает сдвиги фазы между элементами массива на основе угла прихода. Однако collectPlaneWave
не учитывает реакцию отдельных элементов массива.
Симулируйте прием 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.';