显示Android获取Gsm信号强度()值的百分比

时间:2011-10-16 02:45:27

标签: android gsm signal-strength

根据getGsmSignalStrength()的相应dBm值,比例似乎是线性的。 (参见dBm值here)。 但我观察到,在几乎所有应用中,这个比例都没有用作线性比例。

例如,考虑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

任何人都可以帮我找出可以用百分比显示信号强度的比例。

2 个答案:

答案 0 :(得分: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一样处理。

答案 1 :(得分: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页