What additional inputs are required to convert dBFS to dB SPL?

It is probably very well known that dBFS cannot be directly converted to dB SPL without knowing other information such as the technical specifications of the microphone.

The questions are:

1. What is missing for the conversion?
2. What is the formula?

What I now have in hand:

1. A dBFS value: -12 dBFS (just for example);
2. Microphone Frequency Response: 18-20,000Hz, ±0.5dB (calibrated)
3. Microphone Impedance: 200 ohms
4. Microphone Sensitivity at 1kHz into 1kohm: 10 mV/PA (-40 dBV, ref. 0dB=1V/PA)
5. Microphone Maximum SPL for 1% THD @ 1k: 127dB
6. Microphone S/N ratio: 70 dB (A-Weighted, varies depending on host device)
7. A microphone calibration file provided by the manufacturer which contains calibrated decibel offset values at a range of frequencies.
8. Distance between the microphone and the source of sound: 100 cm.

The conversion does not have to be as precise as rocket science, so minor factors can be treated as none, zero or commonly seen.

Thanks!

• As the OP I explain a bit the background: I am working on an application to measure the sound levels of some vibrating objects at a range of frequencies, and analyze the patterns of such vibration. The vibration is a result of combined factors such as machanical movements, eletro-magnetic oscillation and so on. The goal is to identify unwanted vibration if any, and find out the root cause. Professional measuring instrument mostly fails to meet all four criteria: portablity, visualization, computation and Internet. Smart phone with a decent external microphone might be a candidate. Commented Apr 16, 2023 at 5:07

Intro

As already stated in another answer, this is not an easy task to perform when your setup is complex (comprised of many discrete apparatus pieces), as each piece must be included in the process, which in turn means that it has to be (adequately) characterised.

Introduction

The actual process is to try and include the effect of each equipment piece in the calculation. In the simplest case, where everything is linear and the frequency response of all the equipment parts is flat (not necessarily identical from piece to piece though) all you have to do is to include the gain (either positive or negative) of each piece in the signal chain in the calculation.

The possible exception is the Analogue-to-Digital Converter (ADC) where supposedly there's no gain stage here, just conversion, but here you should know the maximum instantaneous pressure to be quantised (coded may be a better term here).

Solution

In the linear scale gain is applied with multiplication while in the logarithmic scale (dB) with addition (attenuation is through addition with negative gain).

I will try to provide an example where at each step we'll calculate the sound pressure (won't convert to dB since this is quite easy to do if you have the linear value for the pressure) to see how it is related to each step we take towards reaching the dBFS value. I will try to use some of the values you have provided above.

1. Microphone output (sensitivity)

So the first step would be to measure the voltage at the output of your microphone for the reception of a sound. Using a convenient yet random number for that let's assume the output of your microphone would be $$8 ~ mV$$. Using the sensitivity value you provided ($$10 ~ mV/Pa$$) we calculate the ratio of the measured value to the reference (sensitivity) to be

$$\frac{8 ~ mV/Pa}{10 ~ mV/Pa} = 0.8$$

Since the measured voltage is $$0.8$$ times that of the reference sensitivity, the pressure must be $$0.8$$ times that used to get the sensitivity. The latter is $$1 ~ Pa$$, so the measured pressure is $$0.8 ~ Pa$$.

So far all we did was to divide the measured value by the sensitivity value. This allows to calculate the measured pressure by direct comparison of the voltages, since one of the latter is for known pressure (actually all you do is use the rule of three). The general formula for this step is

$$p = \frac{V_{mic}}{S} \tag{1} \label{sensitivity}$$

where $$S$$ denotes the sensitivity value in $$\frac{V}{Pa}$$ and $$p$$ the pressure value in $$Pa$$.

Please note that we have assumed that the microphone is used in its linear region (no, or negligible non-linearities take place).

2. Pre-amplifier

Now, most microphones' output is very low to be used effectively in other equipment and a pre-amplification stage is introduced at their output. In the simplest case, this stage will provide a constant amplification. For our example we'll assume a gain of $$50$$ (note that this corresponds to a gain of roughly $$34 ~ dB$$ for voltage).

The voltage measured at the output of the pre-amplifier will be

$$V_{pre} = g_{pre} \cdot V_{mic} = 50 \cdot 8 ~ mV = 400 ~ mV$$

