如何将Wifi信号强度从质量(百分比)转换为RSSI(dBm)?

Irv*_*ing 25 wifi

如何将Wifi信号强度从质量百分比(通常为0%到100%)转换为RSSI值,通常为负dBm数(即-96db)?

Dav*_*arl 60

Wifi信号强度百分比RSSI dBm

Microsoft在其WLAN_ASSOCIATION_ATTRIBUTES结构中定义了Wifi信号质量,如下所示:

wlanSignalQuality:

表示网络信号质量的百分比值.WLAN_SIGNAL_QUALITY的类型为ULONG.该成员包含0到100之间的值.值0表示实际RSSI信号强度为-100 dbm.值100意味着实际RSSI信号强度为-50dbm.您可以使用线性插值计算wlanSignalQuality值在1到99之间的RSSI信号强度值.

RSSI(或" 无线电(接收)信号强度指示器 ")以"dB"(分贝)或类似的"dBm"(dB/cmw)为单位(参见dB与dBm),其中较小的负数具有最高的信号强度或质量.


因此,quality(百分比)之间的转换dBm如下:

    quality = 2 * (dBm + 100)  where dBm: [-100 to -50]

    dBm = (quality / 2) - 100  where quality: [0 to 100]
Run Code Online (Sandbox Code Playgroud)

伪代码(带示例钳位):

    // dBm to Quality:
    if(dBm <= -100)
        quality = 0;
    else if(dBm >= -50)
        quality = 100;
    else
        quality = 2 * (dBm + 100);

    // Quality to dBm:
    if(quality <= 0)
        dBm = -100;
    else if(quality >= 100)
        dBm = -50;
    else
        dBm = (quality / 2) - 100;
Run Code Online (Sandbox Code Playgroud)

注意:

Quality仔细检查您用于计算的定义.还要检查dB(或dBm)的范围.限制可能会有所不同.

示例:

Medium quality:   50%      ->   -75dBm   = (50 / 2) - 100
Low quality:      -96dBm   ->   8%       = 2 * (-96 + 100)
Run Code Online (Sandbox Code Playgroud)


小智 12

在JS中我喜欢做类似的事情:

Math.min(Math.max(2 * (x + 100), 0), 100)

我个人认为,写它是更优雅的方式,而不是使用if's.


小智 5

根据经验:

  1. 小于-50dB(-40,-30和-20)=信号强度的100%
  2. 从-51到-55dB = 90%
  3. 从-56到-62dB = 80%
  4. 从-63到-65dB = 75%

    以下内容不足以支持Apple设备

  5. 从-66到68dB = 70%
  6. 从-69到74dB = 60%
  7. 从-75到79dB = 50%
  8. 从-80到-83dB = 30%
    Windows笔记本电脑可以在-80dB上正常工作,但是速度较慢

  • 你是如何得到这个值的? (5认同)

Som*_*ter 5

我很高兴找到这个帖子,因为我正在寻找一种将dbm转换为百分比的方法。在David的帖子中,我用python编写了一个快速脚本来计算质量百分比。

#!/usr/bin/env python3
import os
import platform

system = platform.system()
if system == 'Linux':
    cmd = "iwconfig wlan0 | grep Signal | /usr/bin/awk '{print $4}' | /usr/bin/cut -d'=' -f2"
elif system == 'Darwin':
    cmd = "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep CtlRSSI | awk '{ print $NF; }"
else:
    print("Unsupported os: {}".format(system))

dbm = os.popen(cmd).read()
if dbm:
    dbm_num = int(dbm)
    quality = 2 * (dbm_num + 100)
    print("{0} dbm_num = {1}%".format(dbm_num, quality))
else:
    print("Wifi router connection signal strength not found")
Run Code Online (Sandbox Code Playgroud)

为了从计算机所在的位置获得最高的wifi质量,我移动/旋转了天线,直到获得最高质量。为了查看实时质量,我使用以下命令运行了上述脚本:

watch -n0.1 "python getwifiquality.py"
Run Code Online (Sandbox Code Playgroud)