? hi all, i am using the Acoustic Echo Cancellation from "Speex 1.1.12 version" in my VOIP application. Is it that the frame length to be chosen should always be 20ms or can i have flexibility in chosing the frame lenght? on what parameters does the frame length choise depends? thank you all, Shri. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20060607/37cf4f9f/attachment.htm
Welcome everybody.
I am new here on the list. Thank you very much for speex encoder and decoder.
They are working great. I compile speex coded for str911 Arm processor.
But I have a big problem with echo canceller from 1.1.12 speex package.
I create echo canceler state:
SpeexEchoState * echo_state = speex_echo_state_init(FRAME_SIZE,
FRAME_SIZE * 5);
FRAME_SIZE is in my project 160 samples. I have 8000ksaples/s, so I must
call echo canceler every 20ms.
and later in the loop I call it:
speex_echo_cancel(echo_state, (short *)Samples, (short
*)SamplesSpeaker, (short *)SamplesOut, NULL);
I give as the parameters to the function the data from tables now.
The problem is when I call speex_echo_cancel it does not return. It goes
into infinite loop somewhere.
I test now on the simulator.
What can cause the infinite looping ?
Please help.
Le mercredi 07 juin 2006 ? 10:03 +0000, shridhar desai a ?crit :> > hi all, > i am using the Acoustic Echo Cancellation from "Speex 1.1.12 version" > in my VOIP application. Is it that the frame length to be chosen > should always be 20ms or can i have flexibility in chosing the frame > lenght? > on what parameters does the frame length choise depends? > thank you all, > Shri.20 ms is usually a good idea, but you can use shorter (I don't recommend much longer). In any case, just try it and see if it works for you. Jean-Marc
> The problem is when I call speex_echo_cancel it does not return. It goes > into infinite loop somewhere. > I test now on the simulator. > > What can cause the infinite looping ?Can you use a debugger to see where the infinite loop is. I suspect the problem is somewhere in your code, but in case it's in Speex, I'll find it. Jean-Marc
You should try the code from Subversion before troubleshooting too much. I had a problem like this which was fixed a month ago, but it only appeared on a 16-bit DSP. - Jim ----- Original Message ----- From: "A" <ap@fom.pl> To: <speex-dev@xiph.org> Sent: Wednesday, June 07, 2006 5:12 PM Subject: [Speex-dev] Echo canceller problem> Welcome everybody. > I am new here on the list. Thank you very much for speex encoder and > decoder. > They are working great. I compile speex coded for str911 Arm processor. > But I have a big problem with echo canceller from 1.1.12 speex package. > > I create echo canceler state: > SpeexEchoState * echo_state = speex_echo_state_init(FRAME_SIZE, > FRAME_SIZE * 5); > > FRAME_SIZE is in my project 160 samples. I have 8000ksaples/s, so I must > call echo canceler every 20ms. > > and later in the loop I call it: > speex_echo_cancel(echo_state, (short *)Samples, (short > *)SamplesSpeaker, (short *)SamplesOut, NULL); > > I give as the parameters to the function the data from tables now. > > The problem is when I call speex_echo_cancel it does not return. It goes > into infinite loop somewhere. > I test now on the simulator. > > What can cause the infinite looping ? > > Please help. > _______________________________________________ > Speex-dev mailing list > Speex-dev@xiph.org > http://lists.xiph.org/mailman/listinfo/speex-dev >
Hello everybody.
I have the same problem like you. I use ARM microcontroller too.
Here is the list of all functions called by speex_echo_cancel until goes
into infinite loop:
speex_echo_cancel()
|
spx_fft
|
kiss_fftr
|
kiss_fft
|
kiss_fft_stride
|
kf_work
Function kf_work looks like:
static void kf_work(kiss_fft_cpx * Fout, const kiss_fft_cpx * f, const
size_t fstride, int in_stride, int * factors, const kiss_fft_cfg st)
{
kiss_fft_cpx * Fout_beg=Fout;
const int p=*factors++; // the radix
const int m=*factors++; // stage's fft length/p
const kiss_fft_cpx * Fout_end = Fout + p*m;
if(m==1)
{
do
{
*Fout = *f;
f += fstride*in_stride;
}
while(++Fout != Fout_end );
}
else
{
do
{
kf_work(Fout , f, fstride*p, in_stride, factors,st); // <----------
here this function calls itself and that's why goes infinite
f += fstride*in_stride;
}
while( (Fout += m) != Fout_end );
}
...
...
If anybody knows how to work around this problem please help.
Regards
Andre
_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now!
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/
Yes! The same problem :-( Any idea ? At 18:55 2006-06-08 +0200, Andrzej Fien wrote:>Hello everybody. >I have the same problem like you. I use ARM microcontroller too. >Here is the list of all functions called by speex_echo_cancel until goes >into infinite loop: > >speex_echo_cancel() > | >spx_fft > | >kiss_fftr > | >kiss_fft > | >kiss_fft_stride > | >kf_work > >Function kf_work looks like: > >static void kf_work(kiss_fft_cpx * Fout, const kiss_fft_cpx * f, const >size_t fstride, int in_stride, int * factors, const kiss_fft_cfg st) >{ > kiss_fft_cpx * Fout_beg=Fout; > const int p=*factors++; // the radix > const int m=*factors++; // stage's fft length/p > const kiss_fft_cpx * Fout_end = Fout + p*m; > if(m==1) > { > do > { > *Fout = *f; > f += fstride*in_stride; > } > while(++Fout != Fout_end ); > } > else > { > do > { > kf_work(Fout , f, fstride*p, in_stride, factors,st); // <---------- >here this function calls itself and that's why goes infinite > f += fstride*in_stride; > } > while( (Fout += m) != Fout_end ); > } > ... > ... > >If anybody knows how to work around this problem please help. > >Regards >Andre > >_________________________________________________________________ >FREE pop-up blocking with the new MSN Toolbar - get it now! >http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/ > >_______________________________________________ >Speex-dev mailing list >Speex-dev@xiph.org >http://lists.xiph.org/mailman/listinfo/speex-dev > >
Jean-Marc Valin <Jean-Marc.Valin <at> USherbrooke.ca> writes:> > Le mercredi 07 juin 2006 ? 10:03 +0000, shridhar desai a ?crit : > > > > hi all, > > i am using the Acoustic Echo Cancellation from "Speex 1.1.12 version" > > in my VOIP application. Is it that the frame length to be chosen > > should always be 20ms or can i have flexibility in chosing the frame > > lenght? > > on what parameters does the frame length choise depends? > > thank you all, > > Shri. > > 20 ms is usually a good idea, but you can use shorter (I don't recommend > much longer). In any case, just try it and see if it works for you. > > Jean-Marc >Hi Jean-Marc, I am using speex-1.1.12 version AEC with the following configuration SAMPLE RATE : 8000Hz FRAME LENGTH: 32 , i.e. 4msec(125usec*32) TAIL LENGTH : 256 , 32msec I have configured AEC for ARM-920T, 200MHz Here are my observations [a] AEC CPU usage 50% [b] Still 10%trace of echo is still present NOTE: I am not using preprocessor as my cpu usage goes upto 99% What should i do to increase the efficiency of AEC Thanks in advance Ranjan Srivastava