Hi All We are working on an ARM-based speaker phone application where the speaker and microphone is placed roughly 8 cm from each other (similar to this one: http://www.voipsupply.com/images/CHAT50SPLASH.jpg). We are using Speex AEC and preprocessor to handle the acoustic echo. The AEC typically contribute with ERLE of 15-20 dB which should be as expected from the algorithm. Additionally we need about 30 dB echo suppression which we hope to get from the preprocessor. However it has shown to be very hard to make the speech switching reliable under situations where the far-end signal is very strong compared to the near-end signal in the mic signal (rec). We have converted the AEC and preprocessor code to matlab and are able to look at all signals. We can modify the Qcurve-function to bring more attention to the near-end signal or we can modify the echo_noise estimation (add gain and accumulation) to bring more attention to the residual echo suppression. However it is hard to optimize for both. My question is if anyone have any tips of how to make speex preprocessor work in systems like ours (with speaker and mic close to each other) or if anyone have a reference of success/failure of such implementation. Best Regards Johan -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20090618/832ed070/attachment-0001.htm
Johan Nilsson a ?crit :> We are using Speex AEC and preprocessor to handle the acoustic echo. The > AEC typically contribute with ERLE of 15-20 dB which should be as > expected from the algorithm. Additionally we need about 30 dB echo > suppression which we hope to get from the preprocessor.So far it seems like you're doing things right.> However it has shown to be very hard to make the speech switching > reliable under situations where the far-end signal is very strong > compared to the near-end signal in the mic signal (rec).Can you explain what you mean here by "speech switching" and problem you've encountered?> We have > converted the AEC and preprocessor code to matlab and are able to look > at all signals. We can modify the Qcurve-function to bring more > attention to the near-end signal or we can modify the echo_noise > estimation (add gain and accumulation) to bring more attention to the > residual echo suppression. However it is hard to optimize for both.There's also a parameter to control the maximum amount of suppression allowed: SPEEX_PREPROCESS_SET_NOISE_SUPPRESS : noise suppression SPEEX_PREPROCESS_SET_ECHO_SUPPRESS : echo suppression when there is no local talk SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE: echo suppression in double-talk Jean-Marc
This is a pretty straight-forward question, no one can shed some light on this for me? So, why are there speex_jitter_* functions documented in the manual but not in the latest source? Best regards, Peter Peter Vestberg wrote:> Hi! > > In the Speex manual I can read about the SpeexJitter structure and the > speex_jitter_* functions that provide a simpler interface to the jitter > buffer. However, I can't seem to find these functions in the current > release from the website (1.2rc1). Also, it seems to be missing from in > the latest version in the GIT repository. > Consquently, I get compilation errors, such as "'SpeexJitter' does not > name a type". > > What am I missing here? >
Sorry, got the subject wrong in the last mail. My e-mail client is playing games with me...
Hi Jean-Marc> Can you explain what you mean here by "speech switching"By speech switching I mean the adaption of "gain2" when near-end or far-end is talking. What is important is that the timing is good and that the gain is low/high while far/near-end is talking. By timing I mean that the "gain2" should remain low until all far-end talk is final and that the gain should quickly be high when near-and is talking.> There's also a parameter to control the maximum amount of suppression > allowed: > SPEEX_PREPROCESS_SET_NOISE_SUPPRESS : noise suppression > SPEEX_PREPROCESS_SET_ECHO_SUPPRESS : echo suppression when there is no > local talk > SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE: echo suppression in double-talkYes, I am aware of these parameters and are familiar with how they affect the gain. However they do not affect the timing of speech switching very much. The important parameter for the speech switching is the Pframe. Pframe is as you know based on the SNR estimation. However when the near-end signal is low compared to the far-end signal (coming from the close speaker element) the SNR is not distinctly increased when near-end talks.> Can you explain what ... problem you've encountered?Our main problem is that it is hard to have good reliance on a high "gain2" when near-end is talking, resulting in missing conversation in one direction. Some improvement can be made by modifying the Qcurve function but it is very sensitive. A secondary problem we also have is that the residual echo during decay of far-end talk is not suppressed very well. This is probably caused by the strong echo coupling plus a fairly reverberant room. We have been able to solve this by adding a weighting factor and some accumulation on the residual_echo and echo_noise. This modification works perfect on the far-end-problem but worsen the main problem even more. Best Regards Johan