Обычное формирования луча

Использование для Beamformers

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

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

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

  • Массив датчиков

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

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

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

Для широкополосных beamformers, см. Wideband Beamforming.

Узкополосная Фаза Shift Beamformer для ULA

В этом примере показано, как создать и сформировать лучом ULA с 10 элементами. Предположим, что несущая частота составляет 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 Системного объекта для моделирования приема импульсного сигнала с заданного угла.

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

Похожие темы