[speex-dev] project 'Sphinx' kicked off

Mark Borgerding mark at borgerding.net
Thu Jun 19 07:37:15 PDT 2003

> <with Prof. Farnsworth voice> "Good News, everyone".
> I've just kicked off project "Sphinx". Which is supposed to
> sound like "Speex" merged with "INT". ;) Meaning I am working
> on an integer encoder and decoder.

Great.  I looked into converting speex to fixed point a while ago, but my
job has gotten much busier lately.

Here's a short brain dump of what I've thought about so far.  I hope it

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.

To do this, I needed a fixed point fft, preferrably that didn't use
assembly.  I tried to find an ANSI C fft routine that would do fixed
point.  I couldn't, so I wrote KISS FFT: a simple, portable radix2 FFT
library that can be compiled to use either fixed or floating point math.
See http://sourceforge.net/projects/kissfft

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.

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.

IOTW, use matlab or octave to get the high precision impulse reponse of
the IIR, scale it according to fixed point reqs., then round it.  Assuming
that the original IIR filter is stable, the impulse response will
eventually subside so that the coefficients round to less than the fixed
point precision, i.e. they become all zeros.  At that point, you've
reached the end of the new FIR, aka impulse response, that has almost
exactly the same frequency response as the IIR version and is much closer
than that of a fixed point IIR.

<p><p><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