其他分享
首页 > 其他分享> > 以百分比显示Android的getGsmSignalStrength()值

以百分比显示Android的getGsmSignalStrength()值

作者:互联网

根据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

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

解决方法:

信号强度的值以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页

标签:android,gsm,signal-strength
来源: https://codeday.me/bug/20190621/1252811.html