2026-05-21 4:13 PM
We are a bachelor project group developing a BLE Direction Finding handheld "tracking compass" using AoA on STM32WB09 devices.
We have reached a stage where BLE communication, CTE reception, antenna switching, and IQ report generation all appear functional, but the resulting IQ data seems physically incorrect and causes unstable angle estimation.
We would appreciate suggestions on possible RF or IQ-processing issues we may have overlooked.
Environment:
MCU:
STM32CubeIDE Version: 2.1.0
Toolchain / IDE: STM32CubeIDE.
In this page, ST provides a .zip folder containing existing application projects that STM32WB0-series users can import, edit, and build directly. Version: 1.4.0. Project used as basis: BLE_DirectionFinding_Central_Locator. Most of the edits done was through the .ioc file, app_ble.c, app_entry and gatt_client_app.c. We can provide these files later if necessary.
The application continuously receives CTE responses from a BLE Tracking Tag and forwards IQ reports over UART to the STM32F446RE for MVDR processing.
Attached to this post is a photo of all we have. Compass standing between the two blue boxes. An RF line connected to the SP4T RF switch, in which all four antennas are connected via cable to this switch. And the PCB with the red tape is the Tracking Tag.
Setup:
For every CTE response gotten from the Tracking Tag, the Compass generates a IQ report. The necessary IQ samples gets transmitted to the main processing unit, a STM32F446RE.
Configuration:
CTE length: 16 µs.
CTE slot duration: 1 µs
IQ report size: 66 IQ samples per report.
Expected antenna sequence:
00 -> Ant1
01 -> Ant2
10 -> Ant3
11 -> Ant4
Problem:
For a stationary transmitter we expected relatively stable phase progression across consecutive IQ reports. But instead, phase relationships vary heavily between reports and MVDR angle output becomes unstable or random.
The received IQ data appears physically incorrect/random and angle estimation becomes unstable or meaningless.
The following are three consecutive IQ reports on the receiver side:
(-29, 67)(-67,-29)( 27,-68)( 69, 20)
(-22, 69)(-68,-25)( 24,-71)( 68, 23)
( 9, 46)(-29,-51)(-30,-38)( 61, 34)
( 18, 43)(-38,-44)(-37,-32)( 63, 32)
( 19, 42)(-39,-40)(-37,-31)( 66, 26)
( 25, 40)(-40,-41)(-40,-29)( 66, 25)
( 26, 39)(-43,-40)(-44,-25)( 69, 17)
( 31, 37)(-47,-34)(-45,-24)( 70, 12)
( 30, 33)(-52,-26)(-46,-13)( 71, 4)
( 37, 29)(-53,-24)(-47,-17)( 71, 1)
( 41, 25)(-55,-17)(-48, -9)( 71,-13)
( 41, 21)(-56,-17)(-49, -2)( 69,-14)
( 44, 14)(-58, -7)(-51, 1)( 69,-17)
( 44, 16)(-58, -2)(-50, 4)( 67,-24)
( 44, 12)(-58, -1)(-50, 4)( 66,-29)
( 47, 10)(-58, 3)(-46, 11)( 58,-39)
( 46, 8)(-57, 10)
-
( 78, 49)(-52, 75)(-77,-47)( 43,-80)
( 81, 41)(-41, 82)(-81,-38)( 39,-83)
( 38, 3)(-46, 23)(-47, 34)( 57,-65)
( 37, -8)(-45, 25)(-44, 39)( 49,-73)
( 38,-12)(-43, 34)(-37, 43)( 43,-75)
( 35,-15)(-37, 39)(-38, 42)( 40,-79)
( 35,-18)(-38, 37)(-35, 44)( 30,-82)
( 35,-18)(-32, 43)(-29, 49)( 27,-85)
( 32,-20)(-32, 40)(-27, 52)( 16,-84)
( 30,-22)(-25, 47)(-20, 55)( 5,-87)
( 29,-27)(-25, 46)(-14, 55)( 4,-84)
( 28,-29)(-16, 49)(-11, 56)(-11,-86)
( 24,-29)(-15, 49)( -7, 56)( -6,-86)
( 22,-31)(-12, 50)( -2, 56)(-23,-84)
( 18,-34)( -6, 54)( 6, 57)(-33,-82)
( 12,-34)( 0, 54)( 7, 56)(-34,-81)
( 11,-38)( 4, 52)
-
(-95, 56)(-52,-100)(103,-45)( 49,101)
(-98, 50)(-54,-99)( 97,-54)( 54, 97)
(-28, 50)( 25,-67)(-13,-74)( 37,101)
( -9, 59)( 19,-71)(-15,-73)( 46, 95)
( -3, 59)( 11,-70)(-24,-71)( 55, 95)
( -7, 59)( 9,-72)(-26,-71)( 64, 85)
( 1, 59)( -5,-70)(-34,-67)( 72, 80)
( 5, 60)(-16,-68)(-37,-65)( 81, 73)
( 16, 57)(-15,-69)(-46,-58)( 74, 75)
( 14, 54)(-18,-69)(-50,-57)( 82, 71)
( 16, 55)(-26,-68)(-57,-47)( 93, 52)
( 23, 53)(-29,-62)(-56,-48)( 95, 45)
( 35, 48)(-36,-62)(-63,-44)( 99, 47)
( 35, 47)(-38,-59)(-66,-35)(104, 23)
( 40, 41)(-45,-54)(-68,-31)(105, 25)
( 40, 43)(-50,-50)(-71,-28)(107, 18)
( 46, 37)(-47,-52)
The transmitter and receiver remained stationary during capture. We expected stable phase progression between the antennas but no, phase relationships vary heavily.
Test conditions:
It was confirmed that the main processing unit (F446RE) utilises the correct algorithm and acquires the correct angle from example IQ samples.
Has anyone observed similar STM32WB09 IQ behavior?
Could antenna switch (switching occurs every 2us) delay corrupt IQ samples?
Could incorrect handling of reference period samples create this symptom?
Could PCB RF routing or grounding distort phase?
Could multipath alone create this level of variation under near-static conditions?
A lot of "could"s, but that is exactly why we are asking: we are unsure whether this is mainly an RF/layout issue, an antenna-switch timing issue, or an IQ sample alignment/processing issue. Any pointers on which layer to investigate first would be very helpful.