Struct synfx_dsp::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
sourceimpl PolyIIRHalfbandFilter
impl PolyIIRHalfbandFilter
sourcepub fn new(order: usize, steep: bool) -> PolyIIRHalfbandFilter
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 isfalse
, it gives rejection of 106dB at order=8. Transition band is 0.05.
pub fn process(&mut self, input: f32x4) -> f32x4
Trait Implementations
sourceimpl Clone for PolyIIRHalfbandFilter
impl Clone for PolyIIRHalfbandFilter
sourcefn clone(&self) -> PolyIIRHalfbandFilter
fn clone(&self) -> PolyIIRHalfbandFilter
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresourceimpl Debug for PolyIIRHalfbandFilter
impl Debug for PolyIIRHalfbandFilter
sourceimpl Default for PolyIIRHalfbandFilter
impl Default for PolyIIRHalfbandFilter
sourcefn default() -> PolyIIRHalfbandFilter
fn default() -> PolyIIRHalfbandFilter
Returns the “default value” for a type. Read more
impl Copy for PolyIIRHalfbandFilter
Auto Trait Implementations
impl RefUnwindSafe for PolyIIRHalfbandFilter
impl Send for PolyIIRHalfbandFilter
impl Sync for PolyIIRHalfbandFilter
impl Unpin for PolyIIRHalfbandFilter
impl UnwindSafe for PolyIIRHalfbandFilter
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more