This question already has answers here:
How can I calculate audio dB level?
(7个答案)
4年前关闭。
使用
我得到一个float数组
编辑:我使用
(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