[Speex-dev] Speex optimization and 12 bits conversion for 12 bits ADC

Jean-Marc Valin jean-marc.valin at usherbrooke.ca
Tue Jul 24 19:15:50 PDT 2007

> I am porting speex on ARM7TDMI, I have done some optimization, the
> result is that the encoder and decoder need about 60 MCPS for 5.96kbps
> bitrate and complexity 0. Can someone give me informtion about Speex
> optimization on ARM7?

That's quite good. A few suggestions here:
1) Don't use complexity 0 unless you're really desperate (the CPU gain
over complexity 1 is marginal and there's a cost in quality)
2) Have you enabled the current ARM4 assembly bits?
3) There are a couple functions that could definitely benefit from
assembly optimisations. They used to be optimised for AMR4, but I had to
remove that when I optimised the C version. Those are filter_mem16(),
iir_mem16() and fir_mem16(). Let me know if you're going to do that
because the best way to do it is not to start from the current C code.

> Another question, my ADC and DAC are 12 bits, but Speex codec is
> 16bits, Did someone try to modify speex to 12 bits? I think if I
> modify speex to 12 bits, the computation power will be reduced, is it
> right? 

Wrong. Speex would still need 16 bits internally. I also recommend you
only shift by 3 so that you're sure never to have clipping problems at
16 bits.

> and If it's feasible, How can I do? My application is wireless,
> for 12bits ADC, which bitrate is siutable for wireless application,
> 5.95kbps or 8kpbs?

You tell me. The higher the bit-rate, the higher the quality, so it
depends on what you can afford in terms of bandwidth.


More information about the Speex-dev mailing list