如何将-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)); 解决了这个问题

如何将-1.0到+1.0之间的浮子转换为dB(a)的声压

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,但负值是没有意义的。