This question already has answers here:
How can I calculate audio dB level?

(7个答案)


4年前关闭。




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

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

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

最佳答案

dBA标度是相对气压的量度。

在这种情况下,我们谈论的是一种音频再现系统,该系统在其输入处采样,并具有导致声压波的某种类型的设备。

假设系统为linear system,则整个系统将只有一个增益值,并且取决于电气和物理设计特性。
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也恰好是一个频率加权标度,因此您需要将here描述的滤波器应用于样本以获得真正准确的值。

关于c# - 如何将介于-1.0和+1.0之间的浮点转换为声压的dB(A)? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33814394/

10-10 07:22