diff --git a/src/filter/seriesbiquad.rs b/src/filter/seriesbiquad.rs index ee482a0..3228c2e 100644 --- a/src/filter/seriesbiquad.rs +++ b/src/filter/seriesbiquad.rs @@ -1,20 +1,17 @@ - use super::*; use super::biquad::Biquad; use anyhow::{bail, Result}; - #[derive(Clone, Debug)] #[cfg_attr(feature = "python-bindings", pyclass)] - /// Series of biquads that filter sequentially on an input signal /// /// # Examples /// /// See (tests) -/// +/// pub struct SeriesBiquad { biqs: Vec, } @@ -109,7 +106,16 @@ impl Filter for SeriesBiquad { Box::new(self.clone()) } } - +impl<'a, T: AsArray<'a, Flt>> TransferFunction<'a, T> for SeriesBiquad { + fn tf(&self, fs: Flt, freq: T) -> Ccol { + let freq = freq.into(); + let mut res = self.biqs.first().unwrap().tf(fs, freq); + for i in self.biqs.iter().skip(1) { + res = &res * i.tf(fs, freq); + } + res + } +} #[cfg(test)] mod test { @@ -138,4 +144,4 @@ mod test { inp[1] = 0.5; assert_eq!(&inp, &filtered); } -} \ No newline at end of file +}