[Speex-dev] Echo Canceller trouble in 1.2beta1

Coffey, Michael mcoffey at avistar.com
Fri Oct 27 15:45:24 PDT 2006

Hi Folks,

I am having trouble using speex_echo_cancel. As a starting point, I am
using the testecho.c source code. I compiled the 1.2beta1 version. I
have not tried any other versions of speex.

The document says that the order of arguments to Speex_echo_cancel is
(echo_state, input_frame, echo_frame, output_frame, residue) where
"input_frame" is as captured from mic and "echo_frame... was played from
the speaker." 

Speex_echo_cancel calls these parameters (st, ref, echo, out, Yout). The
name "ref" is confusing to me, but the implementation of
speex_echo_playback() and speex_echo_capture() confirms that the "ref"
argument is supposed to be the mixture of sound coming from the
microphone and the "echo" argument is supposed to be whatever has been
played out to the speaker.

If I pass the arguments in the "right" order, I get garbage output
perhaps indicative of some kind of severe overflow. If I change the
signal arguments (passing echo before ref) I get something like the
wrong signal subtracted from the mix.

I've created a pair of files for testing various echo cancellers. To
simulate the "far end" speech, I have a clean close-mic recording of an
utterance which I pass as the "echo" argument to testecho.c. To simulate
the mixture coming from the mic, I delay that same signal by 10 ms, add
a mild amount of artificial reverb, reduce the volume by several db, and
then mix in a different clean utterance. That is passed as the "ref"

This test is slightly difficult because there is more double-talk than
single-talk in it. Also, the 10ms delay is fairly long. However, other
vendor's echo cancellers have been able to handle it.

What should I try next? Am I missing something obvious or should I try a
different version of the code? I would be very excited to be able to get
this to work.


More information about the Speex-dev mailing list