How do I detect polynomial roots based on its correct angle of arrival?

조회 수: 2 (최근 30일)
Murdifi Bin Muhammad
Murdifi Bin Muhammad 2019년 1월 14일
편집: Murdifi Bin Muhammad 2019년 1월 14일
This is going to be long so I'll try to make this as simple to understand as possible.
Lets say I have 2 signals coming in at -70 and 30 degrees direction of arrival (DOA). (This information is not known to my algorithm)
After running my algorithm, I have the following polynomial roots:
rtsnew = 6×1 complex
1.888969808846177 + 1.539141923045358i
-0.987441502841464 + 0.192134546985814i
-0.975774744148857 + 0.189864450590462i
-0.010162047151777 - 1.016436952671105i
-0.009835057589599 - 0.983730523623119i
0.318160245354805 + 0.259238538159111i
Theoretically, we note that the polynomial roots closest to the unit circle correspond to the correct DOAs. I did this by using the following lines of code:
radius = abs(rtsnew) %find absolute value of roots
dist = abs(radius-1) %offset to determine roots closest to unit circle
[~,index] = mink(dist,N) %find and index element closest to unit circle. N is the number of signal detected - in this case its 2.
result = rtsnew(index) %reprint roots based on indexed element closest to unit circle
ang_results = -asin(angle(result)/pi)*180/pi %convert and determine angle
The results for ang_results are:
ang_results = 2×1
-69.865847945573620
-69.865847945573591
It seems that the 2 closest roots are the one corresponding for the -70 degree signal and had ignored the 30 degree signal. This is because the 2 roots closest to the unit circle correspond only for the -70 degree signal.
By running an angle conversion for all polynomials, the results are as follows:
all_ang_results = 6×1
-12.626217608844554
-69.865847945573591 %corresponding to -70 degree signal (2nd closest to unit circle)
-69.865847945573620 %corresponding to -70 degree signal (closest to unit circle)
30.136034517103869 %corresponding to 30 degree signal (4th closest to unit circle)
30.136034517103891 %corresponding to 30 degree signal (3rd closest to unit circle)
-12.626217608844549
As you can see, the roots corresponding to 30 degrees has been detected. But because its not the one closest to the unit circle, it has been ignored. How do I get the right roots for the right DOAs (i.e. I only want 1 root closest to unit circle for -70 & 30 only)? We can observe that the DOA comes in pairs (or close to it..).
It is important to note that the order of polynomial roots could be different. (i.e. closest to unit circle could be = -70 degrees. 2nd closest = 30 degrees. etc..).

답변 (0개)

카테고리

Help CenterFile Exchange에서 Direction of Arrival Estimation에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by