Struct PolyIIRHalfbandFilter

Source
pub struct PolyIIRHalfbandFilter { /* private fields */ }
Expand description

This is a polyphase iir halfband filter (cutoff at fs/4) consisting of cascades of allpasses. translated from the freely available source code at https://www.musicdsp.org/en/latest/Filters/39-polyphase-filters.html

Usage:

 #![feature(portable_simd)]
 use std::simd::f32x4;

 use synfx_dsp::PolyIIRHalfbandFilter;

 struct MyNiceDistort {
     upsampler: PolyIIRHalfbandFilter,
     downsampler: PolyIIRHalfbandFilter,
 }

 impl MyNiceDistort {
     fn new() -> Self {
         Self {
             upsampler: PolyIIRHalfbandFilter::new(8, true),
             downsampler: PolyIIRHalfbandFilter::new(8, true),
         }
     }

     fn process(&mut self, in_l: f32, in_r: f32) -> (f32, f32) {
         let frame = f32x4::from_array([in_l, in_r, 0.0, 0.0]);
         // Zero stuffing:
         let input = [frame, f32x4::splat(0.)];
         // Prepare the output:
         let mut output = f32x4::splat(0.);
         for i in 0..2 {
             // Upsampling:
             let frame = self.upsampler.process(f32x4::splat(2.) * input[i]);

             // Apply some non linear stuff:
             let out = synfx_dsp::tanh_levien(frame * f32x4::splat(10.0));

             // Downsampling:
             output = self.downsampler.process(out);
         }

         let output = output.as_array();
         (output[0], output[1])
     }
 }

Implementations§

Source§

impl PolyIIRHalfbandFilter

Source

pub fn new(order: usize, steep: bool) -> PolyIIRHalfbandFilter

Create a new PolyIIRHalfbandFilter with the given order.

  • order can be 2, 4, 6, 8, 10 or 12
  • if steep is true, it gives rejection of 69dB at order=8. Transition band is 0.01. if steep is false, it gives rejection of 106dB at order=8. Transition band is 0.05.
Source

pub fn process(&mut self, input: f32x4) -> f32x4

Trait Implementations§

Source§

impl Clone for PolyIIRHalfbandFilter

Source§

fn clone(&self) -> PolyIIRHalfbandFilter

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 Debug for PolyIIRHalfbandFilter

Source§

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

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

impl Default for PolyIIRHalfbandFilter

Source§

fn default() -> PolyIIRHalfbandFilter

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

impl Copy for PolyIIRHalfbandFilter

Auto Trait Implementations§

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.