Audio is an integral part of many systems, but unfortunately it is often corrupted with noise. This is especially true in systems that use a microphone in a noisy environment, such as automobiles or a room with a fan. One of our clients confronted a particularly noisy environment and asked us to find a computationally tractable way to reduce the noise through signal processing but to do so with minimum NRE. The overall system needed to perform in real-time and the algorithm couldn’t hog the CPU.
With these requirements in mind we gathered multiple audio recordings from the Client’s deployment environment and analyzed their characteristics. Since the audio of interest contained only intermittent voice, there were periods where no voice was present at all, and the background noise level could be adaptively estimated. A real-time spectrograph allowed the noise estimation to be done on a band-by-band basis. Not surprisingly, given the client’s particular audio environment, some bands were noisier than others.
After considering several alternatives, we settled on an adaptive technique for noise removal that works in the frequency domain. The fundamental signal processing chain involved the following steps:
To perform the sub-band analysis, we ultimately decided to use the same critically sampled filter bank employed by the MP3 audio compression standard. This filter bank was a good choice because:
The diagram below shows the basic processing architecture.
The algorithm was quick to develop and relatively easy to tune. It was also computationally efficient given the design choices we made. Overall it performs quite well, while avoiding the computational overhead of more sophisticated algorithms. The client was extremely happy with both the performance and the NRE required to develop, tune, and test the algorithm.