2012-12-18 82 views
0

如何將WiFi等級(即-45,-88)轉換爲百分比?如何將WiFi等級(即-45,-88)轉換爲百分比?

我想轉換WiFi等級的百分比。我得到使用水平(DBM格式)的WiFi水平

我嘗試很多谷歌,但沒有得到應有的ANS

+0

afaik這個值沒有下限。 0dB應該是100%。你將任意設定一個下限。此外,dB是使用20 * log10(abs(x)) – ErikTJ

+0

計算的。也許這個鏈接將解釋一些東西http://www.sengpielaudio.com/calculator-thd.htm。這些值-45是分貝值http://en.wikipedia.org/wiki/Decibel – CodingBarfield

+0

0dB與任何正常水平相差甚遠。實際上,0dB非常差(削波等) –

回答

3

問題的這是非常依賴於接收天線。有些天線在-90 dBm處記錄不到可用信號,有些已經在-80處記錄。你將很難找到0%(100%嚴格爲0dBm)。

我創造,我用-100dBm爲0%和0dBm的100%上Wi-Fi掃描儀應用程序,在Java中它變成像這樣(MIN_DBM爲-100):

public int getPowerPercentage(int power) { 
    int i = 0; 
    if (power <= MIN_DBM) { 
      i = 0; 
    } else { 
      i = 100 + power; 
    } 

    return i; 
} 
+0

你可以給我你的應用程序的鏈接? –

+1

掃描儀是應用程序的一部分,但這裏是鏈接:https://play.google.com/store/apps/details?id=nl.piranhastuff.snog&hl=nl –

+1

我認爲功能有問題。即現在我得到-48 wifi的水平。那麼我得到52%。這是不對的。 –

0

你可以派生如果信息可用,則從信噪比的百分比而不是單獨的信號強度。這可能是所需的指標。

android.net.wifi.ScanResult未發佈必要的信息(截至2012年12月),但您可能可以通過其他方式獲取此信息。

Signal = Noise =>不可用信號,所以您可以設置0dB SnR = 0%。你也可以設置10dB的SnR到90%(90%的信號功率沒有被淹沒在噪聲中),100%=完全沒有噪聲。更一般地,

p = 100% * (1 - 10^(SnR/(10dB))) 
+0

請問如何在java(android)中實現? –

+0

@NiravRanpara我不知道如何從Android API獲取SnR(我假設你已經知道這一點)。關於數學,請看['Math.pow'](http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#pow(double,%20double)) –

+0

@對於其他實現細節,NiravRanpara將'100%'替換爲'100'用於顯示目的,或者爲了進一步計算而不用乘法,並且如果輸入已經以dB爲單位,則用'10'代替'10dB'。 –

1

的WifiManager類有一個功能calculateSignalLevel,但它指出here,它導致一個錯誤,如果numLevels是大於45的可能的解決方法可能是這樣的:

double percentage = WifiManager.calculateSignalLevel(int rssi, 40) * 2.5; 

但當然,這將在2.5%的步驟 - 我不知道你的用例,但也許這是足夠的。

正如其他人所說,計算百分比是有問題的,並且沒有簡單的精確解決方案。

1

這是微軟做什麼dBm的<>轉化率: https://stackoverflow.com/a/15798024/2096041

基本上-50 .. 0 dBm地圖線性關係100 .. 0 %。 像MS一樣,我寧願坐在安全的一邊,不要使用-100作爲100%,因爲這裏的一些答案建議。