2016-06-08 71 views
0

我可以使用soundmeter來測量「聲音碎片的均方根(RMS)」。現在我想以某種方式從這個值獲得分貝dB測量值。使用測量儀器測量分貝(dB)

AFAICT式是這樣的:

dB = 20 * log(RMS * P, 10) 

其中log是基座10,和P是一些未知值功率,其(從AFAICT https://en.wikipedia.org/wiki/Decibel)取決於所使用的麥克風。

現在,如果我用一個聲音級別的應用程序在我的iPhone我看到房間裏的平均噪音68分貝,而我從soundmeter --collect --seconds 10接收測量:

收集RMS值... 149超時統計結果: 分:97 最大:149 平均:126

有什麼事同此理?以及如何確定P的使用價值而不計算它(我很想去做,而且似乎有效)。我假設我必須在某些規格頁面上在線查看它,但這似乎相當困難,並且使用osx我不確定現在要弄清楚P的價值。此外,這似乎取決於osx的麥克風音量級別設置。

回答

2

soundmeter沒有返回通常預期的單位的RMS,這將被校準,使得滿量程數字正弦波爲1.0,靜音爲0.0。

我發現這些代碼段:

https://github.com/shichao-an/soundmeter/blob/master/soundmeter/meter.py

data = self.output.getvalue() 
segment = pydub.AudioSegment(data) 
rms = segment.rms 

這就要求https://github.com/jiaaro/pydub/blob/master/pydub/audio_segment.py

def rms(self): 
    if self.sample_width == 1: 
     return self.set_sample_width(2).rms 
    else: 
     return audioop.rms(self._data, self.sample_width) 

功能立即下面你可以看到,數據由最高採樣分價值給予所需的規模。我認爲ratio_to_db20*log10(x)

def dBFS(self): 
    rms = self.rms 
    if not rms: 
     return -float("infinity") 
    return ratio_to_db(self.rms/self.max_possible_amplitude) 

在您的特定情況下,你需要採取的收集RMS級別由2^N分,其中N是每個樣本的位數來獲得RMS水平縮放,然後轉換爲分貝。這個數字相對於數字滿量程將是dBFS或分貝,並且將在+0和-inf之間。要獲得積極的dBSPL值,您需要找到麥克風的靈敏度。您可以通過查看規格或根據已知的參考進行校準。如果你想信任你的iPhone上的應用程序,它報告房間噪音爲68 dBSPL,而你的程序爲-40 dBFS,那麼你可以做簡單的算術轉換,只需將兩個(108)的差值加到你的dBFS數字得到。