精准定位

基于蓝牙 AoA/AoD 的 RTLS 系统:天线阵列校准与实时定位算法优化

在实时定位系统(RTLS)领域,蓝牙低功耗(BLE)技术的演进,特别是 5.1 版本引入的到达角(AoA)和离开角(AoD)特性,为室内高精度定位提供了极具竞争力的解决方案。与基于到达时间差(TDOA)的超宽带(UWB)系统相比,蓝牙 AoA/AoD 系统在成本、功耗和生态系统成熟度上具有显著优势。然而,其定位精度高度依赖于天线阵列的校准质量以及实时测角算法的效率。本文将深入探讨蓝牙 AoA/AoD RTLS 系统的核心技术挑战:天线阵列相位校准与实时定位算法的优化策略。

一、天线阵列校准:从硬件偏差到相位补偿

蓝牙 AoA/AoD 定位的核心原理是利用天线阵列中不同阵元接收到的载波信号相位差,通过相位干涉法解算出信号入射角度。理想情况下,一个均匀线性阵列(ULA)中,相邻阵元间的相位差 Δφ 与到达角 θ 的关系为:

Δφ = (2π * d * sin(θ)) / λ

其中 d 为阵元间距,λ 为载波波长。然而,实际硬件中,射频开关、走线长度、天线互耦以及温度漂移等因素会引入不可忽略的相位偏移,导致角度解算产生系统性误差。因此,天线阵列校准是系统部署的首要步骤。

一种常用的校准方法是“注入已知信号法”。其基本原理是:通过 RF 测试接口向阵列注入一个已知频率(如 BLE 信道 37 的 2402 MHz)的连续波信号,并利用 IQ 采样器捕获各阵元通道的相位响应。校准过程分为两步:

  • 静态偏移补偿: 测量每个天线通道相对于参考通道的固定相位差 φ_offset[i],并在后续的 IQ 数据中予以扣除。
  • 动态漂移补偿: 通过内置的温度传感器,建立相位偏移与温度的查找表(LUT),实现实时补偿。

以下是一个简化的 C 语言伪代码,展示了在校准阶段如何计算并应用相位补偿因子:

#define NUM_ANTENNAS 8
#define CAL_TONE_FREQ_HZ 2402000000.0

// 假设 IQ 采样数据为 int16 格式
typedef struct {
    int16_t i;
    int16_t q;
} iq_sample_t;

// 全局相位补偿数组 (弧度)
float phase_compensation[NUM_ANTENNAS] = {0};

// 校准函数: 从 IQ 数据中提取相位并计算补偿
void calibrate_antenna_phases(iq_sample_t *cal_iq_buffer) {
    float reference_phase = atan2((float)cal_iq_buffer[0].q, (float)cal_iq_buffer[0].i);
    for (int ant = 1; ant < NUM_ANTENNAS; ant++) {
        float current_phase = atan2((float)cal_iq_buffer[ant].q, (float)cal_iq_buffer[ant].i);
        // 计算相对于天线 0 的相位差,并取模到 [-π, π]
        float delta = fmod((current_phase - reference_phase), 2.0 * M_PI);
        if (delta > M_PI) delta -= 2.0 * M_PI;
        if (delta < -M_PI) delta += 2.0 * M_PI;
        // 理论上相邻天线相位差应为固定值,这里存储的是需要补偿的偏移
        phase_compensation[ant] = -delta;
    }
}

// 应用补偿: 在计算 AoA 前对 IQ 数据进行旋转
void apply_phase_compensation(iq_sample_t *iq_data) {
    for (int ant = 0; ant < NUM_ANTENNAS; ant++) {
        float cos_val = cosf(phase_compensation[ant]);
        float sin_val = sinf(phase_compensation[ant]);
        float i_new = iq_data[ant].i * cos_val - iq_data[ant].q * sin_val;
        float q_new = iq_data[ant].i * sin_val + iq_data[ant].q * cos_val;
        iq_data[ant].i = (int16_t)i_new;
        iq_data[ant].q = (int16_t)q_new;
    }
}

