2、射频环境感知:RSSI与LQI的采集与滤波、自适应跳频算法、信道质量评估模型
好,咱们进入实战课程的第二讲。这一讲,说白了就是教你的TWS耳机怎么「听」懂周围的射频环境。
你想想看,耳机在口袋里、在公交车上、在人来人往的商场里,周围的2.4G信号乱成一锅粥。Wi-Fi、蓝牙、甚至微波炉都在这个频段上凑热闹。如果耳机是个「聋子」,它根本不知道外面有多吵,那断连就是迟早的事。
所以,射频环境感知是连接稳定性的第一道防线。我个人习惯把这一章叫做「耳机的眼睛和耳朵」。
2.1 RSSI与LQI:两个最基础的感知指标
先说说RSSI。Received Signal Strength Indicator,接收信号强度指示。单位是dBm。这个值越接近0,说明信号越强。比如-40dBm就是贴着耳朵,-90dBm基本就要断连了。
但这里有个坑——RSSI只能告诉你信号「大不大」,不能告诉你信号「好不好」。我在项目中遇到过这种情况:RSSI显示-55dBm,看着挺强,但音频就是卡顿。为什么?因为干扰太严重了。
这时候就要看LQI了。Link Quality Indicator,链路质量指示。它反映的是接收到的数据包的错误率。LQI值范围一般是0到255,越高越好。有些芯片厂商会直接映射成百分比。
嗯,这里要注意。不同芯片的RSSI和LQI的原始值含义可能不同。比如CSR的芯片和Realtek的芯片,LQI的计算方式就不一样。我建议你在做底层驱动时,先读一遍芯片手册的RF部分,别想当然。
2.2 采集与滤波:别被瞬时值骗了
直接拿RSSI的瞬时值做决策,那是新手干的事。为什么?因为射频信号波动非常大。你走一步,RSSI可能跳10个dB。如果你根据一次采样就决定跳频,那耳机得累死。
我常用的方法是滑动窗口平均滤波。说白了就是取最近N次采样的平均值。N取多少?我个人习惯取5到8。太少了滤不掉毛刺,太多了反应太慢。
给你看一段伪代码,这是我实际项目中用过的逻辑:
// 滑动窗口滤波示例
#define WINDOW_SIZE 8
int16_t rssi_buffer[WINDOW_SIZE];
uint8_t buffer_index = 0;
void filter_rssi(int16_t raw_rssi) {
rssi_buffer[buffer_index] = raw_rssi;
buffer_index = (buffer_index + 1) % WINDOW_SIZE;
int32_t sum = 0;
for (int i = 0; i < WINDOW_SIZE; i++) {
sum += rssi_buffer[i];
}
int16_t filtered_rssi = sum / WINDOW_SIZE;
// 用filtered_rssi做后续决策
}
除了滑动平均,我还用过中值滤波。中值滤波的好处是能干掉极端值。比如你采样时突然蹦出一个-120dBm的异常值,平均滤波会被拉低,但中值滤波不受影响。
2.3 自适应跳频算法:从被动到主动
蓝牙经典(BR/EDR)有79个信道,BLE有40个信道。自适应跳频(AFH)就是让耳机和手机协商,把那些被Wi-Fi占用的「坏信道」标记出来,只用好信道通信。
但问题是,传统的AFH是反应式的——发现信道坏了,再把它踢出去。我做的方案是预测式的。根据RSSI和LQI的历史趋势,提前判断哪些信道可能会变差,主动切换。
具体怎么做?我简单说一下思路:
- 信道分类:把79个信道分成3类——好、中、差。好信道的LQI > 200,中信道的LQI在150-200之间,差信道的LQI < 150。
- 动态权重:每个信道有一个权重值。好信道权重高,差信道权重低。权重会随着时间衰减,如果某个信道一直表现好,权重会缓慢增加。
- 跳频决策:每次跳频时,根据权重随机选择下一个信道。权重高的信道被选中的概率大,但权重低的信道也有一定概率被选中——这是为了探测它是否恢复了。
我曾经在一个项目中,把跳频间隔从标准的1.25ms改成了动态可调的。当检测到干扰严重时,缩短跳频间隔;环境安静时,拉长间隔省电。效果还不错,断连率降低了30%。
2.4 信道质量评估模型:把感知变成决策
有了RSSI和LQI的滤波值,有了跳频算法,但还缺一个东西——怎么综合判断当前信道到底好不好?
我设计过一个简单的评估模型,用三个维度打分:
| 维度 | 指标 | 权重 | 说明 |
|---|---|---|---|
| 信号强度 | 滤波后RSSI | 30% | RSSI > -60dBm得满分,< -85dBm得0分 |
| 链路质量 | 滤波后LQI | 50% | LQI > 200得满分,< 100得0分 |
| 稳定性 | RSSI方差 | 20% | 方差越小,得分越高 |
总分 = 信号强度得分 × 0.3 + 链路质量得分 × 0.5 + 稳定性得分 × 0.2
总分低于60分,我就认为当前信道不可用,触发跳频。高于80分,说明信道很好,可以降低采样频率省电。
这个模型的好处是简单、可调。你可以在不同产品上调整权重。比如在游戏耳机上,可以把稳定性权重调高,因为游戏对延迟敏感,信道不能忽好忽坏。
好了,这一讲的内容就这些。总结一下:RSSI和LQI是基础,滤波是手段,自适应跳频是核心,信道评估模型是决策依据。下一讲我们会聊蓝牙协议栈的优化,到时候你会看到这些感知数据怎么真正用起来。
公众号:蓝海资料掘金营,微信deep3321