DirectForm

Struct DirectForm 

Source
pub struct DirectForm<T, const N: usize = 1, const M: usize = 2> {
    pub x: [T; M],
    pub y: [[T; M]; N],
}
Expand description

Direct Form biquad/SOS state

Fields§

§x: [T; M]

Input delay line

[x0, x1]

§y: [[T; M]; N]

Intermediate and output delay lines

[[y0, y1]]

Implementations§

Source§

impl<T: Copy, const N: usize> DirectForm<T, N>

Source

pub fn x0(&self) -> T

Get latest input

Source

pub fn y0(&self) -> T

Get current output

Source

pub fn set_y(&mut self, y: T)

Set current and last output of the last stage.

This is a NOP for N=0.

Trait Implementations§

Source§

impl<T: Clone, const N: usize, const M: usize> Clone for DirectForm<T, N, M>

Source§

fn clone(&self) -> DirectForm<T, N, M>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug, const N: usize, const M: usize> Debug for DirectForm<T, N, M>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T, const N: usize, const M: usize> Default for DirectForm<T, N, M>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<T: Copy + Add<Output = T>, const N: usize> Process<T> for DirectForm<T, N, 1>

N Poles at DC, N zeros at Nyquist

Source§

fn process(&mut self, x: T) -> T

Update the state with a new input and obtain an output
§

fn block(&mut self, x: &[X], y: &mut [Y])

Process a block of inputs into a block of outputs Read more
Source§

impl<C, T: Copy> SplitInplace<T, DirectForm<T>> for Normal<C>
where Self: SplitProcess<T, T, DirectForm1<T>>,

§

fn inplace(&self, state: &mut S, xy: &mut [X])

See also [Inplace::inplace]
Source§

impl<T: 'static + Copy + Add<Output = T> + PartialOrd, C: Copy + Mul<T, Output = A>, A: Add<Output = A> + AsPrimitive<T>> SplitProcess<T, T, DirectForm<T>> for Biquad<C>

Source§

fn process(&self, state: &mut DirectForm1<T>, x0: T) -> T

Process an input into an output Read more
§

fn block(&self, state: &mut S, x: &[X], y: &mut [Y])

Process a block of inputs Read more
Source§

impl<T: Copy + Add<Output = T> + PartialOrd, C> SplitProcess<T, T, DirectForm<T>> for BiquadClamp<C, T>
where Biquad<C>: SplitProcess<T, T, DirectForm1<T>>,

use dsp_process::SplitProcess;
use idsp::iir::*;
let biquad = BiquadClamp::<f32, f32>::from(Biquad::IDENTITY);
let mut state = DirectForm2Transposed::default();
let x = 3.0f32;
let y = biquad.process(&mut state, x);
assert_eq!(x, y);
Source§

fn process(&self, state: &mut DirectForm1<T>, x0: T) -> T

Process an input into an output Read more
§

fn block(&self, state: &mut S, x: &[X], y: &mut [Y])

Process a block of inputs Read more
Source§

impl<C: Copy + Mul<T, Output = A> + Neg<Output = C>, A: Add<Output = A> + AsPrimitive<T>, T: 'static + Copy> SplitProcess<T, T, DirectForm<T>> for Normal<C>

The y1, y2 aren’t DF1 but y1.re() and y1.im()

Source§

fn process(&self, state: &mut DirectForm1<T>, x0: T) -> T

Process an input into an output Read more
§

fn block(&self, state: &mut S, x: &[X], y: &mut [Y])

Process a block of inputs Read more
Source§

impl<T: Copy + Mul<Output = T> + Add<Output = T>> SplitProcess<T, T, DirectForm<T, 0>> for Biquad<T>

use dsp_process::SplitProcess;
use idsp::iir::*;
let biquad = Biquad::<f32>::IDENTITY;
let mut state = DirectForm2Transposed::default();
let x = 3.0f32;
let y = biquad.process(&mut state, x);
assert_eq!(x, y);
Source§

fn process(&self, state: &mut DirectForm2Transposed<T>, x0: T) -> T

Process an input into an output Read more
§

fn block(&self, state: &mut S, x: &[X], y: &mut [Y])

Process a block of inputs Read more
Source§

impl<T: Copy + Add<Output = T> + Mul<Output = T> + PartialOrd> SplitProcess<T, T, DirectForm<T, 0>> for BiquadClamp<T, T>

Source§

fn process(&self, state: &mut DirectForm2Transposed<T>, x0: T) -> T

Process an input into an output Read more
§

fn block(&self, state: &mut S, x: &[X], y: &mut [Y])

Process a block of inputs Read more
Source§

impl<const N: usize, T: 'static + Copy, C: Copy + Mul<T, Output = A>, A: Add<Output = A> + AsPrimitive<T>> SplitProcess<T, T, DirectForm<T, N>> for Cascade<[Biquad<C>; N]>

let mut state = DirectForm1 {
    x: [0.0, 1.0],
    y: [[2.0, 3.0]],
};
let x0 = 4.0;
let y0 = Biquad::<f32>::IDENTITY.process(&mut state, x0);
assert_eq!(y0, x0);
assert_eq!(state.x, [x0, 0.0]);
assert_eq!(state.y[0], [y0, 2.0]);
Source§

fn process(&self, state: &mut DirectForm<T, N>, x0: T) -> T

Process an input into an output Read more
§

fn block(&self, state: &mut S, x: &[X], y: &mut [Y])

Process a block of inputs Read more

Auto Trait Implementations§

§

impl<T, const N: usize, const M: usize> Freeze for DirectForm<T, N, M>
where T: Freeze,

§

impl<T, const N: usize, const M: usize> RefUnwindSafe for DirectForm<T, N, M>
where T: RefUnwindSafe,

§

impl<T, const N: usize, const M: usize> Send for DirectForm<T, N, M>
where T: Send,

§

impl<T, const N: usize, const M: usize> Sync for DirectForm<T, N, M>
where T: Sync,

§

impl<T, const N: usize, const M: usize> Unpin for DirectForm<T, N, M>
where T: Unpin,

§

impl<T, const N: usize, const M: usize> UnwindSafe for DirectForm<T, N, M>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.