EspAudioSensor
Project ESP audio sensor | |
---|---|
File:NoPicture.jpg | |
ESP-based audio sensor | |
Status | Initializing |
Contact | bertrik |
Last Update | 2019-04-14 |
Introduction
This project is about using an ESP-32 together with an I2S digital microphone to create an audio sensor.
This could be a decibel meter, or perhaps an environmental noise meter.
Measuring audio as a citizen science project
Possibly a nice match for measuring stuff by citizens could be to measure audio:
- ESP8266/ESP32 have an I2S input, there are cheap microphones available that directly output I2S, saving on interface electronics
- ESP8266/ESP32 is probably powerful enough to do basic processing, like FFT, summing power in various frequency ranges, etc.
- ESP8266/ESP32 has a wifi connection so it can easily upload data
Questions/stuff to investigate:
- what kind of measurements can we do reliably?
- probably absolute measurements are very difficult
- possibly useful relative measurements
- calculate average over (say) 10 seconds, and compare it with the average over (say) 10 minutes
- compare averages over time, e.g. compare daytime minute average with each other
- determine peak-to-average ratios
Waag society uses the following microphone in their kit 2.1: Invensense ICS4342
On AliExpress you can find many INMP441, with claims of compatibility with ESP32, so I ordered those INMP441.
External things to investigate:
- https://www.rijksoverheid.nl/onderwerpen/geluidsoverlast/geluidsoverlast-in-de-wet
- INMP441 microphone datasheet
- https://github.com/maspetsberger/esp32-i2s-mems
Theory
The plan is to divide the audio spectrum up into octaves and calculate the total energy in each octave. To this we can then easily apply sensor/housing specific corrections, do A weighting, etc.
An octave is basically a factor of two in frequency. Coincidentally an FFT also calculates things in factors of two, for example when sampling at 44100 Hz, you get the following octave boundaries: 22050 Hz, 11025 Hz, 5512 Hz, 2756 Hz, 1378 Hz, 689 Hz, 244 Hz, 172 Hz, 86 Hz, 43 Hz, 22 Hz.
A-weighting
Audio levels are generally measured in dB using the A-weighted scale. A-weighting calculates a subjective loudness level from a physical loudness.
Energy it calculated per octave and an A-weight factor is applied. The octaves are defined referenced to 1000 Hz, so submultiples like 500, 250, 125, 62 Hz and multiples like 2000, 4000, 8000, 16000 Hz. In decibels this means adding a octave-specific correction in each octave to the loudness.
Links:
- Overview of octave bands https://www.engineeringtoolbox.com/octave-bands-frequency-limits-d_1602.html
Hardware
The physical device consists of:
- an ESP32 (or possibly an ESP8266), it has an I2S digital audio input.
- a digital I2S microphone, like the INMP441 (datasheet)
The microphone is connected as follows:
- INMP441 GND to ESP32 GND
- INMP441 VDD to ESP32 3.3V
- INMP441 SD to ESP32 A4/32
- INMP441 SCK to ESP32 A16/14
- INMP441 WS to ESP32 15
- INMP441 L/R to ESP32 GND
Software
Initial code can be found on github.
See also: