根据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
任何人都可以帮我找出可以用百分比显示信号强度的比例。
答案 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页