所以我已经为这个问题苦苦挣扎了一段时间:
我有一个带有 wifi 传感器的树莓派,我需要它们来获取不同 AP 传输的 wifi-direct 信号的 RSSI(基本上是信号强度)。
由于这些将用于获取距离测量值(圆周率和 AP 之间),因此我需要在一秒内以高频率获取它们(或者,理想情况下,我想要 100 毫秒或一秒内的 RSSI 平均值)。
我知道我可以使用 wpa_supplicant 的 p2p 函数获取 RSSI,但频率约为 6-12 次测量/秒,方差相当高。有谁知道任何其他可以提供帮助的工具/方法?如果 wpa_supplicant 提供“平均度量”,那就太好了。
注意:我并不完全理解如何计算距离/角度背后的数学/科学,因为我只负责在实施方面取得领先。这些值可能已经足够好了。我可能在概念上遗漏了一些东西。如果是这样,请告诉我:)。
答案1
不要使用wpa_supplicant
,降低一级。我刚刚尝试过
while true ; do date -Ins ; /sbin/iw wlan0 station dump | grep signal ; done
在我的桌面上,每秒可以进行超过 100 次测量,并且方差不是特别高。
所以我想如果你 grep forsignal avg
而不是signal
每秒一次,你应该没问题。尽管由于处理能力较低,它在 RaspPi 上看起来可能有所不同。
请注意,这些值是通过驱动程序内部的黑魔法计算出来的,因硬件和驱动程序而异,并且只能用作粗略指示,并且不要假设这些值与距离呈线性关系。
因此,您需要进行大量测量才能准确地查明来源。
至于数学,您应该假设一个单调函数将信号强度映射到距离,反之亦然,也许可以做出一些假设这个函数的样子(例如二次/三次,也许首先做一些测量),得出给定的一些误差值源坐标,并寻找使误差最小化的坐标。
如果您碰巧为此创建了一个开源项目,我有兴趣查看一个链接。 :-)
答案2
您可以通过以下方式获取每秒的信号强度:
watch -n 1 cat /proc/net/wireless
或者:
watch -n '0.1' "iw wlan0 scan | grep 'SSID\|signal'"
wavemon
安装后的命令wavemon
包裹
Wavemon 是一款无线设备监控应用程序,可让您观察无线网络硬件的信号和噪声水平、数据包统计数据、设备配置和网络参数。它应该可以与 Linux 内核支持的所有设备一起工作(尽管功能有所不同)。
您也可以bmon
在安装后使用命令[bmon
]3
它可以通过以下方式安装:apt-get install bmon
bmon
是一种监视和调试工具,用于捕获网络相关统计数据并以人性化的方式直观地准备它们。它具有多种输出方法,包括交互式诅咒用户界面和用于脚本编写的可编程文本输出。
命令wpa_cli
:
watch -n 1 "wpa_cli signal"