Book a meeting

Using Angle of Arrival for Direction Finding with Bluetooth 5.1

Navigine - Using Angle of Arrival for Direction Finding with Bluetooth 5.1
19 JUL 2021 · 12 MIN

Source -

Although Bluetooth location services have been successful, there is currently a demand for solutions that can provide more high productivity. For example, some real-time location services (RTLS) deployments require centimeter precision. Fortunately, a useful new feature has recently been added to the new Bluetooth standard to meet these requirements.

Bluetooth 5.1 and Angle of Arrival (AoA)

With the introduction of the Bluetooth 5.1 standard, it became possible to determine the direction of an incoming signal by using the angular phase shifts that occur between antennas when they receive RF signals. To enable AoA, the Bluetooth Direction Finder feature must add a Constant Tone Extension (CTE) to the data packet. Thus, the receiver can sample the IQ components of the signal and determine the phase of the signal. And by doing this for at least several antennas, the receiver can calculate at what angle the transmitter signal is coming.

The Bluetooth core CTE specification says that the CTE packet contains a guard period of 4 µs, a check period of 8 µs, as well as several antenna samples. When receiving a packet containing the AoA Constant Tone Extension, the receiver switches antennas according to a predefined switching pattern. In doing so, the receiver takes an IQ sample every microsecond during the reference period and an IQ sample in each sample slot.

The Minew Aoa Locator has a square shape and consists of 12 antenna elements.

Determining the AoA by sampling phase and switching antennas

The signal transmitted by the Bluetooth Low Energy device has a frequency of approximately 2440 MHz, which gives a wavelength of 12 cm. In summary, the angle can be calculated using the following formula.

θ = arcsin (ϕλ/2πd)




The wavelength of the CTE signal


The phase difference between the antennas


The distance between the antennas


In practice, however, many problems arise.

Problems in calculating the AoA and their solutions

  • The first problem that we encountered was the determination of the angle of arrival from one signal source with the parallel operation of other sources. We just forgot to add parsing by MAC addresses of devices :)
  • Then we tried to process IQ samples for one data packet arriving at a frequency of about 10 Hz, which was not enough for a full analysis, and we decided to collect more data in 10 seconds (in practice, 1 second is enough).
  • And even after solving these problems, we could not understand where the jumps in the phase difference between random data packets come from. It turned out that they correspond to the switching of the frequency channels on which Bluetooth works (37: 2402 MHz, 38: 2426 MHz, 39: 2480 MHz).

The solution to the problem was the choice of the frequency channel at which the angle obtained from the phase difference has the closest value to the real one.

Any questions about the article?
Leave a request


Despite the resolved issues, the phase difference is stable but quite noisy.

Therefore, we decided to use the more accurate MUltiple SIgnal Classification algorithms. The main approach of this algorithm is the decomposition of the covariance matrix of the received signal into eigenvalues. Since this algorithm takes uncorrelated noise into account, the generated covariance matrix is diagonal. Here, the signal and noise subspaces are calculated using linear algebra and are orthogonal to each other. Therefore, the algorithm uses the property of orthogonality to isolate signal and noise subspaces.

As an experiment, we used a pair of adjacent elements of a linear antenna array (numbered 12 and 1, respectively), with the source located in the following positions marked with blue crosses.

Based on the calculated values, we got the following graph.

This shows that we cannot get angles of ±90 degrees (we assume this is a hardware limitation). At the same time, the average angular error in the operating range was 12 degrees, which is still a rather bad result.

Then we decided to build a linear regression model and test it on new data taken at the same waypoints and got the following results.

P.S: We also tried 3 antennas, but we got similar results in terms of accuracy. This can be explained by the fact that with an increase in the number of antenna elements used, the main lobe of the radiation pattern narrows. It improves the ability to distinguish one source from another at a given distance BUT does not improve accuracy for one source.


Despite the difficulties encountered, in the end, we managed to obtain an acceptable accuracy of 6 degrees and we can recommend the presented equipment for further use for indoor positioning. In the future, we plan to get a second angle (for this we will take another perpendicular linear antenna array: antenna elements with nomenclature 10, 9) and use both angles (azimuth and elevation) to calculate the XY coordinates.

Navigine SDK

Professional real-time Indoor Positioning solutions for mobile apps.

Navigine -
Vlad de Armas