Add interface to query coefficients from chain

This commit is contained in:
Laurence Withers 2014-07-07 11:57:16 +00:00
commit b12a49542a
2 changed files with 48 additions and 0 deletions

View file

@ -217,6 +217,25 @@ iir_filter(struct iir_filter_t* fi, double samp)
int
iir_filter_coeff_sets(const struct iir_filter_t* fi)
{
int count;
for(count = 0; fi; ++count) fi = fi->next;
return count;
}
struct iir_coeff_t*
iir_filter_coeff_set(const struct iir_filter_t* fi, int idx)
{
while(idx--) fi = fi->next;
return iir_coeff_new(fi->nc, fi->c, fi->nd, fi->d);
}
/* options for text editors
vim: expandtab:ts=4:sw=4
*/

View file

@ -121,6 +121,35 @@ double iir_filter(struct iir_filter_t* fi, double samp);
/*! \brief Count number of coefficient sets in IIR filter chain
\param fi Filter object.
\returns Number of coefficient sets in chain (≥1).
Returns the number of discrete IIR filter coefficient sets used in the filter
object \a fi. There will always be at least one set.
*/
int iir_filter_coeff_sets(const struct iir_filter_t* fi);
/*! \brief Get IIR coefficient set from filter chain
\param fi Filter object.
\param idx Index of coefficient set (0 ≤ \a idx < \ref iir_filter_coeff_sets()).
\returns Newly-allocated coefficient set object.
Extracts the IIR filter coefficient set for the given step (\a idx) in the chain
of filters in \a fi. Returns a newly-allocated filter coefficient set object
which can be freed with \ref iir_coeff_free().
*/
struct iir_coeff_t* iir_filter_coeff_set(const struct iir_filter_t* fi,
int idx);
/*!@}*/
/* options for text editors
vim: expandtab:ts=4:sw=4:syntax=c.doxygen