[Speex-dev] echo cancellation for analog lines

Ard van Breemen ard
Mon Jun 14 04:25:40 PDT 2004


Hi,
I am currently working on a thin-client "low-cpu" usage telephone
application.
The current setup is that you can make phonecalls using an alsa
supported usb headset and a smartlink based usb modem (a sweex
usb modem, which -in large quantities- goes for 17.95 euro's)
for analog lines.
Unfortunately, it is really made as a modem and not for audio
purposes, so, there is a pretty echo coming back.
Using the speex echo cancellation software, I can reduce that
echo. The echo cancellations at some times works so good that I
can turn up the volume, and hear the silence and music at the
other side while this side seems to be silent, where as a matter
of fact, this side is continuously talking.
(I make "recordings" at almost all points: the point where audio
goes into the modem, the point where audio comes out of the
modem, and the point where the audio goes to the headset)
But this is only at the good moment.
It goes something like this:
The modem goes to offhook, and we get a dialtone.
Then we softly insert some dtmf onto the outgoing audio
And then we get the ringing tone.
If the other side then decides to pick up, I can talk, and I can
hear the dial tone modulated with the volume of my voice (or
something like that).
After 20 seconds, the dial tone vanishes, and my voice also is
almost vanished, at that point it starts to work perfectly.
At some moments (change of volume), the echo comes back.
If I blow into the mic, causing a very loud volume going onto the
phone line, the total volume gets less loud (after some crackling
noises), and the echo cancellation seems to work ok.

So now my question:
The problems I'm getting looks to me like some sort of adaption
to the current situation. Is it possible with the echo
cancellation algorithms used in speex to freeze at some point the
adaption of the filter, and only filter the echo using the
"frozen" filter? This seems for me the fastest way out: to let it
run some filter adaption when the thin client boots up, and then
freeze it for the day.
Or is it better to focus on the dial/ringing tone (or any other
"pure" sinus for that matter)?

Regards,
Ard van Breemen.
(Since the software is developed under a GPL, I will put the
software on a website soon...)


More information about the Speex-dev mailing list