UWB 信号干扰问题分析与优化方案

问题描述

在超宽带(UWB)技术应用中,当信号受到干扰(如手遮挡、墙壁等硬物或其他有形/无形干扰物抵近)时,方向数据(通常以 [x, y, z] 向量表示)可能发生跳变,导致数据稳定性下降,影响箭头指向的准确性。这种干扰可能源于环境因素、遮挡物或设备间的相对位置变化,需通过技术手段检测并处理。

UWB 信号干扰问题分析与优化方案

数据分析

通过对大量真实设备数据的测试与对比,确认信号干扰是导致数据混乱的主要原因。干扰的影响受以下因素制约:

  1. 环境影响:多径效应(信号反射)或干扰物改变信号路径,导致方向向量 [x, y] 的波动。
  2. 干扰特性:干扰发生时,信号不会立即中断,而是出现短暂混乱或误差,随后可能完全丢失(x = 0, y = 0)。
  3. 数据波动范围
    • 正常数据示例x: 0.2222, y: -1.2343(模长 ≈ 1.255)。
    • 干扰数据示例x: 0.4022, y: -0.7812(模长 ≈ 0.879)。
    • 波动幅度较小(如角度变化 < 180°),在正常移动范围内,难以通过单一阈值区分。
  4. 异常数据特征:典型异常跳变(如 180° 或更大)较少见,更多表现为小范围波动(如 10°-30°)。

结论:干扰数据波动虽小,但频繁且难以直接通过角度阈值(如 180°/60°/30°等)过滤,需结合信号强度和传感器数据综合判断。


优化方案

为解决 UWB 信号干扰问题,提出以下技术方案,结合信号强度监测、卡尔曼滤波、加权平均平滑及陀螺仪辅助,确保数据稳定性:

1. 信号强度检测

  • 方法:计算方向向量模长 signalStrength = sqrt(x^2 + y^2),作为信号质量指标。
  • 参数调节
    • 通过真机测试,在信号强度范围 [0.01, 1.6] 内采集数据,记录干扰与正常场景下的模长分布。
    • 确定最优阈值:正常值通常在 [0.2, 1.2],干扰时可能 < 0.1 或 > 1.2(多径效应)。
  • 实现:若 signalStrength 超出正常范围,标记为干扰。

2. 卡尔曼滤波平滑模长(忽略)

  • 方法:对 signalStrength 应用卡尔曼滤波,减少噪声影响,平滑信号强度变化。
  • 参数配置
    • 初始值:initialAngle = 1.0(假设归一化模长)。
    • 过程噪声:processNoiseCovariance = 0.05
    • 测量噪声:measurementNoiseCovariance = 0.2
  • 判断干扰:滤波后的 signalStrength 若 < 0.1 或 > 1.2,切换至陀螺仪模式。

3. 加权平均平滑

  • 方法:对最近 3 帧 UWB 角度数据应用加权平均,权重 [3, 2, 1],偏重新数据。
  • 公式
    • weightedSum = angle[0] * 3 + angle[1] * 2 + angle[2] * 1
    • weightedAverage = weightedSum / 6
  • 效果:平滑小范围波动,减少箭头抖动。

4. 加权平均 UWB 信号模长

  • 方法:对最近 3 帧信号模长 signalStrength 应用加权平均,权重 [3, 2, 1],平滑模长变化和引入阈值控制。
  • 公式: - weightedModSum = mod[0] * 3 + mod[1] * 2 + mod[2] * 1 - weightedModAverage = weightedModSum / 6
  • 效果:平滑模长波动,减少干扰误判。
  • 实现:在更新缓冲区时,同时计算加权平均模长,作为干扰判断的辅助依据。

5. 陀螺仪辅助对比

  • 方法
    • 计算陀螺仪累积旋转变化 deltaTheta = _cumulativeRotation - lastStableCumulativeRotation
    • 预测 UWB 角度变化 expectedNewAngle = lastStableAngle - deltaTheta
    • 若实际角度与预期差值 difference = normalizeAngle(newAngle - expectedNewAngle) 超过 0.5 弧度,且信号强度异常,确认干扰。
  • 切换逻辑
    • 干扰时:切换到陀螺仪模式,angle = lastStableAngle - deltaTheta
    • 恢复时:信号强度稳定(0.2 < filteredSignalStrength < 1.2)且 difference < 0.3 连续 3 次,切回 UWB。

6. 参考官方资料

  • Apple Developer 文档Core Location UWB
    • 指出 UWB 数据可能受环境干扰影响,建议监测信号质量,但未提供直接 API。
  • 研究文献UWB Interference Mitigation
    • 讨论多径效应和信号强度变化,可作为检测依据。

部分实现代码

以下是优化后的 Dart 实现,集成到 UwbController 类中:

类成员变量

class UwbController extends BaseController<UwbModel>
with GetTickerProviderStateMixin, WidgetsBindingObserver {
// ... 现有变量 ...

// 加权平均缓冲区变量
final int bufferSize = 3;
final List<double> weights = [3.0, 2.0, 1.0];
final List<double> angleBuffer = [];
double lastStableAngle = 0.0;
double lastStableCumulativeRotation = 0.0;

// 信号强度阈值
const double signalLowThreshold = 0.1; // 低阈值
const double signalHighThreshold = 1.2; // 高阈值(超出归一化范围)

// 卡尔曼滤波器用于信号强度
KalmanFilter signalKalmanFilter = KalmanFilter(
initialAngle: 1.0, // 假设初始信号强度为 1.0
initialVelocity: 0.0,
initialErrorCovarianceAngle: 1.0,
initialErrorCovarianceVelocity: 1.0,
processNoiseCovarianceAngle: 0.05,
processNoiseCovarianceVelocity: 0.05,
measurementNoiseCovariance: 0.2,
timeStep: 0.016,
);

// 状态控制
bool usingGyroMode = false;
int stabilityCount = 0;
const int stabilityCountThreshold = 3; // 连续 3 次稳定恢复
const double stabilityThreshold = 0.3; // 陀螺仪对比稳定阈值(约 17°)

……………
{
	……………
}
}