CMSIS-DSP Filtering Functions
This module provides optimized filtering operations (FIR, IIR). Filters are designed to be stack-allocated or static-allocated with compile-time known sizes. Zero heap allocation is used.
Types
BiquadFilter[NumStages] = object instance*: BiquadInstanceF32 state*: array[NumStages * 4, float32_t]
- A compile-time sized Biquad Cascade (IIR) filter. State buffer is automatically sized and zero-initialized. Source Edit
BiquadInstanceF32 {.importcpp: "arm_biquad_casd_df1_inst_f32", header: "arm_math.h".} = object numStages*: uint8 pState*: ptr float32_t pCoeffs*: ptr float32_t postShift*: int8
- Source Edit
FirFilter[NumTaps; MaxBlockSize] = object instance*: FirInstanceF32 state*: array[NumTaps + MaxBlockSize - 1, float32_t]
- A compile-time sized FIR filter. State buffer is automatically sized and zero-initialized. Source Edit
FirInstanceF32 {.importcpp: "arm_fir_instance_f32", header: "arm_math.h".} = object numTaps*: uint16 pState*: ptr float32_t pCoeffs*: ptr float32_t
- Source Edit
Procs
proc `=copy`[NS: static int](dest: var BiquadFilter[NS]; src: BiquadFilter[NS]) {. inline.}
- Custom copy to rebind pState pointer to destination's buffer Source Edit
proc `=sink`[NS: static int](dest: var BiquadFilter[NS]; src: BiquadFilter[NS]) {. inline.}
- Custom sink to rebind pState pointer after move Source Edit
proc arm_biquad_cascade_df1_f32(S: ptr BiquadInstanceF32; pSrc: ptr float32_t; pDst: ptr float32_t; blockSize: uint32) {. importc, header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc arm_biquad_cascade_df1_init_f32(S: ptr BiquadInstanceF32; numStages: uint8; pCoeffs: ptr float32_t; pState: ptr float32_t) {.importc, header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc arm_fir_f32(S: ptr FirInstanceF32; pSrc: ptr float32_t; pDst: ptr float32_t; blockSize: uint32) {.importc, header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc arm_fir_init_f32(S: ptr FirInstanceF32; numTaps: uint16; pCoeffs: ptr float32_t; pState: ptr float32_t; blockSize: uint32) {.importc, header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc init[NS: static int](f: var BiquadFilter[NS]; coeffs: ptr float32_t)
- Initialize Biquad filter with coefficients. Coeffs must point to b0, b1, b2, a1, a2 * NumStages floats. Source Edit
proc process[NS: static int](f: var BiquadFilter[NS]; input: openArray[float32]; output: var openArray[float32]) {.inline.}
- Process an audio block through the Biquad filter. Source Edit