Hello, I'm trying to use speex for implementing a VoIP demo application using linphone on an embedded system. At the moment I'm not really able to do real time encoding, and thinking about making an assembler port for speex to the AVR32 architecture. The AVR32 is a new hybrid MCU/DSP fixed point processor running at 120Mhz in my application. Does anyone have experiences/info about the computational power requirements, e.g. what quality/bitrate and complexity of encoding seem to be realistic as target operating modes. I've run some tests with speexenc, encoding a 1minute 16bit PCM 8khz speech file, which took 3m53s to encode at 11kbps CBR/complexity 3. For finding a starting point for the assembler port I did some analysis of the encoding with valgrind-callgrind. Perhaps some of you have already done similar work and could share a bit of their experience? To loose some words about myself, I'm a student of information technologies/rf electronics and generally interested in everything that has to do with embedded system running Linux, though I'm normally doing more of the hardware design stuff ;-) regards, Benjamin Glass
> I'm trying to use speex for implementing a VoIP demo application using > linphone > on an embedded system. At the moment I'm not really able to do real time > encoding, > and thinking about making an assembler port for speex to the AVR32 > architecture. > The AVR32 is a new hybrid MCU/DSP fixed point processor running at 120Mhz > in > my application. > Does anyone have experiences/info about the computational power > requirements, e.g. > what quality/bitrate and complexity of encoding seem to be realistic as > target operating > modes. I've run some tests with speexenc, encoding a 1minute 16bit PCM > 8khz speech > file, which took 3m53s to encode at 11kbps CBR/complexity 3. > For finding a starting point for the assembler port I did some analysis of > the encoding with > valgrind-callgrind. Perhaps some of you have already done similar work and > could share > a bit of their experience? > To loose some words about myself, I'm a student of information > technologies/rf electronics > and generally interested in everything that has to do with embedded system > running Linux, > though I'm normally doing more of the hardware design stuff ;-)I suggest that you start by looking at 8kbps, complexity 0. I (and others) are running that on a TI C55xx DSP, and it runs a little under 30 MIPs when I last checked, with no assembly optimizations. I have not tried to profile other rates, but I did run a test at 15kbps, complexity 3, and that was 66 MIPs. People ask about guidelines for assembly optimization, and if you do some searching, you will find some tips from Jean-Marc on where to start. Also, if you look in the source tree for references to Blackfin or bfin, you will find an example port done by Jean-Marc. You should make sure that you run the latest code from Subversion, which has some speed improvements from 1.1.12. Regards, Jim Crichton
> I suggest that you start by looking at 8kbps, complexity 0.Actually, I strongly recommand *against* using complexity 0, unless you're really desperate for a few MIPS. The complexity reduction compared to 1 is small, but the loss in quality can be significant.> I (and others) > are running that on a TI C55xx DSP, and it runs a little under 30 MIPs when > I last checked, with no assembly optimizations. I have not tried to profile > other rates, but I did run a test at 15kbps, complexity 3, and that was 66 > MIPs.That's from 1.1.12 or svn?> People ask about guidelines for assembly optimization, and if you do some > searching, you will find some tips from Jean-Marc on where to start. Also, > if you look in the source tree for references to Blackfin or bfin, you will > find an example port done by Jean-Marc.Yes, have a look at the _bfin.h, _sse.h and _arm.h files to get an idea of what's useful. Also, note that most calls to *_mem2() functions have been (and are being) converted to the _mem16() version.> You should make sure that you run the latest code from Subversion, which has > some speed improvements from 1.1.12.Yes. I'm making big improvements for embedded systems, the last one being 5 minutes ago. Jean-Marc