nimphea/cmsis/dsp_filtering

Source   Edit  

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 `=copy`[NT, MB: static int](dest: var FirFilter[NT, MB];
                                 src: FirFilter[NT, MB]) {.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 `=sink`[NT, MB: static int](dest: var FirFilter[NT, MB];
                                 src: FirFilter[NT, MB]) {.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 init[NT, MB: static int](f: var FirFilter[NT, MB]; coeffs: ptr float32_t)
Initialize FIR filter with coefficients. Coeffs must point to an array of NumTaps 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  
proc process[NT, MB: static int](f: var FirFilter[NT, MB];
                                 input: openArray[float32];
                                 output: var openArray[float32]) {.inline.}
Process an audio block through the FIR filter. Source   Edit