with $$g_{pre}$$ denoting the amplification. This is the voltage we'll measure if we are measuring at the output of the pre-amplifier. If we would like to calculate the pressure from this value we have to somehow "cancel" the amplification in our calculations. What we could very well do is from the above equation solve for $$V_{mic}$$ which is the output of the microphone before amplification and we can relate to pressure through the sensitivity value as we did above. Thus, we get

$$V_{pre} = g_{pre} \cdot V_{mic} \implies V_{mic} = \frac{V_{pre}}{g_{pre}} \implies V_{mic} = \frac{400}{50} ~ mV \implies V_{mic} = 8 ~ mV$$

which is indeed the output of our microphone. At this stage we can refer to the equation \eqref{sensitivity} to get the pressure value.

Incorporating equation \eqref{preamp-stage} into equation \eqref{sensitivity} to represent $$V_{mic}$$ we get for the "mic + pre-amp" system

$$p = \frac{V_{mic}}{S} \xrightarrow{V_{mic} = \frac{V_{pre}}{g_{pre}}} p = \frac{\frac{V_{pre}}{g_{pre}}}{S} \implies p = \frac{V_{pre}}{g_{pre} \cdot S} \tag{2} \label{preamp-stage}$$

One thing to note here is that so far we have used RMS values since sensitivity is defined for RMS value of the pressure and voltage.

This step is the most difficult one to implement in practice since the reference (maximum) value of your AD converter is usually not available/known. If we assume that you do know that then the process is described below. Additionally, for simplicity we'll assume that "generic" PCM coding is used for the conversion but the result is quite generic from a macroscopic point-of-view (assuming the ADC a black box that does its job correctly).

You know what the maximum value that can be represented in the digital domain is as well as the resolution (bit-depth) of your coding scheme. Without loss of generality we'll assume 16-bit resolution, which corresponds to $$65536$$ discrete amplitude values (and $$\sim 90 ~ dB$$ of dynamic range - although this is a plasmatic value and is very rarely achieved). Furthermore, we'll also assume that the maximum representable voltage is $$5 V_{p-p}$$ or $$2.5 V_{p}$$.

The amplitude step for the quantiser would be given by

$$q = \frac{5 ~ V}{65536} \approx 76.3 ~ \mu V \tag{3} \label{quantisation-step}$$

Using this value we can calculate the number of steps corresponding to the output voltage of the pre-amplifier since this is the value to be converted. In order to do that though, we first have to calculate the peak value of our signal. Assuming that our signal is a sinewave, to calculate its peak value from the RMS value we multiply by $$1.414$$ and get $$1.414 \cdot 400 ~ mV \approx 565.6 ~ mV$$. Thus, the peak value will be at the following quantisation level

$$N = \frac{V_{pre}}{q} \implies N = \lfloor \frac{565.6 ~ mV}{76.3 ~ \mu V} \rceil \implies N = 7413 \tag{4} \label{unilateral-steps}$$

where $$\lfloor ~ \cdot ~ \rceil$$ denotes the rounding function (returning the closest integer) which is used in order to place the value to the nearest quantisation level. Since we are dealing with a signal that has both positive and negative values, the middle value of the dynamic range will represent the $$0 ~ V$$. Thus, the value we found is valid but we have to keep in mind that it represents values above $$0 ~ V$$. The actual "double-sided" (both positive and negative values) quantisation level corresponding to this value would be $$N$$ plus half the available steps (which represent the negative values). This would be

$$N_{tot} = 2^{15} + 7413 = 40181 \tag{5} \label{bilateral-steps}$$

Now, since it is customary to express the value in dBFS we could convert our value to dBFS. We can use the original $$N$$ value we found and divide by half the quantisation levels since we are dealing with the positive values only. This would be

$$dB_{FS} = 10 \log_{10} \left( \frac{N}{2^{15}} \right) = 10 \log_{10} \left( \frac{7413}{32768} \right) \approx 10 \log_{10} \left( 2.26 \cdot 10^{-1} \right) \approx 10 \cdot \left( -6.45 \cdot 10^{-1} \right) \approx -6.45$$

So, in our system, a pressure sinewave with RMS value of $$0.8 ~ Pa$$ would result in $$\sim -6.45 ~ dB_{FS}$$. To be more exact, we can convert the dBFS value from peak to RMS. We can do that because our signal has a known crest factor equal to $$3 ~ dB$$, which we can subtract from the dBFS value to find the dBFS value of the RMS of our signal to be equal to $$-9.45 ~ dB_{FS}$$.

