[Speex-dev] Residual Echo Suppression by the Preprocessor
Jean-Marc Valin
jean-marc.valin at usherbrooke.ca
Tue Jun 26 20:48:42 PDT 2007
The residual echo suppression is supposed to be working decently well
now. However, it's not designed to counter the effects of samples being
dropped off the soundcard. You'll just need to fix that problem for real.
Jean-Marc
Coffey, Michael a écrit :
> What is the current status of the residual echo suppressor in the
> preprocessor?
>
> I ask this because I have occasional problems with the AEC, in which it
> fails to cancel echo. I think the problems have to do with samples being
> dropped by the audio IO system, which is effectively impossible to
> detect and counteract reliably.
>
> A colleague recommended using an echo suppression technique (which he
> meant as synonymous with "nonlinear processor" and "loss control"). I
> wouldn't want the program to do anything drastic unless it knows that
> cancellation is not working.
>
> I'll probably just try it out and see how it works. Still, I figure it's
> a good idea to ask what the known problems are, in case there are any.
>
> BTW, just to check my understanding... Do I need only the following
> initialization code (along with my already-working code that calls the
> AEC and preprocessor) to get the echo suppressor working? (Some
> declarations omitted, to save labor.)
>
>
> // m_EchoState = speex_echo_state_init( ... );
>
> // m_PreProc = speex_preprocess_state_init( ... );
>
> speex_preprocess_ctl(
> m_PreProc, SPEEX_PREPROCESS_SET_ECHO_STATE, m_EchoState );
>
> //optional:
> INT32 maxEchoAttenuationDB = -40; //use negative; default is -40
> speex_preprocess_ctl(
> m_PreProc, PREPROCESS_SET_ECHO_SUPPRESS, &maxEchoAttenuationDB
> );
>
> INT32 maxNearEndEchoAttenuationDB = -15; //use negative; default is
> -15
> speex_preprocess_ctl(
> m_PreProc, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE,
> & maxNearEndEchoAttenuationDB);
>
> Oh, I've been turning the noise suppressor on, as well, although some of
> our users don't like some of the artifacts.
>
> My processing code passes the main output of the echo canceller to the
> preprocessor, of course, and also the echo residuals, as the manual
> says. I'd assume those residuals are important for the echo suppressor,
> too.
>
> speex_echo_cancel( m_EchoState, &micSamples, &speakerSamples
> , &output, &m_Noise );
> speex_preprocess( m_PreProc, &output, &m_Noise);
>
> Thanks
>
> _______________________________________________
> Speex-dev mailing list
> Speex-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/speex-dev
>
>
More information about the Speex-dev
mailing list