Custom mobile devices, if used for voice communication, often have a sensible amount of echo generation problems. The hurts increase strongly if the use case defined for the wanted solution includes VoIP communications instead of GSM-CDMA ones. This because an Hardware Echo Canceler is a common feature in modern GSM-CDMA modems allowing to reduce echo problems transparently to the Main OS audio stack.
But in the VoIP use case, GSM-CDMA modems are not involved in the audio paths and since normally a custom mobile device is not provided with a dedicated hardware echo canceler, the whole echo is sent to the far end of the call producing painful communications.
In this case, if an hardware change is not possible, a dedicated software module is needed to cancel the generated echo.

Up to the last version of Android (2.3), the Google’s Operative System do not make use of software echo canceler within it’s framework. This because famous featured phones, sold with Android inside, are provided with an hardware echo canceler solution that enhance a lot the resulting audio quality.
We faced the echo problem within the DART project and we found a really powerful solution that reduce strongly the echo generated within VoIP calls.

What we developed is a new layer between the Android audio stub driver and Android Audio Flinger so both, played and recorded, streams can be managed by our solutions giving to Audio Flinger the echo cancelled data.

This solution make use of the open source Speex library witch embed a very fast and aggressive Acoustic Echo Canceler Software Module.

Great efforts were made to optimize the Speex library for the target in use and to optimize the interaction between the audio driver, the echo canceller and the Android audio stack since the target was not provided with any hardware accelerations such as build in DSP or multimedia instruction set.
The resulting VoIP call experience is really Good: the echo is no longer audible from the far end and the CPU overload is less than 10%
(The target is built over a Marvell PXA320 Application processor: architecture XScale with ARMv5 ISA and a working frequency of 600MHz).

If you are interested in adopting a similar solution within your custom embedded device, contact us!

Have a project idea in mind?