Teensy 4.1 Audio Library: I2S LSB truncated?


New member

I am using Teensy 4.1 + ICS43434 in my project. As ICS43434 is a 24-bit i2s mems mic, I am interested in how the 24bits are truncated. I quickly went through the audio library code (not every detail). It looks like the high 16bits of I2S register is used by the audio library:

Usually, the I2S "standard" is that the MSB of the left channel is valid on the second rising edge of BCLK after the falling edge of LRCLK. Similarly, the MSB of the right channel is valid on the second rising edge of BCLK after the rising edge of LRCLK. Below is a figure from ICS43434 datasheet:


So the question is: If using a 16-bit i2s mic, is the LSB still truncated in the current audio library implementation?

PS: either 16bit or 15bit audio quality is good enough for my project. Just thought this might be an issue for someone else who really cares about missing LSB.

Confirm, the audio library I2S input captures the high 16 bits (clocks 2-17 in Figure 9) and ignores the low 16 bits (clocks 18-33).

Just thought this might be an issue for someone else who really cares about missing LSB.

The unfortunate reality of audio specs is many people have misunderstanding based on widespread audio product marketing, causing them to care deeply about utterly useless things. This is especially true with expectations for the number of bits used. The reality of today's technology based on silicon transistors (operating at room temperature) is the very best audio ADCs have approx -120dB noise floor. Each "bit" is approx 6dB. Even in the very best case scenario of recorded sounds, the low bits are pretty much random.

But no microphone is anywhere near that good, and MEMS microphones are nowhere near the high end. ICS43434 has a SNR spec of only 65dB. It's full scale signal is -26dB, so the ICS43434 noise floor relative to full scale would be -91dB (the datasheet says -90dB), which still within 16 bits. After you use digital gain to bring the weak data signal up to full scale, the ICS43434 (and same for most MEMS mics) really only about 11 bits. And even that is with A-weighting, so if you look at the actual raw numerical data, don't expect to see the top 11 bits highly stable when the input is silent.
Last edited:
While I completely agree with Paul's summary, I often feel confused by the language of microphone datasheets. Paul's reply seems like a good prompt to help unpack the mic's datasheet a bit, in case it might help folks...

For digital mics, like ICS46464, maximum digital output is usually assume to occur at a sound level that is reported as the "AOP" (acoustic overload pressure?) In the datasheet.


The other number you need to know is where is the noise floor. Unfortunately, they rarely report this. I stead, they report the "SNR" (signal to noise ratio). This is confusing because you're saying "What signal? Just tell me the noise level!". It's just the convention to report it this way. The SNR is evaluated as if there is a 1kHz sine wave at 94 dB SPL. Therefore when they say the mic has an SNR of 65 dBA, it means that the noise floor is at an SPL of 94 - 65 => 29 dBA.

Hence, per these two values from the datasheet, one can say that this mic has a total dynamic range of 120 - 29 => 91 dBA.

(In truth, this isn't quite true as the "120" is a peak unweighted value whereas the "29" is an A-weighted RMS value...apples and oranges...but it's a decent enough representation of performance to make most decisions)

I hope this helps!