How to convert a float between -1.0 and +1.0 to dB(A) of sound pressure? [duplicate]

纵然是瞬间 提交于 2019-12-13 08:59:37

问题


Using

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

I get a float array d. When iterating through d using foreach (float s in d) I get floats between -1.0 and +1.0. How do I convert them to dB(A) of sound pressure?

EDIT: I solved it using double db = 20 * Math.Log10(Math.Abs(s));


回答1:


The dBA scale is a measure of relative air-pressure.

In this context, we are talking about an audio reproduction system that takes samples at its input and has some type of apparatus that results in sound pressure waves.

Assuming the system is a linear system, there will be a single value of gain for the whole system, and it will depend on electrical and physical design characteristics.

Output = Gain * input

In order to compute a sound pressure value for any given input you will need to conduct an experiment to measure the output pressure of the system, for a given value of Input.

Considering that a sample-value becomes an output voltage at the output of a DAC, and that the output power of the system is proportional to the sound pressure:

(1) V=IR and (2) P = IV, with a little rearrangement we find that P=V*V/R

Therefore Power varies with the square of voltage (or the sample value).

A decibel value is a relative measurement:

Sdb = 10*log10(S/Sref)

Where Sref the reference measurement point.

Since we have a power relationship between input and output, we get

Sdb = 10*log10(S*S/Sref) == 20*log10(S/Sref)

Now, dBA also happens to be a frequency weighted scale, so you will need to apply the filter described here to the samples for truly accurate values.




回答2:


There is no answer to this.

Sound pressure level may be 0 for the total silence (deep space or total vacuum), but a negative value just doesn't make sense.



来源:https://stackoverflow.com/questions/33814394/how-to-convert-a-float-between-1-0-and-1-0-to-dba-of-sound-pressure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!