How Do You Implement BLE Direction Finding (AoA and AoD)?
Last updated 14 July 2026 · 8 min read
Direct Answer
Bluetooth 5.1 direction finding uses a Constant Tone Extension (CTE) — an extra unmodulated RF tone appended to specific packets — combined with an antenna-switching array to estimate the angle a signal arrived from or was sent toward. In Angle of Arrival (AoA) mode, the tag transmits with a single antenna and the receiving locator has the antenna array, switching elements while sampling the CTE's I/Q phase — suited to many low-cost tags reporting to a few more expensive locators, the typical asset-tracking arrangement. In Angle of Departure (AoD) mode, the array is on the transmitting side instead, suited to a single beacon reporting to many simple single-antenna receivers such as phones. Implementing either requires a BLE SoC with Direction Finding radio hardware — Nordic's nRF52833 and nRF52811 support it; the otherwise very common nRF52832 and nRF52840 do not — plus an antenna array with element spacing tightly controlled to avoid angle ambiguity.
Detailed Explanation
Direction finding is a Bluetooth 5.1 feature that estimates the angle a BLE signal arrived from (or was sent toward) using an antenna array and phase-based signal processing, rather than the signal-strength-based estimation (RSSI ranging) BLE products relied on before. It's the feature behind indoor asset-tracking systems that report a tag's position to within a metre or so, and behind some wayfinding and proximity-beacon products. For the broader BLE version history this feature belongs to, see Bluetooth versions 3.0 through 6.0 compared; for BLE protocol fundamentals, see What Is Bluetooth Low Energy?
Direction finding is a link-layer feature, not a GATT-level one — it works on specially-flagged advertising or connection packets and requires hardware support in the BLE radio itself, not just a firmware or stack update. This is the detail that most catches teams out mid-project: a BLE SoC can be fully Bluetooth 5.x compliant for every other feature and still lack the specific radio hardware direction finding needs.
Angle of Arrival vs Angle of Departure
Both modes use the same underlying mechanism — a Constant Tone Extension combined with antenna switching and I/Q sampling — but differ in which side of the link carries the antenna array:
| Angle of Arrival (AoA) | Angle of Departure (AoD) | |
|---|---|---|
| Antenna array location | Receiver (the locator) | Transmitter (the tag or beacon) |
| Transmitter hardware | Single antenna | Antenna array, RF switch |
| Receiver hardware | Antenna array, RF switch | Single antenna |
| Typical use case | Many low-cost single-antenna tags, few locators | One array-equipped beacon, many simple receivers |
| Example deployment | Asset/personnel tracking — tags on assets, fixed locators on walls/ceiling | Wayfinding beacon reporting position to unmodified phones |
The choice between them is primarily a cost-and-complexity placement decision: whichever side of the link needs to stay cheap and simple gets the single antenna, and whichever side can absorb the array and switch hardware cost does the switching. Asset tracking puts the array on the fixed infrastructure (AoA) because tags need to be cheap and small in large numbers; a beacon reporting its position to ordinary phones puts the array on the beacon (AoD) because a phone's BLE radio has no antenna array and never will.
How CTE and IQ Sampling Work
The Constant Tone Extension is an unmodulated RF tone appended to the end of a specific advertising PDU (connectionless CTE, used for AoA/AoD beacons) or a Link Layer control PDU (connection CTE, used within an active connection). Because the tone carries no data, the receiver can sample it purely to characterise the RF signal's phase, unaffected by the data modulation that would otherwise complicate phase measurement.
During the CTE, the antenna array side switches between its elements at fixed intervals (1 µs or 2 µs slots, depending on the configured sampling mode) while the radio samples the tone's in-phase (I) and quadrature (Q) components at each switch position. Because each antenna element is at a slightly different physical position, the same incoming (or outgoing) wavefront arrives at — or departs from — each element with a slightly different phase, and that phase difference is what encodes the angle.
The underlying relationship for a simple two-element pair is the standard phase-interferometry expression: the phase difference between two elements spaced a known distance apart is proportional to the sine of the angle of arrival, scaled by the wavelength. In practice, production direction-finding implementations use more than two elements and combine multiple phase measurements (rather than a single two-antenna phase difference) to resolve angle more robustly against multipath reflections and measurement noise — the two-element relationship is the concept to understand, not the literal algorithm a real locator runs.
Antenna Array Hardware Requirements
The array itself is a set of antenna elements in a known, fixed geometric arrangement, connected to the radio through a fast RF switch:
- Element spacing must be kept below half the RF wavelength to avoid angle ambiguity (spatial aliasing, sometimes called grating lobes) — at 2.4 GHz, half-wavelength is approximately 6.2 cm, so a uniform linear array's elements are typically spaced somewhat closer than that. Spacing wider than half-wavelength can produce more than one angle solution that fits the same measured phase difference, which the algorithm cannot distinguish between.
- Array geometry determines what the system can resolve: a uniform linear array (elements in a single row) resolves azimuth angle only, in one plane; a two-dimensional array (a rectangular or U-shaped arrangement) resolves both azimuth and elevation, at the cost of more elements and a more complex switch.
- RF switching speed and timing must hit the CTE's 1 µs or 2 µs sampling slots precisely, which is why switching is handled by dedicated radio hardware (via PPI/DPPI-style hardware event routing on Nordic parts — see PPI/DPPI on the nRF52 and nRF53) toggling a fast RF switch IC, rather than by firmware bit-banging a GPIO, which cannot reliably meet the required timing.
- Phase-matched RF paths from the switch to every antenna element are required — an RF trace length mismatch between elements introduces a phase offset that reads as a false angle, which is why array PCB layout needs the same trace-length discipline used for controlled-impedance or differential routing elsewhere in high-speed PCB design.
Nordic Silicon Support and Firmware
Nordic's nRF52833 and nRF52811 include the Radio peripheral's Direction Finding hardware extension — CTE generation and reception, and hardware-timed antenna switching — as does the nRF5340's network core. Despite otherwise being capable, widely-used Bluetooth 5.x parts, the nRF52832 and nRF52840 do not include this hardware; a team that has already committed to either of those parts for a product and later adds a direction-finding requirement will need to change silicon, not just firmware, which is worth checking against the current nRF52833 Product Specification at the start of any direction-finding project rather than discovering it mid-development.
In the nRF Connect SDK, direction finding is enabled via CONFIG_BT_DF and its connectionless/connection-specific sub-options, and Nordic ships sample applications (direction_finding_connectionless_tx, direction_finding_connectionless_rx, and connection-based equivalents) that configure the CTE parameters, antenna switch pattern, and IQ sample reporting. See setting up the nRF Connect SDK and Zephyr RTOS for the base toolchain these samples build on, and BLE peripheral with Zephyr GATT on nRF52 for the surrounding BLE peripheral role these samples extend with direction-finding-specific configuration.
Design Considerations
- Confirm hardware DF support before finalising silicon — this is a radio hardware capability, not a firmware feature, and the specific nRF52 variant matters (see above).
- Decide AoA vs AoD from the cost distribution of your deployment, not accuracy alone — both modes achieve comparable angle accuracy for a comparable array; the real decision driver is which side of the link can economically host the array.
- Budget PCB area and layout complexity for the array early — a phase-matched multi-element array with a fast RF switch is a materially more involved RF layout than a single-antenna BLE design, and needs to be planned into the enclosure and board outline from the start rather than retrofitted.
- Plan a calibration step for production units — RF path phase offsets vary slightly between manufactured units, and most practical direction-finding systems apply a per-unit or per-batch calibration correction to the raw IQ data rather than assuming ideal, identical hardware across every unit. Zeus Design develops BLE direction-finding firmware and the antenna-array hardware it depends on for asset-tracking and positioning products.
Common Mistakes
- Choosing a direction-finding-incapable nRF52 variant (nRF52832 or nRF52840) based on general BLE 5.x feature marketing, without checking the specific part's Direction Finding hardware support.
- Underestimating the RF layout discipline an antenna array requires — treating it as "just more antennas" rather than a phase-matched array where trace-length mismatches directly corrupt the angle measurement.
- Spacing array elements wider than half-wavelength to physically fit a mechanical constraint, introducing angle ambiguity that isn't caught until angle accuracy is unexpectedly poor or inconsistent in testing.
- Skipping per-unit calibration and assuming every manufactured locator or tag has identical RF phase characteristics, then seeing accuracy that varies unexpectedly between physically identical units.
- Choosing BLE direction finding for a use case that actually needs UWB-grade accuracy — see what is Ultra-Wideband (UWB) for when centimetre-scale positioning genuinely justifies UWB's added cost and power draw instead.
Frequently Asked Questions
- Which Nordic BLE chips actually support direction finding in hardware?
- The nRF52833 and nRF52811 both include the Radio peripheral's Direction Finding hardware extension (CTE transmission/reception and synchronised antenna switching). The nRF5340 supports it via its network core. The nRF52832 and nRF52840 — both very widely used BLE 5.x parts — do not include this hardware, despite otherwise supporting Bluetooth 5.x features, because the Direction Finding radio extension is a separate hardware block Nordic added to specific dies rather than a firmware-only feature. Always confirm Direction Finding support against the specific part's current product specification before committing to a design; Nordic's lineup of DF-capable parts has continued to expand.
- How accurate is BLE direction finding compared to UWB?
- BLE direction finding typically achieves angle accuracy on the order of a few degrees under good conditions, translating to roughly metre-scale position accuracy at typical indoor ranges — adequate for room-level or zone-level asset tracking, but coarser than Ultra-Wideband positioning. See what is Ultra-Wideband (UWB) for the time-of-flight-based technology that achieves centimetre-to-decimetre accuracy at higher hardware cost and power draw; many designs use BLE for coarse zone tracking and reserve UWB for the subset of use cases that genuinely need precision ranging.
- Do I need a specialised antenna switch IC, or can I switch antennas with a GPIO-driven RF switch?
- Either can work, but the switching has to happen fast enough and be precisely timed to the CTE's sampling slots (1 µs or 2 µs per antenna, depending on mode) — most designs use a dedicated RF switch IC (a multi-throw SPnT switch rated for the 2.4 GHz band) driven directly by GPIO outputs that the SoC's Direction Finding hardware toggles automatically in sync with the radio, rather than a general-purpose GPIO-bit-banged switch, since software-timed switching cannot reliably hit the required microsecond-level timing.
References
Related Questions
What Is Bluetooth Low Energy (BLE)?
Bluetooth Low Energy (BLE) is a 2.4 GHz protocol for low-power sensor-to-phone communication. Learn how advertising, GATT, and connection parameters work.
What Are the Differences Between Bluetooth Versions 3.0 Through 6.0?
Bluetooth versions 3.0–6.0 compared for embedded design: the BLE/BR-EDR split and what each version added, from Data Length Extension to Channel Sounding.
What Is Ultra-Wideband (UWB)?
Ultra-wideband (UWB) is a short-range radio technology for centimetre-accurate ranging and positioning. Covers how it works, common ICs, and when to use it.
How Do You Implement a BLE Peripheral with Custom GATT Services on nRF52 Using Zephyr?
Implement a BLE peripheral with custom GATT services on nRF52 using Zephyr NCS: service definition, UUIDs, read/write handlers, and notifications.
What Antenna Types Are Used in Embedded Wireless Designs?
Chip antennas, PCB trace antennas, wire whips, and external connectors all have different trade-offs in size, cost, and RF performance. Here's how to choose.
How Do You Set Up the nRF Connect SDK and Zephyr RTOS for nRF52 Development?
Set up nRF Connect SDK (NCS) for nRF52 development: install tools, create a west workspace, configure Kconfig, build a Zephyr project, and flash with J-Link.
Related Forum Discussions
BLE GATT notifications working on first connect but stop after phone reconnects — what resets the CCCD?
Working on a BLE peripheral on nRF52840 with Zephyr (NCS 2.7). Custom GATT service with a single notify characteristic that sends sensor rea
nRF5340 network core not starting — BLE stack hangs on bt_enable after migrating from nRF52840
Trying to bring up an nRF5340 DK for the first time. I've done a few nRF52840 projects before so I figured the NCS migration would be fairly
nRF52840 BLE advertising not starting — device not showing up in scanner after bt_enable completes
Trying my first Zephyr/NCS project on an nRF52840 DK after mostly doing ESP32 stuff. Following the [BLE GATT peripheral guide](/questions/nr