When it comes to sampling sound with a microphone and performing analysis on it, I have the following understanding:
- Most things produce multiple "sound waves", typically a fundamental base wave and then 1+ harmonics
- Microphones, which are sensors that can pick up analog "sound" (via measuring pressure waves, particle velocity, etc.) typically produce a very weak signal, and so to do any type of software-layer analysis on them you typically feed their output into a pre-amplifier which just magnifies the signal strength so that an analog-to-digital converter (ADC) can sample the wave at a particular rate + bit depth and convert the analog waveform into digital data points
- Microphones are only picking up the total waveform/signal at the location it is measuring/sensing; that is, a synthesis of all the sounds (fundamentals and their respective harmonics) combined into a single, composite wave/signal
- It is then the responsibility of the thing analyzing the total signal to use tricks like Fourier Transforms and their ilk to decompose the total signal into all its constituent waves (if it makes sense to do so)
So to begin with, if any of my understandings above are inaccurate or only partially correct, please begin by providing some course correction!
Assuming I'm more or less correct in my understanding...
Let's say I have such a setup, that is:
- A microphone sensor sending its output to a pre-amplifier, and the pre-amp sending its output to an ADC
- The ADC is hooked up to the GPIO pins of a microcontroller running my own firmware on it, that will be analyzing the total signal collected by the microphone
- I believe there are a few other steps (if anybody knows exactly what they are, I'd love to be educated! But they are outside the scope of this question), such as possibly anti-aliasing and converting the PCM output of the ADC to a dbFS format, but lets pretend I'm doing all that so that the firmware is being fed a correct digital model of the total signal (collected by the microphone)
Let's say that in a given 20-second long sampling, three different humans are talking within range of the mic, a dog is barking, and there is also the sound of an ambulance driving by off in the near distance. These are all "auditory objects" producing sound outputs within range of the mic, and so they will be collected by it during this 20-second sampling.
Thats 3 distinct human voices, a barking dog, and an ambulance, so five (5) distinct auditory objects producing sound.
Now then, I am interested in understanding what techniques, algorithms, strategies, tricks, etc. I can use at the firmware layer to analyze the total signal (digitalized) being fed to it by the mic, and to deconstruct it into five separate signal "bundles" (or perhaps subtotal signals), one for each auditory object. That is, what are the typical methods employed for decomposing a total signal into all the signals produced by distinct auditory objects? In this case, I'm relying on being able to take the total signal and produce five smaller/sub signals (perhaps each of which is a "total signal" comprised of a fundamental and harmonics): one for each of the three humans, one for the barking dog, and one for the ambulance. My intention of course, is to then subject these five sub signals individually to further analysis. But first things first. I need to analyze the total signal and somehow figure out how many distinct auditory objects are captured inside of it, and somehow filter each of them out for downstream analysis.
Any ideas as to how I could accomplish this? Again, I've heard of Fourier Transforms being used in this space, as well as "blind source separation", but I'm out of my wheelhouse and would appreciate some steering, thanks!