4

根据 getGsmSignalStrength() 对应的 dBm 值,刻度看起来是线性的。(请参阅此处的dBm 值)。但我观察到,在几乎所有应用程序中,这个比例都不能用作线性比例。

例如考虑 Android 的 src StatusBarPolicy::updateSignalStrength

signal strength = 0 or 99 -> no signal
signal strength >= 12 -> very good signal
signal strength >= 8 -> good signal
signal strength >= 5 -> poor signal
signal strength <5 -> very poor signal

谁能帮我找出我可以用百分比显示信号强度的比例。

4

2 回答 2

5

从您提供的链接:

0 -113 dBm 或更低
1 -111 dBm
2...30 -109... -53 dBm
31 -51 dBm 或更高

99 未知或不可检测

这意味着您有一个范围或 -113 到 -51 或 -62dBm。要将其转换为百分比,您可以取您收到的值 (0-31,99),计算出对应的 dBm 是多少,然后找到与 -113 的差值并除以 62。

例如,0=-113dBm。与 -113 = 0 的差异。0/62 = 0%。1=-111dBm。与 -113 的差异 = 2. 2/62 ~ 3%。30=-53dBm。与 -113 = 60 的差异。60/62 ~97%。

您需要的唯一特殊情况是 99,它应该像 0 一样处理。

于 2011-10-16T13:03:43.820 回答
1

信号强度值以 dBm 表示。这意味着它是对数刻度。允许表示非常大和非常小的值是对数的。对数刻度意味着: 功率增加 100W 将获得 20dBm;但是将功率增加 1000W 不会给你 200dBm 而是 30dBm。如果您将对数刻度转换为线性刻度,您将失去表示广泛值的能力。但如果你想这样做,这里有一个算法:

    final double pMax = Math.pow(10d, 31/10d);
    if (gsmSignalStrength == 99) {
        return -1;
    }
    double r = Math.pow(10d, gsmSignalStrength/10d) / pMax; // value <0,1>
    return (float) r;

参考文档:https ://www.etsi.org/deliver/etsi_ts/127000_127099/127007/08.05.00_60/ts_127007v080500p.pdf第82页

于 2018-12-19T02:47:33.167 回答