I'm attempting to beamform some data which has signals coming from all directions in a 180 degree range.
I found the example of using the phased array toolbox to beamform in https://uk.mathworks.com/help/phased/examples/conventional-and-adaptive-beamformers.html however, when I added a second signal from a different direction, the results aren't what I would expect.
If the two signals are coming from directions which are symmetrical about 90 degrees, i.e. 30 and 150 or 70 and 110, the beam forming algorithm cannot separate them. Is there a way of suppressing the signal coming from the other direction?
The code below is an example of what I mean where two signals are incoming from 30 and 150 degrees and then the beamforming algorithm is trying to isolate the signal from 30 degrees.
clear;clc;close;t = 0:0.001:0.3; % Time, sampling frequency is 1kHz
s = zeros(size(t));s = s(:); % Signal in column vector
s(201:205) = s(201:205) + 1; % Define the pulse
s_2 = zeros(size(t));s_2 = s_2(:); % Signal in column vectors_2(41:47) = s_2(41:47) + 1; % Define the pulsefigure(1)plot(t,s, t, s_2);title('Pulse');xlabel('Time (s)');ylabel('Amplitude (V)');carrierFreq = 30e6;wavelength = physconst('LightSpeed')/carrierFreq;ula = phased.ULA('NumElements',10,'ElementSpacing',wavelength/2);ula.Element.FrequencyRange = [90e5 110e6];inputAngle = [30; 0];x = collectPlaneWave(ula,s,inputAngle,carrierFreq);inputAngle2 = [150; 0];x2 = collectPlaneWave(ula,s_2,inputAngle2,carrierFreq);rs = RandStream.create('mt19937ar','Seed',2008);noisePwr = .5; % noise power
noise = sqrt(noisePwr/2)*(randn(rs,size(x))+1i*randn(rs,size(x)));rxSignal = x + x2 + noise;figure()subplot(211);plot(t,abs(rxSignal(:,1)));axis tight;title('Pulse at Antenna 1');xlabel('Time (s)');ylabel('Magnitude (V)');subplot(212);plot(t,abs(rxSignal(:,2)));axis tight;title('Pulse at Antenna 2');xlabel('Time (s)');ylabel('Magnitude (V)');psbeamformer = phased.PhaseShiftBeamformer('SensorArray',ula,... 'OperatingFrequency',carrierFreq,'Direction',inputAngle,... 'WeightsOutputPort', true);[yCbf,w] = step(psbeamformer, rxSignal);figure()plot(t,abs(yCbf)); axis tight;title('Output of Phase Shift Beamformer');xlabel('Time (s)');ylabel('Magnitude (V)');
Thanks for reading!
Best Answer