signal_processing 0.3.0

A signal processing library.
Documentation
use num::{complex::ComplexFloat, traits::MulAddAssign, Complex};

use crate::quantities::ListOrSingle;

pub trait Swift<T, X>: ComplexFloat<Real = T::Real>
where
    Complex<T::Real>: Into<Self>,
    T: ComplexFloat,
    X: ListOrSingle<T>,
{
    fn swift(&mut self, x: X, omega: T::Real, tau: T::Real);
}

impl<T, X> Swift<T, X> for Complex<T::Real>
where
    T: ComplexFloat,
    X: ListOrSingle<T>,
    Complex<T::Real>: MulAddAssign<Complex<T::Real>, T>
{
    fn swift(&mut self, x: X, omega: T::Real, tau: T::Real)
    {
        let w = Complex::from_polar((-tau.recip()).exp(), omega);
        for &x in x.as_view_slice()
        {
            self.mul_add_assign(w, x)
        }
    }
}