4. Distance from source

You stated that you know the distance from the source. It is not trivial to calculate the sound pressure level at the source with knowledge of the distance from the source and the sound pressure at that distance (assuming you got it from your measurement).

Most source models (at least those that I am aware of) are quite useful for calculating the pressure at various distances from the source assuming a specific radiation characteristics (spherical, cylindrical, etc.) but they all fail at the position of the source (the pressure "explodes"). Furthermore, the models use a far-field approximation which is not valid close to the source (due to evanescent waves).

Conclusion

As you may have already seen, it is definitely not trivial to convert a dBFS value to dBSPL. You have to have knowledge of all the pieces of equipment and their characteristics in order to be able to make the conversion. Not only that but you have to be able to make safe assumptions about the signal, or alternatively work entirely with peak (or peak-to-peak) values. You have to keep in mind though that dBSPL is defined for RMS pressure values and although you could easily use the $$20 ~ \mu Pa$$ reference value with peak pressure values, this is not entirely correct and will not correspond to SPL values (in the strict definition of the term).

Alternative solution

An alternative approach would be to calibrate your system yourself. This would require

1. A source of known characteristics that could produce a known sound pressure at the position of the microphone diaphragm. There are such sources termed calibrators used for this exact purpose. Usually a sinusoidal pressure signal is generated with frequency $$f = 1 ~ kHz$$ and RMS pressure amplitude of $$1 ~ Pa$$. The frequency of $$1 ~ kHz$$ is used so that the calibration will be valid irrespective of weighting filters (A, B, C or Z) since all of them have equal weighting (no weighting actually) at this frequency.
2. Constant gain at all stages that won't change after the calibration process.

The process is quite simple and could be easily done if you have the appropriate equipment.

You excite a pressure signal with known pressure at the diaphragm of the microphone. After setting the gains at all stages so that you are satisfied (and make sure to leave adequate headroom for loud sounds that you may be expecting) you record the signal. This recording will contain a signal that will correspond to a pressure sinewave of RMS amplitude of $$1 ~ Pa$$.

Subsequently, you will use that to compare it to all measurements you will perform. Of course, it doesn't make sense to compare instantaneous values since, even for sinewaves of the same frequency used to calibrate the system a simple phase offset could provide completely erroneous results. Comparing RMS values though is the right way to go. By calculating the RMS value of the recorded reference signal and comparing it to the RMS values of the next measurements you can get a (rather good) estimate of the RMS sound pressure level of the measured signals.

What you actually have to do is exactly what equation \eqref{sensitivity} shows. Albeit, now instead of the sensitivity value $$S$$ you will use the calibration signal RMS value. In this case, all equipment gain, and quantisation effects will be accounted for by the reference signal's RMS value (assuming you won't change any gain values) and direct comparison will be possible and feasible.

To conclude the answer let's do an example. Let's say you have the $$-12 ~ dB_{FS}$$ signal you mention. You also have a calibration recorded sound file whose RMS value is $$-18.5 ~ dB_{FS}$$. What would be the sound pressure level represented by the measured signal? In this case you won't have to even convert the signals to linear values. Since they are both in logarithmic scale you can directly say that your signal is $$6.5 ~ dB$$ louder than the reference. You do know that the reference signal corresponds to an SPL (RMS value) of $$94 ~ dB_{SPL}$$ ($$1 ~ Pa$$ corresponds to $$94 ~ dB_{SPL}$$, re $$20 ~ \mu Pa$$). Thus, your signal will correspond to $$94 + 6.5 = 100.5 ~ dB_{SPL}$$.

Important: Note that in this example, we assumed that the $$-12 ~ dB_{FS}$$ value corresponds to an RMS value converted to dB. In an alternative way you should convert both values to either peak or RMS.

