从RSSI到CSI:解锁Wi-Fi感知的下一站革命
在智能家居和健康监测领域,我们常常需要精确感知人体活动——从简单的存在检测到复杂的跌倒预警。传统方案依赖摄像头或穿戴设备,但前者涉及隐私问题,后者需要用户配合。于是,利用现有Wi-Fi信号进行"无感监测"的技术应运而生。大多数开发者首先接触的是RSSI(接收信号强度指示),它简单易用但精度有限——就像用温度计测量体温,只能告诉你"发烧与否",却无法定位具体病灶。而CSI(信道状态信息)则如同CT扫描,能捕捉无线信道中更细微的变化。想象一下:当老人不慎跌倒时,路由器不仅能检测到异常,还能通过分析信号反射模式判断跌倒方向和姿势——这正是CSI赋予我们的超能力。
1. 为什么RSSI不够用?多径环境下的感知困局
RSSI作为MAC层指标,本质上是将所有传播路径的信号强度简单相加。在理想的自由空间传播中,RSSI与距离的平方成反比,这使其在空旷环境中的定位精度可达米级。但现实中的室内环境充满墙壁、家具等障碍物,信号会通过反射、衍射等多种路径到达接收端。研究表明,在典型客厅环境中:
- 2.4GHz Wi-Fi信号遇到墙面时约有3-5dB的反射损耗
- 木质家具会导致信号衰减约2-3dB
- 人体站立时的阴影效应可能引起4-8dB的波动
这种多径效应使得RSSI与距离的关系变得非线性。我们曾在一间15平米的卧室进行测试:将手机固定在距路由器1米处,RSSI值在5分钟内波动范围达7dB,相当于理论距离变化±2米。更关键的是,RSSI无法区分以下场景:
| 场景 | RSSI表现 | 实际物理变化 |
|---|---|---|
| 人体远离路由器 | 强度减弱 | 直射路径增长 |
| 人体靠近反射表面 | 强度可能增强 | 反射路径缩短 |
| 静态环境温度变化 | 随机波动 | 无实际物体移动 |
python复制# RSSI测距的典型代码实现
def rssi_to_distance(rssi, tx_power, n=2.0):
