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.