I use function DSPF_sp_dotprod from DSPlib to do FIR filter for single sample.
struct FirFilterDesc { WORD Len; WORD Idx; float *Coeff; float *Data; }; float FirFilter( float NewData, struct FirFilterDesc *Desc ) { float Result; Desc->Data[Desc->Idx] = NewData; Result = DSPF_sp_dotprod( Desc->Coeff, &(Desc->Data[Desc->Idx]), Desc->Len - Desc->Idx); if( Desc->Idx ) Result += DSPF_sp_dotprod( &(Desc->Coeff[Desc->Len - Desc->Idx]), Desc->Data, Desc->Idx); if( Desc->Idx ) Desc->Idx--; else Desc->Idx = Desc->Len - 1; return Result; }
I have some mistakes in it works. In SPRU657B I read that:
A memory pad of 4 bytes is required at the end of each array if the number
of inputs is odd
I add 4 bytes for each array Coeff and Data, but mistakes remains. What means this requirement? Is required that this 4 bytes must be equal 0? In circular buffer one of calls can be on odd number and data is in next word.