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

数据分析
通过对大量真实设备数据的测试与对比,确认信号干扰是导致数据混乱的主要原因。干扰的影响受以下因素制约:
- 环境影响:多径效应(信号反射)或干扰物改变信号路径,导致方向向量
[x, y]
的波动。 - 干扰特性:干扰发生时,信号不会立即中断,而是出现短暂混乱或误差,随后可能完全丢失(
x = 0, y = 0
)。 - 数据波动范围:
- 正常数据示例:
x: 0.2222, y: -1.2343
(模长 ≈ 1.255)。 - 干扰数据示例:
x: 0.4022, y: -0.7812
(模长 ≈ 0.879)。 - 波动幅度较小(如角度变化 < 180°),在正常移动范围内,难以通过单一阈值区分。
- 正常数据示例:
- 异常数据特征:典型异常跳变(如 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°)
……………
{
……………
}
}
原文连接:UWB 信号干扰问题分析与优化方案
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。