在众多指纹定位算法中,KNN 和 WKNN 是最常见的,但今天我们来聊一个“升级版”的算法 —— SE-WKNN(Spearman Enhanced WKNN)。
WKNN 是怎么定位的?(之前的博客提到过,想详细看的同学可以去主页找找)
简单来讲,普通的 WKNN(加权 K 最近邻)这么做:
-
测量你的 RSSI 向量
-
计算你和每个参考点之间的“欧氏距离”,越近说明越像
-
选出最近的 K 个参考点
-
根据距离加权平均他们的位置坐标,作为你的预测位置
看起来合理,但WKNN 只关心信号强度的“差值”,它没考虑一个问题:
如果两组信号的强弱顺序一样,只是整体偏高或偏低,它们其实也可能来自同一个位置。
SE-WKNN 是怎么改进的?
它引入了一个概念:RSSI 信号的结构相似性
我们不仅看你和参考点之间 RSSI 差了多少,还要看你们的 强弱顺序是否一致。
这就用到了一个统计学工具:斯皮尔曼相关系数(Spearman Correlation)。
什么是斯皮尔曼相关系数?
简单理解:
-
如果你的信号强弱排序是:
A > B > C
而参考点的排序也是:
A > B > C
→ 说明非常像 → 斯皮尔曼相关 ≈ 1
-
如果你的是:
C > B > A
→ 顺序完全反了 → 斯皮尔曼相关 ≈ -1
它就像一个“信号形状相似度”打分器。
SE-WKNN 的工作流程
我们用一句话总结它:
SE-WKNN = 欧氏距离 × 信号结构差异权重
💡 具体流程:
-
对每个参考点:
-
计算它与你的 RSSI 欧氏距离 d
-
计算你们的斯皮尔曼相关 ρ
-
-
融合得分:
-
计算加权因子 S=3−ρ,相关越高,S 越小
-
计算融合距离:dfused=d×S
-
-
选出 K 个融合距离最小的参考点
-
根据这些参考点的位置,用加权平均预测当前位置
✅ 举个例子
信标 | 你测的 RSSI | 参考点 RSSI | 排名(你) | 排名(参考) |
---|---|---|---|---|
A | -70 | -68 | 1 | 1 |
B | -75 | -77 | 2 | 2 |
C | -80 | -82 | 3 | 3 |
虽然绝对值有偏差,但信号排序结构一致 → 斯皮尔曼相关高 → 算法认为“你俩模式很像” → 位置可能就很接近。
🆚 与其他算法对比
算法 | 思想 | 特点 |
---|---|---|
ED-WKNN | 欧氏距离加权 | 简单、直接 |
MD-WKNN | 曼哈顿距离加权 | 抗部分异常能力好 |
SE-WKNN | 融合距离 × 信号结构 | 模式识别更强,抗偏移能力更好 |
🧪 什么时候 SE-WKNN 表现好?
-
指纹库采得比较规范、信号稳定时,SE-WKNN 优势很明显
-
测试点 RSSI 可能整体偏高或偏低,但信号强弱关系没乱
-
尤其适合信标布局密集、信号维度多的环境
❗注意:它不一定“万能”
-
如果信号波动太大、丢失严重,排名结构不稳定,斯皮尔曼就不太靠谱
-
算法稍复杂,速度上比 ED-WKNN 略慢,但大多数情况仍在秒级
另外,SE-WKNN 对 K非常敏感!
🔍 为什么 SE-WKNN 对 K 更敏感?
🎯 原因 1:融合距离“排序性强”,加入次优点会干扰定位
-
SE-WKNN 的“融合距离” = 欧氏距离 × 排名相关因子(3 - ρ)
-
一旦 K 设置太大,会包含一些排序不太相关、但“数值接近”的参考点;
-
它们的 Spearman 相关性不好,就会拉低整体定位结果(因为加权平均了这些偏差点);
✅ 所以:SE-WKNN 更适合选一个“小而精”的 K 值(比如 3~5)
❌ 过大的 K 值可能引入“误导点”,让最终预测位置偏离真实位置。
🎯 原因 2:排序相关性不是线性分布的,容易“极化”
-
Spearman 本身是非线性指标,它对“排序错误一两个”就很敏感;
-
当你多选一些参考点,Spearman 低的点就会让“融合距离”急剧放大;
-
最终加权时,这些点几乎等于 权重趋近于 0,等于白算了。
✅ 这让 SE-WKNN 在小 K 值下已经能达到相对较高精度,再加点反而没啥提升甚至可能拖后腿。
📌 对比其他算法的敏感度
算法 | 对 K 的敏感度 | 原因 |
---|---|---|
ED-WKNN | 中等偏弱 | 欧氏距离线性,K 越大越平滑 |
MD-WKNN | 中等偏弱 | 曼哈顿距离更稳健,但依赖密集指纹库 |
SE-WKNN | ✅敏感 | 融合排序+距离,K 大可能引入低相关参考点 |
RS-WKNN | ❌不敏感 | 多次采样平均抵消了个别点误差,对 K 鲁棒性强 |