Hi Freiends, DSP concept guys say, that it's time to use ARM Cortex-M microcontrollers for embedded DSP systems, so I looked at CMSIS library of filtering functions, and found that it is of block type. As you know, the most painful feature of ARM Cortex-M architecture is the lack of circular buffer addressing mode. I cannot find an example of this functions application for continuous, real-time signal, because, as I guess, there is a big problem of input samples block gathering in a structure compatible with CMSIS FIR function. This should be done by a DMA controller, as we don't want to loose core clock, and this task is not easy. CMSIS FIR functions has internal state buffer which length equals to block_size+numOfTaps-1. The function in multiple steps (=block_size/4) makes 4 samples copy from input buffer to state buffer (using core !!!), but after that, before next input block filtering the last numOfTaps-1 samples in state buffer must be moved to the beginning of this buffer. It looks bad. Maybe someone of you solved this problem and used this function in a real-time so, please, write me about that. Kind regards Roman Rumian
CMSIS DSP library FIR function
Started by ●September 28, 2015
Reply by ●September 28, 20152015-09-28
On 9/28/15 3:48 AM, Roman Rumian wrote: > Hi Freiends, hey Roman. nice to see you here at comp.dsp. > > DSP concept guys say, that it's time to use ARM Cortex-M > microcontrollers for embedded DSP systems, take a look at http://www.dspconcepts.com/third-party-partners . note who is on the top of the page. and they ain't doing ARM (yet that i know of). there's a SHArC version of Audio Weaver, too. > so I looked at CMSIS library > of filtering functions, and found that it is of block type. > As you know, the most painful feature of ARM Cortex-M architecture is > the lack of circular buffer addressing mode. how painful is it to (assuming you're coding in C) to mask the index with 0xFFFF (or some other power of 2 minus 1)? whatever is the longest possible delay in your delay line (or FIR buffer or whatever), round that up to the nearest power of two. and mask the index consistently. how hard is that? > I cannot find an example of this functions application for continuous, > real-time signal, because, as I guess, there is a big problem of input > samples block gathering in a structure compatible with CMSIS FIR > function. dunno what CMSIS is. but i do not know what the problem is with block processing. seems to me to be the only efficient way to do it. > This should be done by a DMA controller, as we don't want to > loose core clock, and this task is not easy. CMSIS FIR functions has > internal state buffer which length equals to block_size+numOfTaps-1. > The function in multiple steps (=block_size/4) makes 4 samples copy from > input buffer to state buffer (using core !!!), but after that, before > next input block filtering the last numOfTaps-1 samples in state buffer > must be moved to the beginning of this buffer. > It looks bad. > > Maybe someone of you solved this problem and used this function in a > real-time so, please, write me about that. hey, can you post (or send to me) an example of the code? if it's in C, i just cannot understand what the problem is. -- r b-j rbj@audioimagination.com "Imagination is more important than knowledge."