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" argument. 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. Thanks Michael
Can you first try the svn version (or apply https://trac.xiph.org/changeset/11882). As I mentioned in a previous email, there's a bad bug in the 1.2beta1 echo canceller. Jean-Marc Coffey, Michael a ?crit :> 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" > argument. > > 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. > > Thanks > Michael > > _______________________________________________ > Speex-dev mailing list > Speex-dev@xiph.org > http://lists.xiph.org/mailman/listinfo/speex-dev > >
Terrific! The patch fixes my problem quite decisively. I will want to use this with a 16K sample rate. Is it expected to work well with just another slight patch, or will we need to modify it more deeply? Also, are there any tunable parameters besides tail length? I am wondering about the aggressiveness of adaptation and I know you are an expert in that area. Thanks so much, Michael -----Original Message----- From: Jean-Marc Valin [mailto:jean-marc.valin@usherbrooke.ca] Sent: Friday, October 27, 2006 4:22 PM To: Coffey, Michael Cc: speex-dev@xiph.org; Vysotsky, Vladimir Subject: Re: [Speex-dev] Echo Canceller trouble in 1.2beta1 Can you first try the svn version (or apply https://trac.xiph.org/changeset/11882). As I mentioned in a previous email, there's a bad bug in the 1.2beta1 echo canceller. Jean-Marc Coffey, Michael a ?crit :> 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" > argument. > > 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. > > Thanks > Michael > > _______________________________________________ > Speex-dev mailing list > Speex-dev@xiph.org > http://lists.xiph.org/mailman/listinfo/speex-dev > >