[Speex-dev] Speex echo canceller on TI C55 DSP

Jean-Marc Valin Jean-Marc.Valin at USherbrooke.ca
Tue May 9 01:08:23 PDT 2006

> >>       return (a.m+(1<<(-a.e-1)))>>-a.e;
> >> to
> >>       return (((spx_uint16_t) a.m)+(1<<(-a.e-1)))>>-a.e;
> >
> > Is that sufficient to remove all the overflows at this place?
> The rounding takes the value to exactly 0x8000, and it is followed by a 
> right shift, so you just need to avoid the sign extension.

OK, I'll have a closer look to understand what happens.

> No, it was a divide by zero, as explained in my second post.  I will try a 
> build on the C6x DSP to see if this is a 16 vs. 32-bit problem.  I sent the 
> test files off-list.

Will have a closer look at "r". Let me know the results on a C64.

> > The order of magnitude seems right. It may be possible to reduce that a
> > bit, though. If you have an optimized FFT, you could replace kiss_fft
> > with it and get a big improvement right there.
> Yeah, but then I have to try to actually understand the algorithm.  I am not 
> sure that those brain cells are still alive.

No need to understand the algorithm. All you need to do is adapt 
fft_wrap.c to wrap your fft (making sure the scaling is the same) and 
the echo canceller will use that FFT.


More information about the Speex-dev mailing list