exponenta event banner

Традиционное формирование луча

Использование для формирователей луча

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

Поддержка обычного формирования луча

Можно реализовать узкополосный формирователь луча фазового сдвига с помощью phased.PhaseShiftBeamformer. При использовании этого объекта необходимо указать следующие аспекты моделируемой ситуации:

  • Матрица датчиков

  • Скорость распространения сигнала

  • Рабочая частота системы

  • Направление формирования луча

Для получения информации о широкополосных формирователях луча см. раздел Широкополосное формирование луча.

Узкополосный формирователь диаграммы сдвига фазы для ULA

В этом примере показано, как создать и сформировать 10-элементную ULA. Предположим, что несущая частота равна 1 ГГц. Установите расстояние между элементами матрицы равным половине длины волны несущей.

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

fc = 1e9;
lambda = physconst('LightSpeed')/fc;
array = phased.ULA('NumElements',10,'ElementSpacing',lambda/2);

По умолчанию элементы ULA являются изотропными антеннами, созданными phased.IsotropicAntennaElement object™ системы. Установите диапазон частот антенных элементов таким образом, чтобы несущая частота находилась в пределах рабочего диапазона.

array.Element.FrequencyRange = [8e8 1.2e9];

Смоделировать тестовый сигнал. В этом примере используется простой прямоугольный импульс.

t = linspace(0,0.3,300)';
testsig = zeros(size(t));
testsig(201:205) = 1;

Предположим, что прямоугольный импульс падает на ULA с угла 30 ° азимута и отметки 0 °. Используйте collectPlaneWave функция объекта ULA System по моделированию приема импульсного сигнала от заданного угла.

angle_of_arrival = [30;0];
x = collectPlaneWave(array,testsig,angle_of_arrival,fc);

Сигнал x является матрицей с десятью столбцами. Каждый столбец представляет принятый сигнал в одном из элементов матрицы.

Добавление в сигнал комплексного гауссова шума x. Сбросьте поток случайных чисел по умолчанию для воспроизводимых результатов. Постройте график величин принятых импульсов на первых четырёх элементах ULA.

rng default
npower = 0.5;
x = x + sqrt(npower/2)*(randn(size(x)) + 1i*randn(size(x)));
subplot(221)
plot(t,abs(x(:,1)))
title('Element 1 (magnitude)')
axis tight
ylabel('Magnitude')
subplot(222)
plot(t,abs(x(:,2)))
title('Element 2 (magnitude)')
axis tight
ylabel('Magnitude')
subplot(223)
plot(t,abs(x(:,3)))
title('Element 3 (magnitude)')
axis tight
xlabel('Seconds')
ylabel('Magnitude')
subplot(224)
plot(t,abs(x(:,4)))
title('Element 4 (magnitude)')
axis tight
xlabel('Seconds')
ylabel('Magnitude')

Создайте формирователь луча со сдвигом фазы. Установите WeightsOutputPort свойство для true для вывода весов пространственного фильтра, которые указывают формирователь луча на угол прихода.

beamformer = phased.PhaseShiftBeamformer('SensorArray',array,...
    'OperatingFrequency',1e9,'Direction',angle_of_arrival,...
    'WeightsOutputPort',true);

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

[y,w] = beamformer(x);

Постройте график величины выходного сигнала вместе с исходным сигналом без шума для сравнения.

subplot(211)
plot(t,abs(testsig))
axis tight
title('Original Signal')
ylabel('Magnitude')
subplot(212)
plot(t,abs(y))
axis tight
title('Received Signal with Beamforming')
ylabel('Magnitude')
xlabel('Seconds')

Чтобы проверить влияние весов формирования диаграммы направленности на ответ массива, постройте график нормированного отклика на мощность массива с весами формирования диаграммы направленности и без них.

azang = -180:30:180;
subplot(211)
pattern(array,fc,[-180:180],0,'CoordinateSystem','rectangular',...
    'Type','powerdb','PropagationSpeed',physconst('LightSpeed'))
set(gca,'xtick',azang);
title('Array Response without Beamforming Weights')
subplot(212)
pattern(array,fc,[-180:180],0,'CoordinateSystem','rectangular',...
    'Type','powerdb','PropagationSpeed',physconst('LightSpeed'),...
    'Weights',w)
set(gca,'xtick',azang);
title('Array Response with Beamforming Weights')

Связанные темы