使用
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));
使用
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));
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 ,但负值没有意义。