PDM microphone/From bits to numbers/04. Why the numbers look small
From bits to numbers · 04 of 9

Why the numbers look small

The microphone's sensitivity is −26 dBFS at 94 dB SPL: a loud voice a few centimetres away reads about a twentieth of full scale. Ordinary speech at arm's length works out near −60 dBFS, a few tens out of 32767. The numbers are small because the microphone leaves room for loud sounds, so the sketches subtract an offset and multiply by a gain.

Full scale and dBFS

A 16-bit sample runs from −32768 to 32767. dBFS measures a signal against that full scale: 0 dBFS is the biggest a sample can be, and every 20 dB down is ten times smaller.

The datasheet gives one number that ties sound to samples: −26 dBFS at 94 dB SPL, typical, within ±1 dB. 94 dB SPL is the test level, about a loud voice a few centimetres from the port. So that loud voice reads about a twentieth of full scale.

Speech is about a thousandth

Why the numbers look small
60 dB SPL
Sound level60 dB SPL
Gain in the sketch
Signal
-60 dBFS
Sample, raw
33
After × 1
33
Normal sounds are tiny numbers. Speech at arm's length is about -60 dBFS, around a thousandth of full scale: a few tens out of 32767. The microphone is working; the sketches multiply by GAIN so you can hear it.

Every dB of sound is a dB of signal. Normal speech at arm's length is about 60 dB SPL, 34 dB quieter than the test level, so it lands near −60 dBFS: about a thousandth of full scale, a peak of a few tens out of 32767. That is worked out from the datasheet, not measured, and it is why a working microphone prints numbers that look broken.

At the bottom, the microphone's signal-to-noise ratio is 58 dB, so anything below about 36 dB SPL is as quiet as its own hiss. At the top, it overloads at 120 dB SPL.

Two corrections every sketch makes

  • Subtract the offset. Decimated samples sit on a small constant offset, so silence is not exactly 0. The sketches take the average of each block and subtract it; left in, the offset reads as sound that is not there.
  • Multiply by a gain. Speech a few tens high is barely audible played straight to a DAC. The live sketch multiplies by 4, then constrain() keeps the result inside 16 bits, because anything past 32767 would wrap round to a large negative number: a loud click.

The level meter in How loud is the room does the first and prints the result without gain, so you see the raw size.

When it does not work

The peak reads a few tens while I talk. Is it broken?

Probably not. Speech at arm's length works out to a few tens out of 32767 for this microphone. Clap or talk a hand's width from the port: the number should jump by hundreds or more. A peak that stays at 0 whatever you do is a wiring fault.

How much GAIN should I use?

Enough to hear speech, not so much that loud sounds reach 32767 and clip. The live sketch starts at 4 in headphones. Raise it in steps if speech is faint; lower it if a clap sounds harsh.

Why not just make the microphone more sensitive?

Headroom. At −26 dBFS for 94 dB SPL, the microphone can take sounds up to its 120 dB SPL overload point before its output runs out. Gain in the sketch is free and adjustable; lost headroom is not.

What is dB SPL?

Sound pressure level: how loud a sound is, on a scale where every 20 dB is ten times the pressure. 94 dB SPL is the standard test level, a loud voice a few centimetres away; normal speech at arm's length is about 60.

Where this goes next

What the L/R jumper is for, and why one microphone never needs it.

Two microphones, one wire

Edit this page — content/books/pdm-microphone/why-the-numbers-look-small.mdx

Community

Questions about this product

See what other owners have asked, and read their solutions.

Ask a question ↗

PDM Microphone

Loading discussions…

Discuss this article

Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.

Browse Modules and blocks on the forum