• Fantastic answer! Had I asked that question, this is what I would have expected as an answer. Two comments: "to calculate its peak value from the RMS value we multiply by $1.414$ and get $1.414⋅40 mV≈56.6 mV$". Did you mean $400mV$ or did I miss something? "$dBFS=10\log_{10}(\frac{N}{2^{15}})=10\log_{10}(\frac{524}{32768})$" Did you mean $=10\log_{10}(\frac{742}{32768})$?
– Jdip
Commented Apr 14, 2023 at 18:32
• @Jdip thanks for the correction. I initially used different values and it seems that I didn't change all of them. Thanks for the notice I'll change them right away. Commented Apr 14, 2023 at 18:34
• Hahahahaha, @OverLordGoldDragon thanks for the tip. I didn't realise it was about my profile and thought that it was something I didn't understand. I changed it now and looks OK. :) Commented Apr 15, 2023 at 14:39
• This is so far the most helpful answer, while other answers are also informative. I am going to walk through everything with my team. Commented Apr 16, 2023 at 4:23
• Please let us know if there's anything missing and you would like clarifications. If it doesn't fit well in this question don't hesitate to go post a different question (where you could even cite this one to make a connection). Commented Apr 16, 2023 at 8:13

What is missing needed for the conversion?

You need to identify the entire signal chain of your specific setup. This typically includes at least the microphone, pre-amplifier, ADC input stage, and the ADC itself but can often had additional processing elements especially if you are going through a computer based system (drivers, mixers, pre-processing algorithms, etc).

What is the formula?

You can just multiply the gains or add the levels (in dB) to get the total gain. All of this only works if the entire signal is "flat", i.e. the gain doesn't depend on frequency over a wide enough range.

Let's say your microphone sensitivity is 10mV/Pa, your pre-amp gain is 40dB, and the combined range of your ADC and it's input stage comes out to be 2.8Vpp (1V rms). That means that the clipping voltage is 1.4V and that the digital one-sided full scale (DFS) sound pressure is

$$p_{DFS} = \frac{1.4V}{100\cdot 10mV/Pa} = 1.4Pa = 97 dB_{SPL}$$

Note that this is the peak amplitude (not RMS) value.

In practice, this can be quite difficult to do since not all of the data is easily available. Things are particularly tricky if the signal chain has a continuous adjustment. If someone touches the knob, your calibration is out of the window and there is no way to get it back. That's why commercial measurement systems have discrete large gain steps and not continuous controls.

Many people prefer to do an actual calibration with a reference microphone for each measurement you are making. Ideally that is done at multiple frequencies including some at the boundaries of your frequency range of interest, so you can verify that the whole thing is flat enough.

• Thanks Hilmar, your answer to my question, as well those to others' relevant questions are very informative. Commented Apr 16, 2023 at 4:08

I asked a similar question a few years ago about the relationship of dBV and dBSPL years ago but I posted in Electronics StackExchange.

For starters, dBFS is the scale that exists only in the digital realm of your embedded device while dBSPL is the actual scale of sound pressure in the real world. To match these two, you have to do calibration and know the microphone sensitivity to set which dBFS corresponds to a particular dBSPL.

Based on my experience, these are the crucial parts:

1. Microphone Sensitivity: this is the most important spec of your microphone that will tell you the equivalence for a specific dBSPL (usually 90dBSPL @ 1kHz sine wave) to a particular dbV (if analog mic) or dBFS (if digital mic).

For Analog Mic: $$90 ~ dB_{SPL} \rightarrow X_{sens} ~ dB_{V}$$ (analog mic) $$\rightarrow Y ~ dB_{FS}$$ (ADC)
For Digital Mic: $$90 ~ dB_{SPL} \rightarrow X_{sens} ~ dB_{FS}$$ (digital mic)

2. Analog-to-Digital Conversion: This is for the analog mic only as you need the ADC to convert the range of voltage your microphone produces to the output dBFS scale. Usually the microphone sensitivity is very small (e.g. $$-46 dB_{V} = 5 ~ mV$$), and thus pre-amp gain is usually used for small microphones to bring up the voltage to proper range for the ADC. E.g. $$5 ~ mV$$ to $$500 ~ mV$$ requires a $$+40 ~ dB$$ ($$x 100$$) pre-amp gain, bringing the mic sensitivity from $$-46$$ to [$$-46 + 40 = -6 ~ dBV = 500 ~ mV$$].

• Although a late comment, I do think that most calibrators provide either $94 \, \textrm{dB}_{\textrm{SPL}} \sim 1 \, \textrm{Pa}$ or $114 \, \textrm{dB}_{\textrm{SPL}} \sim 10 \, \textrm{Pa}$, so most probably you meant $94 \, \textrm{dB}_{\textrm{SPL}}$ in your answer. Commented Mar 10 at 11:16