iirdecim_cccf

Infinite impulse response (IIR) decimator

Variants: iirdecim_cccf, iirdecim_crcf, iirdecim_rrrf

Public Functions

iirdecim_cccf iirdecim_cccf_create(unsigned int _M, float complex * _b, unsigned int _nb, float complex * _a, unsigned int _na)
iirdecim_cccf iirdecim_cccf_create_default(unsigned int _M, unsigned int _order)
iirdecim_cccf iirdecim_cccf_create_prototype(unsigned int _M, liquid_iirdes_filtertype _ftype, liquid_iirdes_bandtype _btype, liquid_iirdes_format _format, unsigned int _order, float _fc, float _f0, float _ap, float _as)
iirdecim_cccf iirdecim_cccf_copy(iirdecim_cccf _q)
void iirdecim_cccf_destroy(iirdecim_cccf _q)
void iirdecim_cccf_print(iirdecim_cccf _q)
void iirdecim_cccf_reset(iirdecim_cccf _q)
void iirdecim_cccf_execute(iirdecim_cccf _q, float complex * _x, float complex * _y)
void iirdecim_cccf_execute_block(iirdecim_cccf _q, float complex * _x, unsigned int _n, float complex * _y)
float iirdecim_cccf_groupdelay(iirdecim_cccf _q, float _fc)

Interfaces

iirdecim_cccf iirdecim_cccf_create(unsigned int _M, float complex * _b, unsigned int _nb, float complex * _a, unsigned int _na)

Create infinite impulse response decimator from external coefficients. Note that the number of feed-forward and feed-back coefficients do not need to be equal, but they do need to be non-zero. Furthermore, the first feed-back coefficient \(a_0\) cannot be equal to zero, otherwise the filter will be invalid as this value is factored out from all coefficients. For stability reasons the number of coefficients should reasonably not exceed about 8 for single-precision floating-point.

  • _M : decimation factor, 2 <= _M
  • _b : feed-forward coefficients (numerator), shape: (_nb, 1)
  • _nb : number of feed-forward coefficients, 0 < _nb
  • _a : feed-back coefficients (denominator), shape: (_na, 1)
  • _na : number of feed-back coefficients, 0 < _na

iirdecim_cccf iirdecim_cccf_create_default(unsigned int _M, unsigned int _order)

Create decimator object with default Butterworth prototype

  • _M : decimation factor, 2 <= _M
  • _order : filter order, 0 < _order

iirdecim_cccf iirdecim_cccf_create_prototype(unsigned int _M, liquid_iirdes_filtertype _ftype, liquid_iirdes_bandtype _btype, liquid_iirdes_format _format, unsigned int _order, float _fc, float _f0, float _ap, float _as)

Create IIR decimator from prototype

  • _M : decimation factor, 2 <= _M
  • _ftype : filter type (e.g. LIQUID_IIRDES_BUTTER)
  • _btype : band type (e.g. LIQUID_IIRDES_BANDPASS)
  • _format : coefficients format (e.g. LIQUID_IIRDES_SOS)
  • _order : filter order, 0 < _order
  • _fc : low-pass prototype cut-off frequency, 0 <= _fc <= 0.5
  • _f0 : center frequency (band-pass, band-stop), 0 <= _f0 <= 0.5
  • _ap : pass-band ripple in dB, 0 < _ap
  • _as : stop-band ripple in dB, 0 < _as

iirdecim_cccf iirdecim_cccf_copy(iirdecim_cccf _q)

Copy object including all internal objects and state

void iirdecim_cccf_destroy(iirdecim_cccf _q)

Destroy decimator object and free internal memory

void iirdecim_cccf_print(iirdecim_cccf _q)

Print decimator object internals

void iirdecim_cccf_reset(iirdecim_cccf _q)

Reset decimator object

void iirdecim_cccf_execute(iirdecim_cccf _q, float complex * _x, float complex * _y)

Execute decimator on _M input samples

  • _q : decimator object
  • _x : input samples, shape: (_M, 1)
  • _y : output sample pointer

void iirdecim_cccf_execute_block(iirdecim_cccf _q, float complex * _x, unsigned int _n, float complex * _y)

Execute decimator on block of _n*_M input samples

  • _q : decimator object
  • _x : input array, shape: (_n*_M, 1)
  • _n : number of _output_ samples
  • _y : output array, [_sze: _n x 1]

float iirdecim_cccf_groupdelay(iirdecim_cccf _q, float _fc)

Compute and return group delay of object

  • _q : filter object
  • _fc : frequency to evaluate