Можно использовать формирователь луча, чтобы пространственно отфильтровать прибывающие сигналы. Подчеркивание или ослабление сигналов, которые прибывают от определенных направлений, помогают вам различать сигналы интереса и вмешивающиеся сигналы от других направлений.
Можно реализовать узкополосный формирователь луча сдвига фазы с помощью phased.PhaseShiftBeamformer
. Когда вы используете этот объект, необходимо задать эти аспекты ситуации, которую вы симулируете:
Сенсорная матрица
Скорость распространения сигнала
Система рабочая частота
Направление Beamforming
Для широкополосных формирователей луча смотрите Широкополосный Beamforming.
В этом примере показано, как создать и beamform 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')
Чтобы исследовать эффект beamforming весов на ответе массивов, постройте нормированный ответ степени массива с и без beamforming весов.
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')