4. 信号强度指标:RSSI、LQI、SNR 概念与测量方法
做无线通信调试,最怕什么?
怕信号时好时坏,找不到原因。
我早年做一款车载蓝牙模块,设备在实验室跑得稳稳的,一装车就断连。折腾了两周,最后发现是天线附近有颗螺丝钉改变了阻抗。从那以后,我养成了一个习惯——先看信号指标,再动硬件。
这一章,我们就来聊聊三个最核心的指标:RSSI、LQI 和 SNR。说白了,它们就是无线通信的“体温、脉搏和血压”。
4.1 RSSI:接收信号强度指示
RSSI 是最直观的指标。它告诉你,对方发过来的信号,到你这边还剩多少“力气”。
概念
RSSI 的单位是 dBm,数值越大(越接近 0),信号越强。比如 -30 dBm 就是“满格”,-90 dBm 基本就是“断连边缘”。
经验值参考(2.4GHz 频段)
- -30 dBm ~ -50 dBm:信号极好,适合高速通信
- -50 dBm ~ -70 dBm:信号良好,日常使用没问题
- -70 dBm ~ -85 dBm:信号较弱,可能出现丢包
- -85 dBm 以下:信号很差,基本不可靠
测量方法
大多数无线芯片都内置了 RSSI 寄存器。你直接读它就行。我习惯在代码里加一个定时打印,每 100ms 输出一次 RSSI 值。
// 以 TI CC2530 为例
uint8 rssi_value;
rssi_value = halRssi(); // 读取 RSSI 寄存器
printf("RSSI: %d dBm\n", (int8)rssi_value - 0x80);
我的小技巧
别只看瞬时值。我一般取 10 次平均值,再画成曲线。这样能看出信号波动规律,比单个数值有用得多。
4.2 LQI:链路质量指示
RSSI 只看“力气”,LQI 看“质量”。
概念
LQI 衡量的是接收到的数据包“干净程度”。它跟误码率直接相关。不同芯片的 LQI 范围不一样,有的 0~255,有的 0~100。你得先看数据手册。
我记得有一次,RSSI 显示 -60 dBm,信号挺强,但通信就是卡。一查 LQI,只有 30(满值 255)。原来是附近有台微波炉在干扰。RSSI 骗了你,LQI 说了实话。
测量方法
LQI 通常在接收数据包时附带。你从接收结构体里取就行。
// 以 Nordic nRF24L01 为例
uint8 lqi_value;
lqi_value = nrf_read_register(RPD); // 读取 LQI 相关寄存器
printf("LQI: %d\n", lqi_value);
注意
LQI 和 RSSI 不是线性关系。RSSI 强不代表 LQI 好。干扰源多的时候,LQI 会先恶化。我建议你把两个指标一起看,别只看一个。
4.3 SNR:信噪比
SNR 是“信号”和“噪声”的比值。它告诉你,信号有没有被噪声淹没。
概念
SNR 的单位也是 dB。数值越高,信号越清晰。一般 SNR > 20 dB 就算不错,低于 10 dB 就容易出问题。
你想想看,在嘈杂的酒吧里跟人说话,你得提高音量。无线通信也一样。噪声大了,信号就得更强,否则就听不清。
测量方法
SNR 不能直接读寄存器。你得自己算:
SNR (dB) = RSSI (dBm) - 底噪 (dBm)
底噪怎么测?我一般在不发送数据的时候,读 RSSI 值。那个值就是当前环境的底噪。
我的做法
在系统启动时,先花 1 秒钟测底噪。取 20 次 RSSI 的平均值,作为底噪基准。然后实时计算 SNR。这样能自动适应不同环境。
4.4 三个指标的关系与对比
这三个指标不是孤立的。它们从不同角度描述链路质量。
| 指标 | 含义 | 单位 | 谁影响它 | 典型范围 |
|---|---|---|---|---|
| RSSI | 信号强度 | dBm | 距离、遮挡、天线 | -30 ~ -100 |
| LQI | 链路质量 | 无单位 | 干扰、多径、调制方式 | 0 ~ 255 |
| SNR | 信噪比 | dB | 噪声源、发射功率 | 0 ~ 40 |
我个人的判断逻辑是这样的:
- RSSI 高 + LQI 高 + SNR 高:链路完美,放心用。
- RSSI 高 + LQI 低 + SNR 低:有干扰源,查环境。
- RSSI 低 + LQI 低 + SNR 低:距离太远或天线问题。
- RSSI 低 + LQI 高 + SNR 高:少见,可能是数据率低但信号干净。
4.5 知识结构图
下面这张图,帮你理清三个指标的关系和测量流程。
4.6 实战中的避坑指南
最后,分享几个我踩过的坑。
我曾经...
只盯着 RSSI 看,觉得 -60 dBm 没问题。结果设备一移动就断连。后来发现是天线方向性导致信号波动。从那以后,我每次测试都让设备转一圈,记录不同角度的 RSSI。
我的建议
做信号测试时,别只看一个点。拿个小板子,把设备放在不同位置、不同高度、不同角度,各测 30 秒。数据多了,规律自然就出来了。