[speex-dev] project 'Sphinx' kicked off

Mark Borgerding mark at borgerding.net
Thu Jun 19 20:45:47 PDT 2003



>> I had the idea of implementing a lot of the operations in FFTs. ( for
>> example, it is possible to do auto-correlation and FIR filtering using
>> FFTs.)  There are two advantages to this.
>> 1. It's almost always faster
>> 2. By swapping fft implementations, it could be easy to recompile for
>> fixed or floating point versions.
>
> No. FFT's require higher precision than filters. Also the filters are
> only applied in 40-sample chunks so the cost of the FFT would be much
> higher. Last thing: I don't think you can handle the current (direct
> form II) memories with an FFT.

Each math operation introduces some error. So the fewer operations
required, the fewer roundoff errors occur.  This leads to a happy
correlation between efficiency and accuracy.

For fewer than ~64 taps, the O(nh) complexity of a directly calculated FIR
is better than the O( log(nh) ) complexity that comes from using FFTs.  So
for FIR filters with length of 40, direct calculation probably would be a
better choice.

<p>>> Now the problem of IIR filters: IIR filters and fixed point math do
>> not mix well. Truncation errors and limited dynamic range problems are
>> amplified by the feedback nature of the IIR.
>
> Speex makes sure the filters are never too close to being unstable, so
> I'm confident there will be no problem with the IIR.

Have you tried working with fixed point IIR filters?  Stable or not, the
frequency response suffers.   Maybe it will still be good enough.

<p>>> There are a bunch of IIR filters used in speex.  It seems to me that
>> using the rounded impulse responses of those filters (up to limit of
>> precision) would be a good approach, as opposed to redesigning all the
>> filters.  I've done a few tests, and it looks promising.
>
> There's a chicken-and-egg problem here. How do you compute the impulse
> response without using an IIR filter in the first place? The IIR filters
> are different for each 40-sample sub-frame BTW (i.e. you can't cache
> them).

Are the coefficients for the LPC or other IIR filters dependent on the data?
I thought that they were derived from the modes and submodes defined in
the various flavors.

If the coefficients are data-dependent, that makes things considerably
more difficult.

<p><p>--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'speex-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the Speex-dev mailing list