DSPRelated.com
Forums

Direction of arrival with Unitary Matrix Pencil Method

Started by ste3191 October 9, 2015
Hi guys, i have written the script on matlab for estimate DOA with uniform
linear array, using the matrix pencil method. The estimated angles are
almost right when they are up about 45°, and they are very good when
they're close to 90° Can anyone help me? It's very strange, also the
signal is without noise!! I post my script. you can run it changing the
initial doa to estimate. Thank you very much.

%DOA Unitary Matrix Pencil Method 1D ULA
% Article : An efficient computational approach in the matrix pencil
%          method to find one dimensional and two dimensional direction
%           of arrival by Hassan M.Elkamchouchi, Mohammed M.M. Omar
%*******************************************
doa = [60 80 ];
M = size(doa,2);

N1 = 16;    %number of antenna
L1 = 6;     %pencil parameter
donlambda = 0.5;    %d/lambda = 0.5
 n = donlambda*(0:N1-1) - donlambda*((N1-1)/2);  %central symmetry array

A = zeros(N1,M);
for k=1:M
A(:,k) = exp(1i*2*pi*(n.*cosd(doa(k)))).';
end

x = sum(A,2).';

Y = hankel(x(1,1:N1-L1+1), x(1,(N1-L1+1):end)); %Hankel Matrix

P3 = flipud(eye(L1/2));
P5 = flipud(eye(L1-1));
P6 = flipud(eye(L1));
P11 = flipud(eye(N1-L1+1));

U6 = 0.707*[eye(L1/2) 1i*eye(L1/2);P3 -1i*P3];
U12 = 0.707*[eye(L1) 1i*eye(L1);P6 -1i*P6];
U11 = 0.707*[eye(L1-1) zeros(L1-1,1) 1i*eye(L1-1);zeros(1,L1-1) 0.707
zeros(1,L1-1);P5 zeros(L1-1,1) -1i*P5];

XR = U11'*Y*U6;     %real matrix

J1 = [eye(N1-L1) zeros(N1-L1,1)];

[U D V]= svd(XR);
vsig = U(:,1:M);

U10 = 0.707*[eye(L1-1) 1i*eye(L1-1);P5 -1i*P5];

H=pinv(real(U10'*J1*U11)*vsig)*(imag(U10'*J1*U11)*vsig);

val = eig(H);

angles = acos(atan(-val)/(0.5*pi))*180/pi;


---------------------------------------
Posted through http://www.DSPRelated.com
On Fri, 09 Oct 2015 11:39:25 -0500, ste3191 wrote:

> Hi guys, i have written the script on matlab for estimate DOA with > uniform linear array, using the matrix pencil method. The estimated > angles are almost right when they are up about 45°, and they are very > good when they're close to 90° Can anyone help me? It's very strange, > also the signal is without noise!! I post my script. you can run it > changing the initial doa to estimate. Thank you very much.
So you're saying that your measurements are very good, and this is a problem? Huh? -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
>On Fri, 09 Oct 2015 11:39:25 -0500, ste3191 wrote: > >> Hi guys, i have written the script on matlab for estimate DOA with >> uniform linear array, using the matrix pencil method. The estimated >> angles are almost right when they are up about 45°, and they are
very
>> good when they're close to 90° Can anyone help me? It's very
strange,
>> also the signal is without noise!! I post my script. you can run it >> changing the initial doa to estimate. Thank you very much. > >So you're saying that your measurements are very good, and this is a >problem? > >Huh? > >-- > >Tim Wescott >Wescott Design Services >http://www.wescottdesign.com
The estimated angles are wrong when they are small, below 45 deg. While if DOAs are up 45 the algorithm works fine.. Can you help me? Sorry if i haven't been clear --------------------------------------- Posted through http://www.DSPRelated.com
On Fri, 09 Oct 2015 13:07:34 -0500, ste3191 wrote:

