对于一个项目工作,我需要测量音量水平从录制的音频文件或在实时录制使用麦克风。经过初步研究,我尝试使用声音文件库。使用soundfile读取该文件,并使用20*np.log10(np.sqrt(np.mean(np.absolute(a)**2)))计算了dB值。声音文件的值为负值。但正常的声音可能在50-70分贝的范围内,我得到的是负值。有人能帮我解决这个问题吗?
20*np.log10(np.sqrt(np.mean(np.absolute(a)**2)))
8yoxcaq71#
简短的回答是:db和db不一样。你的结果可能是正确的。长篇解答:数据库级别总是定义与某些参考值的关系。对于音频/声学,有许多参考值,您需要指定使用哪个参考值才能使以分贝为单位的值有意义。然后将DB值计算为
(假设它是根电力量,则电气量的系数是10,而不是20)。需要注意的重要一点是,除以参考值将按预期删除单位。所以,当你说正常声音可能在50-70分贝的范围内这不是一个准确的说法,你的意思可能是正常声音可能在50-70分贝SPL范围内其中,您给出的值相对于参考声压级20微帕。在数字系统中,声音文件通常由浮点数< 1表示,然后我们使用参考值1(无单位)来表示dB FS (dB full scale)。根据数学定律,dBFS值为负值。同样清楚的是,您不能将分贝FS值与分贝SPL值直接关联:如果您播放相同的音频文件(即取一些分贝FS值)并播放两次,但打开扬声器的音量旋钮,将导致两个不同的值分贝SPL(您听到的)。
< 1
kh212irz2#
您需要添加声音参考,即20log10(P rms_value/P ref)+120 dB才能获得dB范围内的数据,可以从输入模块调整Pref
log10(P rms_value/P ref)+120 dB
dB
2条答案
按热度按时间8yoxcaq71#
简短的回答是:db和db不一样。你的结果可能是正确的。
长篇解答:数据库级别总是定义与某些参考值的关系。对于音频/声学,有许多参考值,您需要指定使用哪个参考值才能使以分贝为单位的值有意义。然后将DB值计算为
(假设它是根电力量,则电气量的系数是10,而不是20)。需要注意的重要一点是,除以参考值将按预期删除单位。
所以,当你说
正常声音可能在50-70分贝的范围内
这不是一个准确的说法,你的意思可能是
正常声音可能在50-70分贝SPL范围内
其中,您给出的值相对于参考声压级20微帕。
在数字系统中,声音文件通常由浮点数
< 1
表示,然后我们使用参考值1(无单位)来表示dB FS (dB full scale)。根据数学定律,dBFS值为负值。同样清楚的是,您不能将分贝FS值与分贝SPL值直接关联:如果您播放相同的音频文件(即取一些分贝FS值)并播放两次,但打开扬声器的音量旋钮,将导致两个不同的值分贝SPL(您听到的)。
kh212irz2#
您需要添加声音参考,即20
log10(P rms_value/P ref)+120 dB
才能获得dB
范围内的数据,可以从输入模块调整Pref