What should I pay attention to before using the Angle estimation algorithm?

I am using the nRF52833 DK and a Nordic-designed antenna array (12 antennas with 0.02m spacing) for an AoA Direction Finding project. I obtained the IQ data using Direction finding connectionless beacon / Direction finding connectionless locator and input them into an implementation of the MUSIC algorithm, but the resulting spatial spectrum appear to be random and irregular.

Therefore, I want to verify if the IQ data I have collected is valid and usable.

I am using the default settings, with a switch slot of 2us, resulting in a sampling interval of 4us. I have removed the first 8 samples when estimating the AoA spectrum.

My IQ data was collected in an open, sparsely populated square with minimal signal interference.

The IQ data and corresponding phase collected using a single antenna are as follows:(I'm sorry for the mistake. The legend on the right should be phase instead of I Value.)

The IQ data and corresponding phase collected using a 4-antenna array are as follows:

My questions are,

1) Firstly, is there any apparent issue with the IQ data I have collected?

2) According to the whitepaper, the CTE is a 250kHz single tone signal, and my sampling interval is 4us. Thus, the additional phase difference caused by antenna switching is 2πfΔt = 2π * 2.5e5 * 4e-6 = 2π, which is exactly one period. Therefore, based on my understanding, the IQs plot and phases corresponding to the same antenna should be straight lines (please correct me if I am wrong). However, the phases I have collected are continuously changing. This could be due to errors introduced by environmental factors such as temperature and humidity. So, before AoA estimation, should I compensate for these errors? For example, should I first collect a segment of the signal to calculate the average fluctuations in IQ (ΔI and ΔQ) and then use these values to align the subsequent samples to the first sample for AoA spectrum estimation?

3) I also tried concatenating different CTE packets to increase the number of samples, but the results were still very irregular. Is it reasonable to concatenate the IQ data from multiple CTEs for direction finding?

I appreciate any reply, thanks!

  • Hi

    Unfortunately supporting the MUSIC algorithm is outside the scope from our side, so it's limited how much we can help you here I'm afraid, but you are right, the graph should be similar to what you see with one antenna, so something seems to be wrong here. I can't comment on how you've handled the IQ data, as we don't focus on that, but how have you set up the antenna switching? What antenna array are you using here and what antenna switching pattern is used here?

    Best regards,


  • Input data looks not too far of what to be expected in my opinion.

    All the frequencies are "typical" so you can't use the data without compensating for drift. This is specifically why the reference sampling is 8 samples with short interval as these are to be used to find the actual frequency and establish the phase of the signal.

    When you have this then you can extrapolate the "reference" signal for the length of the entire sequence. Then you can see the phase shift per antenna compared to the reference, this is what the algorithm should use to determine the angle.

    How to use/preprocess the date before handing it over to the MUSIC algorithm will be outside what Nordic will be able to support but there may be non-nordicans in the forum that may help you out.

  • Hello, thank you for your reply.
    Yes, I understand that MUSIC is beyond your scope, so the main purpose of this case is to confirm that there is nothing wrong with the IQ data I got.
    I don't quite understand what you said about "the graph should be similar to what you see with one antenna". Are you saying "The graph should look like a straight line"?
    I used a square antenna array designed by Nordic with 12 antennas. I only use a linear array of four of these antennas. My ant_patterns[] = {0x2, 0x0, 0x5, 0x6}, which correspond to a line on the array.

  • Hi, thank you for your reply.
    So, is the reference sampling actually useful? I thought the reference was just to make the receiver more stable before receiving the CTE...
    Could you please provide me with some links about using these 8 samples with short interval to calculate the actual frequency? I just did some searching and found that there are so few materials that it's hard to find any useful information...
    In addition, just to confirm, the "phase shift" you mentioned is what I said in the 2), right? After I compensate the "phase shift", the phase plot of any antenna should be a straight line, right?

    I have trid to calculate the average fluctuations in IQ (ΔI and ΔQ) for compensating the drift, but that doesn't seem right either... Is my method of compensation unreasonable? Or we have to use the first eight Samples?

    Thank you!

  • So the single antenna plot shows that you have a frequency that is not 250KHz, as a 250KHz would yield a horisontal line for the reference period. This is to be expected as I stated, the TYPICAL value is 250KHz but it will always be a bit off.

    Then for the non-reference period you have a fairly straight line, a little bit of overlayd noise, also to be expected. The slope of this line is also coming from the non-perfect 250KHz so as indicated by the reference period.

    When you start changing the antennas as you have done, then the phase will jump for each antenna change. How much will depend on the distance between the antennas, the distance from the transmitter to the antenna array and the position relative to the antenna array. How much the phase will change is something you can model with normal trigonometry.

    You will have to use the reference phase to set the baseline for the signal, if not you will not be able to calculate any angles at all. How to do this is outside the scope of what Nordic will support as it is part of the algorithm work.