-1

使用

WaveFileReader wfr = new WaveFileReader(file); 
float[] d = wfr.ReadNextSampleFrame();

我得到一个浮点数组d。迭代d使用时,foreach (float s in d)我得到-1.0和+1.0之间的浮点数。如何将它们转换为声压的 dB(A)?

编辑:我解决了它使用double db = 20 * Math.Log10(Math.Abs(s));

4

2 回答 2

1

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 也恰好是频率加权标度,因此您需要将此处描述的滤波器应用于样本以获得真正准确的值。

于 2015-11-19T21:43:52.893 回答
-1

对此没有答案。

对于完全静音(深空或完全真空),声压级可能为 0 ,但负值没有意义。

于 2015-11-19T21:42:55.753 回答