>>On Fri, 09 Oct 2015 11:39:25 -0500, ste3191 wrote: >> >>> Hi guys, i have written the script on matlab for estimate DOA with >>> uniform linear array, using the matrix pencil method. The estimated >>> angles are almost right when they are up about 45°, and they are > very >>> good when they're close to 90° Can anyone help me? It's very > strange, >>> also the signal is without noise!! I post my script. you can run it >>> changing the initial doa to estimate. Thank you very much. >> >>So you're saying that your measurements are very good, and this is a >>problem? >> >>Huh? >> >>-- >> >>Tim Wescott Wescott Design Services http://www.wescottdesign.com > > The estimated angles are wrong when they are small, below 45 deg. While > if DOAs are up 45 the algorithm works fine.. Can you help me? Sorry if i > haven't been clear
Beyond being picky about your wording I'm not sure how much use I'll be, but I'll try in hopes that my flailing will attract some more knowledgeable sharks. Is 90 degrees defined with respect to the line along which the antennas are mounted? So 90 degrees means that the line of antennas is perpendicular to the source? It sounds like the basic problem is one where the accuracy will inherently diminish as you get more edge-on to the line of antennas -- have you done any sensitivity analysis to see if maybe your results are being limited by the physics of the problem rather than any mathematical artifacts? It would seem to me that for two antennas the phase relationship of the wave at the antennas would have a cos(theta) term in it, meaning that at 0 degrees the sensitivity to phase errors would be infinite. Are you using an actual physical array? Could the propagation time from antenna to receiver be different than it should be (in other words, could some of your cables be of incorrect length)? -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
On Saturday, October 10, 2015 at 5:39:32 AM UTC+13, ste3191 wrote:
> Hi guys, i have written the script on matlab for estimate DOA with uniform > linear array, using the matrix pencil method. The estimated angles are > almost right when they are up about 45�, and they are very good when > they're close to 90� Can anyone help me? It's very strange, also the > signal is without noise!! I post my script. you can run it changing the > initial doa to estimate. Thank you very much. > > %DOA Unitary Matrix Pencil Method 1D ULA > % Article : An efficient computational approach in the matrix pencil > % method to find one dimensional and two dimensional direction > % of arrival by Hassan M.Elkamchouchi, Mohammed M.M. Omar > %******************************************* > doa = [60 80 ]; > M = size(doa,2); > > N1 = 16; %number of antenna > L1 = 6; %pencil parameter > donlambda = 0.5; %d/lambda = 0.5 > n = donlambda*(0:N1-1) - donlambda*((N1-1)/2); %central symmetry array > > A = zeros(N1,M); > for k=1:M > A(:,k) = exp(1i*2*pi*(n.*cosd(doa(k)))).'; > end > > x = sum(A,2).'; > > Y = hankel(x(1,1:N1-L1+1), x(1,(N1-L1+1):end)); %Hankel Matrix > > P3 = flipud(eye(L1/2)); > P5 = flipud(eye(L1-1)); > P6 = flipud(eye(L1)); > P11 = flipud(eye(N1-L1+1)); > > U6 = 0.707*[eye(L1/2) 1i*eye(L1/2);P3 -1i*P3]; > U12 = 0.707*[eye(L1) 1i*eye(L1);P6 -1i*P6]; > U11 = 0.707*[eye(L1-1) zeros(L1-1,1) 1i*eye(L1-1);zeros(1,L1-1) 0.707 > zeros(1,L1-1);P5 zeros(L1-1,1) -1i*P5]; > > XR = U11'*Y*U6; %real matrix > > J1 = [eye(N1-L1) zeros(N1-L1,1)]; > > [U D V]= svd(XR); > vsig = U(:,1:M); > > U10 = 0.707*[eye(L1-1) 1i*eye(L1-1);P5 -1i*P5]; > > H=pinv(real(U10'*J1*U11)*vsig)*(imag(U10'*J1*U11)*vsig); > > val = eig(H); > > angles = acos(atan(-val)/(0.5*pi))*180/pi; > > > --------------------------------------- > Posted through http://www.DSPRelated.com
When I have troubles with a pencil I usually sharpen it.
>On Saturday, October 10, 2015 at 5:39:32 AM UTC+13, ste3191 wrote: >> Hi guys, i have written the script on matlab for estimate DOA with >uniform >> linear array, using the matrix pencil method. The estimated angles are >> almost right when they are up about 45°, and they are very good when >> they're close to 90° Can anyone help me? It's very strange, also the >> signal is without noise!! I post my script. you can run it changing
the
>> initial doa to estimate. Thank you very much. >> >> %DOA Unitary Matrix Pencil Method 1D ULA >> % Article : An efficient computational approach in the matrix pencil >> % method to find one dimensional and two dimensional
direction
>> % of arrival by Hassan M.Elkamchouchi, Mohammed M.M. Omar >> %******************************************* >> doa = [60 80 ]; >> M = size(doa,2); >> >> N1 = 16; %number of antenna >> L1 = 6; %pencil parameter >> donlambda = 0.5; %d/lambda = 0.5 >> n = donlambda*(0:N1-1) - donlambda*((N1-1)/2); %central symmetry >array >> >> A = zeros(N1,M); >> for k=1:M >> A(:,k) = exp(1i*2*pi*(n.*cosd(doa(k)))).'; >> end >> >> x = sum(A,2).'; >> >> Y = hankel(x(1,1:N1-L1+1), x(1,(N1-L1+1):end)); %Hankel Matrix >> >> P3 = flipud(eye(L1/2)); >> P5 = flipud(eye(L1-1)); >> P6 = flipud(eye(L1)); >> P11 = flipud(eye(N1-L1+1)); >> >> U6 = 0.707*[eye(L1/2) 1i*eye(L1/2);P3 -1i*P3]; >> U12 = 0.707*[eye(L1) 1i*eye(L1);P6 -1i*P6]; >> U11 = 0.707*[eye(L1-1) zeros(L1-1,1) 1i*eye(L1-1);zeros(1,L1-1) 0.707 >> zeros(1,L1-1);P5 zeros(L1-1,1) -1i*P5]; >> >> XR = U11'*Y*U6; %real matrix >> >> J1 = [eye(N1-L1) zeros(N1-L1,1)]; >> >> [U D V]= svd(XR); >> vsig = U(:,1:M); >> >> U10 = 0.707*[eye(L1-1) 1i*eye(L1-1);P5 -1i*P5]; >> >> H=pinv(real(U10'*J1*U11)*vsig)*(imag(U10'*J1*U11)*vsig); >> >> val = eig(H); >> >> angles = acos(atan(-val)/(0.5*pi))*180/pi; >> >> >> --------------------------------------- >> Posted through http://www.DSPRelated.com > >When I have troubles with a pencil I usually sharpen it.
The elements of array are on x-axis, and theta is angle between x-axis and vector of signal. Then 90 deg means signal is perpendicular to antennas. The elements are spaced lambda/2 as you can see variable n. Below i put some results: True DOA | Estimated ----------------------- 0 90 5 83 10 66 30 39 40 44 50 52 60 61 70 70 80 80 90 90 110 109 130 127 135 131 150 140 170 113 180 90 --------------------------------------- Posted through http://www.DSPRelated.com

You might try a spacial sampling like lambda/4 that doesn't violate the Nyquist criteria as lambda/2 does for end-fire wave arrivals.

Dale B. Dalrymple
>You might try a spacial sampling like lambda/4 that doesn't violate the >Nyquist criteria as lambda/2 does for end-fire wave arrivals. > >Dale B. Dalrymple
yes, I tried but i'd errors too. For example with lambda/4 the doas 75 and 10 deg are estimated as 76.40 and 18.45 The script seems correct.. Maybe i can try to change pencil parameter 5<L<8 --------------------------------------- Posted through http://www.DSPRelated.com
>You might try a spacial sampling like lambda/4 that doesn't violate the >Nyquist criteria as lambda/2 does for end-fire wave arrivals. > >Dale B. Dalrymple
yes, I tried but i'd errors too. For example with lambda/4 the doas 75 and 10 deg are estimated as 76.40 and 18.45 The script seems correct.. Maybe i can try to change pencil parameter 5<L<8 --------------------------------------- Posted through http://www.DSPRelated.com
On Saturday, October 10, 2015 at 9:16:27 AM UTC-7, ste3191 wrote:
> >You might try a spacial sampling like lambda/4 that doesn't violate the > >Nyquist criteria as lambda/2 does for end-fire wave arrivals. > > > >Dale B. Dalrymple > > yes, I tried but i'd errors too. For example with lambda/4 > the doas 75 and 10 deg are estimated as 76.40 and 18.45
What conclusion do you draw from these values? How do all the values you calculated for lambda/2 compare to those for lambda/4?
> > The script seems correct.. Maybe i can try to change pencil parameter > 5<L<8
How can the script seem correct when it gives these results? Dale B. Dalrymple