[Speex-dev] AEC initial convergence (Mark Pietras)
mail at maris-ee.eu
Thu Nov 19 23:25:24 PST 2009
> I'm wondering if there's a way to speed up the initial convergence
> time. Maybe I'm completely off base here, but specifically I was
> wondering if the code starts the search assuming the echo is near to
> zero, and works longer to find the adapted point. If so, is there a way
> to have it reverse the search, that is, start with the assumption that
> the echo is furthest from zero? In my case, the echo will almost
> certainly always be pretty far out in the window... I'm sure my
> terminology isn't right, but does my question make sense? Thanks, Mark.
Regardless which starting point is taken, there is always a big
probability of slow convergence. To be precise: when started from the
"long echo" point: it can even make it worse. Why?
The echo canceller tries to cancel out every incoming frequency that is
originated from the loudspeaker with the correct amplitude, correct delay
time and phase. It is this latter property that is very, very crucial. An
"initial long echo" state as you'd like it could have a totally false
phase, thus doubling echo effect or so.
There is only one way out of this problem: having a sort of "reference
echo session", where you would decide if an echo canceller is convergered
well enough, and then save this echo cancellation state into a file or so,
and recover it upon start of a normal session. This however requires
(probably minor) changes in the speex source, but more important: an
exactly stable delay of the digital signal path from echo canceller
reference input to echo canceller microphone input is stringently
required. In practice it points out that every unique session does not
have the same delay. This is true for Windows as well as Linux targets.
More information about the Speex-dev