Main Content


Estimate AoA or AoD of BLE Signal

    Download Required: To use bleAngleEstimate, first download Communications Toolbox™ Library for the Bluetooth® Protocol. For more information, see Get and Manage Add-Ons. Alternatively, see Communications Toolbox Library for the Bluetooth Protocol File Exchange.



    angle = bleAngleEstimate(IQsamples,cfg) estimates the angle of arrival (AoA) or angle of departure (AoD), angle, for the given in-phase and quadrature (IQ) samples, IQsamples, and Bluetooth low energy (BLE) angle estimation configuration object, cfg.


    collapse all

    Create a BLE angle estimation configuration object, specifying the values of antenna array size, slot duration, and antenna switching pattern.

    cfg = bleAngleEstimateConfig('ArraySize',2,'SlotDuration',2,...
        'SwitchingPattern',[1 2])
    cfg = 
      bleAngleEstimateConfig with properties:
               ArraySize: 2
          ElementSpacing: 0.5000
            SlotDuration: 2
        SwitchingPattern: [1 2]
       Read-only properties:
        No properties.

    Set the IQ samples such that they define a connection data channel protocol data unit (PDU) with an AoA constant tone extension (CTE) of 2 μs slots, CTE time of 16 μs, and azimuth rotation of 70 degrees.

    IQsamples = [0.8507+0.5257i;-0.5257 + 0.8507i;-0.8507 - 0.5257i;...
        0.5257 - 0.8507i;0.8507+0.5257i;-0.5257 + 0.8507i;...
        -0.8507 - 0.5257i;0.5257 - 0.8507i;-0.3561 + 0.9345i];

    Estimate the AoA of the BLE signal.

    angle = bleAngleEstimate(IQsamples,cfg)
    angle = 70

    Input Arguments

    collapse all

    IQ samples, specified as a complex-valued column vector. This argument corresponds to the 8 μs value of the reference period and slot duration.

    Data Types: single | double

    BLE angle estimation configuration object, specified as a bleAngleEstimateConfig object.

    Output Arguments

    collapse all

    AoA or AoD, returned as one of these values.

    • Real number – This value is the estimated broadside angle. If elevation is 0, the estimated broadside angle represents the azimuth angle.

    • Two-element row vector of real numbers in the form [azimuth elevation] – azimuth and elevation are the estimated azimuth angle and elevation angle in degrees, respectively.

    The size of this output argument is equal to the size of the ArraySize property of the bleAngleEstimateConfig object.

    Data Types: double


    [1] Bluetooth Technology Website. “Bluetooth Technology Website | The Official Website of Bluetooth Technology.” Accessed November 22, 2019.

    [2] Bluetooth Special Interest Group (SIG). "Bluetooth Core Specification." Version 5.1.

    [3] Wooley, Martin. Bluetooth Direction Finding: A Technical Overview. Bluetooth Special Interest Group (SIG), Accessed April 6, 2020,

    Extended Capabilities

    C/C++ Code Generation
    Generate C and C++ code using MATLAB® Coder™.

    Introduced in R2020b