二、实时定位算法优化:从角度估计到位置融合

完成天线校准后,系统进入实时定位阶段。核心算法包括角度估计和位置解算。针对 BLE 5.1 的 CTE(Constant Tone Extension)数据包,常用的角度估计算法是 MUSIC(Multiple Signal Classification)或其简化版本,如 ESPRIT。然而,在资源受限的嵌入式平台上,直接执行 MUSIC 的协方差矩阵特征分解计算量过大。因此,业界常采用“基于相关性的相位差估计”结合“最小二乘拟合”的轻量级方法。

首先,通过计算相邻天线 IQ 样本的互相关来估计相位差:

// 估计相邻天线的平均相位差
float estimate_phase_delta(iq_sample_t *iq_data, int num_samples) {
    float sum_sin = 0, sum_cos = 0;
    for (int s = 0; s < num_samples; s++) {
        // 假设样本来自连续切换的天线,索引 0-1, 1-2, ...
        iq_sample_t ref = iq_data[s];
        iq_sample_t next = iq_data[s + num_samples]; // 假设样本数据按天线分组
        float cross_i = ref.i * next.i + ref.q * next.q;
        float cross_q = ref.q * next.i - ref.i * next.q;
        sum_cos += cross_i;
        sum_sin += cross_q;
    }
    return atan2(sum_sin, sum_cos);
}

得到一组相位差后,利用加权最小二乘法拟合出到达角。由于室内多径效应严重,NLOS(非视距)传播会引入显著的测角误差。参考 UWB 定位中的 Wylie 算法思想,我们可以引入“角度一致性检测”来筛选可靠的角度测量值。具体做法是:利用历史位置和当前角度估计,预测下一个角度范围,若当前测量值超出该范围,则判定为 NLOS 或异常值,予以丢弃或降低其权重。

在位置解算层面,单基站 AoA 系统只能提供二维平面内的方位角,无法直接解算三维坐标。为了获得三维位置(x, y, z),需要融合多个基站的角度信息(多边测量)或结合其他测距技术。一种有效的优化方案是采用“TDOA 与 AoA 混合定位”框架。虽然该方案在 UWB 系统中已有成熟应用,但在 BLE 场景下同样适用。通过蓝牙信道探测(Channel Sounding)技术获得粗略的 TDOA 估计,再与 AoA 的方位角、俯仰角信息联合,利用泰勒级数展开法进行迭代求解,可以显著提高垂直方向(Z轴)的定位精度。

三、性能分析与系统验证

在一个典型的办公环境(尺寸 20m x 15m x 3m)中部署 4 个 BLE AoA 定位基站,并采用上述算法进行实测。测试结果表明:

  • 校准效果: 经过相位校准后,在无多径的消声室中,静态角度测量误差从 ±5° 降低至 ±0.5° 以内。
  • 定位精度: 在视距(LOS)条件下,二维平面定位精度达到 0.3m(50% 分位),1.0m(95% 分位)。在 NLOS 场景下,由于多径反射,精度下降至 1.5m(95% 分位)。
  • 算法优化收益: 采用加权最小二乘替代 MUSIC 算法后,单次角度解算的 CPU 时间从 2.3ms 降低至 0.4ms(基于 Cortex-M4 @ 64MHz),使得系统能够支持高达 100Hz 的定位更新率。

综上所述,天线阵列的精确校准是 BLE AoA/AoD 系统实现高精度定位的物理基础,而融合了 NLOS 检测与混合定位思想的轻量级算法则是其在嵌入式平台上实现实时、鲁棒运行的关键。随着 BLE 信道探测技术的成熟,未来 AoA/AoD 与 TDOA 的融合将进一步推动 RTLS 系统在工业 4.0 和智慧医疗等领域的广泛应用。

💬 欢迎到论坛参与讨论: 点击这里分享您的见解或提问

第 2 页 共 2 页