[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.
Jean-Marc
More information about the Speex-dev
mailing list