Hi, I couldn't find a discussion that specifically addresses this, so here it is. I'm using Speex AEC in my mobile VoIP application to cancel speaker echo. The used version is 1.2rc1 from the website, and I'm compiling with fixed-point. On most occasions, the AEC works very well and cancels most of the echo (combined with the preprocessor). On some devices, where the microphone signal gets a bit distorted (because of sensitivity or some internal AGC pass), the AEC outputs distorted and unacceptable voice, while only augmenting the echo signal instead of cancelling it. I have tried a few things: 1. Compile in floating point - solves it, but irrelevant to some devices which don't have an FPU and can't handle this. I actually use the FP version on devices that DO support it. 2. Check where it reproduces - on any device where the recording gets clipped every now and then, and also on devices that normalize their mic input. I'm a bit desperate about this, and almost getting to the point of debugging the AEC itself - my guess is that it's a lot of integer overflows. I'm willing to send voice samples that reproduce the problem. Did anyone experience that or has some insight? Thanks ahead, Omer -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20110103/9d689e1a/attachment.htm
Hi Omer, I think we've experienced something similar. We sometimes hear what sounds like bursts of noise (very ugly) if the microphone is clipped. I haven't had a chance to investigate further though. -Stef _____ From: speex-dev-bounces at xiph.org [mailto:speex-dev-bounces at xiph.org] On Behalf Of Omer Gilad Sent: Monday, January 3, 2011 08:31 To: speex-dev at xiph.org; jmvalin at jmvalin.ca Subject: [Speex-dev] Distorted output in fixed-point AEC Hi, I couldn't find a discussion that specifically addresses this, so here it is. I'm using Speex AEC in my mobile VoIP application to cancel speaker echo. The used version is 1.2rc1 from the website, and I'm compiling with fixed-point. On most occasions, the AEC works very well and cancels most of the echo (combined with the preprocessor). On some devices, where the microphone signal gets a bit distorted (because of sensitivity or some internal AGC pass), the AEC outputs distorted and unacceptable voice, while only augmenting the echo signal instead of cancelling it. I have tried a few things: 1. Compile in floating point - solves it, but irrelevant to some devices which don't have an FPU and can't handle this. I actually use the FP version on devices that DO support it. 2. Check where it reproduces - on any device where the recording gets clipped every now and then, and also on devices that normalize their mic input. I'm a bit desperate about this, and almost getting to the point of debugging the AEC itself - my guess is that it's a lot of integer overflows. I'm willing to send voice samples that reproduce the problem. Did anyone experience that or has some insight? Thanks ahead, Omer -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20110104/bc206a18/attachment.htm
Hi, The Speex AEC is simply not designed to deal with non-linear echo, as is the case when clipping of AGCs are involved. Make sure all your path is linear or forget about the Speex AEC. Jean-Marc On 11-01-03 11:31 AM, Omer Gilad wrote:> Hi, > I couldn't find a discussion that specifically addresses this, so here > it is. > > I'm using Speex AEC in my mobile VoIP application to cancel speaker > echo. The used version is 1.2rc1 from the website, and I'm compiling > with fixed-point. > On most occasions, the AEC works very well and cancels most of the echo > (combined with the preprocessor). > On some devices, where the microphone signal gets a bit distorted > (because of sensitivity or some internal AGC pass), the AEC outputs > distorted and unacceptable voice, while only augmenting the echo signal > instead of cancelling it. > I have tried a few things: > > 1. Compile in floating point - solves it, but irrelevant to some devices > which don't have an FPU and can't handle this. I actually use the FP > version on devices that DO support it. > 2. Check where it reproduces - on any device where the recording gets > clipped every now and then, and also on devices that normalize their mic > input. > > I'm a bit desperate about this, and almost getting to the point of > debugging the AEC itself - my guess is that it's a lot of integer overflows. > I'm willing to send voice samples that reproduce the problem. > > Did anyone experience that or has some insight? > > Thanks ahead, > Omer
Hi Jean-Marc, thanks for the response. First, I will clarify again that floating-point solves this - so isn't that a bug in fixed-point? Also, I understand that algorithmically the AEC won't cancel echo properly on a non-linear signal, but why completely distort the output? If the echo just won't get cancelled it would be acceptable, but in the current state it disables the ability to speak - with or without echo. Thanks, Omer On Jan 8, 2011, at 7:26 PM, Jean-Marc Valin wrote:> Hi, > > The Speex AEC is simply not designed to deal with non-linear echo, as is the case when clipping of AGCs are involved. Make sure all your path is linear or forget about the Speex AEC. > > Jean-Marc > > On 11-01-03 11:31 AM, Omer Gilad wrote: >> Hi, >> I couldn't find a discussion that specifically addresses this, so here >> it is. >> >> I'm using Speex AEC in my mobile VoIP application to cancel speaker >> echo. The used version is 1.2rc1 from the website, and I'm compiling >> with fixed-point. >> On most occasions, the AEC works very well and cancels most of the echo >> (combined with the preprocessor). >> On some devices, where the microphone signal gets a bit distorted >> (because of sensitivity or some internal AGC pass), the AEC outputs >> distorted and unacceptable voice, while only augmenting the echo signal >> instead of cancelling it. >> I have tried a few things: >> >> 1. Compile in floating point - solves it, but irrelevant to some devices >> which don't have an FPU and can't handle this. I actually use the FP >> version on devices that DO support it. >> 2. Check where it reproduces - on any device where the recording gets >> clipped every now and then, and also on devices that normalize their mic >> input. >> >> I'm a bit desperate about this, and almost getting to the point of >> debugging the AEC itself - my guess is that it's a lot of integer overflows. >> I'm willing to send voice samples that reproduce the problem. >> >> Did anyone experience that or has some insight? >> >> Thanks ahead, >> Omer