如何将-1.0到+1.0之间的浮子转换为dB(a)的声压
本文关键字:dB 转换 之间 | 更新日期: 2023-09-27 18:22:39
使用
WaveFileReader wfr = new WaveFileReader(file);
float[] d = wfr.ReadNextSampleFrame();
我得到一个浮点数组d
。当使用foreach (float s in d)
迭代d
时,我会得到介于-1.0和+1.0之间的浮点值。如何将它们转换为dB(A)的声压?
编辑:我使用double db = 20 * Math.Log10(Math.Abs(s));
解决了这个问题
dBA标度是相对空气压力的度量。
在这种情况下,我们谈论的是一种音频再现系统,该系统在其输入端采集样本,并具有产生声压波的某种类型的设备。
假设系统是线性系统,整个系统将有一个单一的增益值,这将取决于电气和物理设计特性。
Output = Gain * input
为了计算任何给定输入的声压值,您需要进行实验来测量给定输入值下系统的输出压力。
考虑到采样值变成DAC输出端的输出电压,并且系统的输出功率与声压成比例:
(1) V=IR
和(2) P = IV
,经过一点重排,我们发现P=V*V/R
因此,功率随电压(或采样值)的平方而变化。
分贝值是一种相对测量:
Sdb = 10*log10(S/Sref)
其中Sref
为参考测量点。
由于我们在输入和输出之间有一个功率关系,我们得到
Sdb = 10*log10(S*S/Sref) == 20*log10(S/Sref)
现在,dBA恰好也是一个频率加权标度,因此您需要将此处描述的滤波器应用于样本,以获得真正准确的值。
对于全静音(深空或全真空),声压级可能为0,但负值是没有意义的。