MATLAB Answers

0

Antenna Manifold or Amplitude Weights

Asked by Rachael Hardman on 20 Dec 2016
Latest activity Commented on by Rachael Hardman on 20 Dec 2016
Hello,
I am working with some data from a linear array of 8 antennas. The data consists of signals from all directions which I now need to separate using beam forming methods.
I have been sent a matlab file with the data which is an 8x720 matrix, labelled as the 'antenna manifold', which consists of complex values. Note that the 720 dimension is to give values for the azimuthal angle from 0 to 360 increasing in 0.5 degree steps.
If I'm correct, this matrix contains the values I should multiply the individual antenna signal values by the steer the beam in the desired direction.
Is there some way of using these weight values in the PhaseShiftBeamformer function? All I can see if the "weight out" option which gives you the weights.
Thanks for reading :)

  0 Comments

Sign in to comment.

1 Answer

Answer by Honglei Chen
on 20 Dec 2016
 Accepted Answer

Array manifold is sometimes used as a synonym of steering vector, so without looking at the data itself, I think it's possible that each column of the 8x720 matrix is the steering vector of the corresponding direction. If that's true, then to beamform a signal, you probably just need to do
% assume x is the signal matrix of 100x8 matrix, i.e., 100 snapshots for 8 elements.
% assume V is the 8x720 matrix.
% If we want to beamform to say, 30 degrees, that corresponds to column 61
% Thus the beamformed signal can be computed as
x*conj(V(:,61))
Now whether you need that conj or not depends on the convention, so you may want to try both out. Another way to do this is to plot the beam pattern and see whether that matches your expectation. You can also use that to verify if they are indeed the steering vectors. Here is how
% You want to model your antenna array, including the spacing.
% Assume half wavelength spacing at, say, 3GHz, then it looks like this
c = physconst('lightspeed'); % propagation speed
fc = 3e9; % carrier
lambda = c/fc; % wavelength
array = phased.ULA(8,lambda/2); % create array
Once you model the array, you can try to plot the beam pattern toward a certain direction and see if it matches what you thought. For example, if you want to plot the beam pattern corresponding to the vector in column 61, you can do
pattern(array,fc,-180:180,0,'Weights',V(:,61))
If the resulting pattern indeed points to 30 degrees, then we confirmed that they are just steering vectors. If it points to -30 degrees, then it means they are using a different convention so you just need to know when to or not to use conj. If it doesn't produce a well shaped beam, and the array model is correct, then it may not be what you think it is.
HTH

  1 Comment

Thank you!!!

Sign in to comment.