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
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§
Source§impl Clone for PolyIIRHalfbandFilter
impl Clone for PolyIIRHalfbandFilter
Source§fn clone(&self) -> PolyIIRHalfbandFilter
fn clone(&self) -> PolyIIRHalfbandFilter
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for PolyIIRHalfbandFilter
impl Debug for PolyIIRHalfbandFilter
Source§impl Default for PolyIIRHalfbandFilter
impl Default for PolyIIRHalfbandFilter
Source§fn default() -> PolyIIRHalfbandFilter
fn default() -> PolyIIRHalfbandFilter
Returns the “default value” for a type. Read more
impl Copy for PolyIIRHalfbandFilter
Auto Trait Implementations§
impl Freeze for PolyIIRHalfbandFilter
impl RefUnwindSafe for PolyIIRHalfbandFilter
impl Send for PolyIIRHalfbandFilter
impl Sync for PolyIIRHalfbandFilter
impl Unpin for PolyIIRHalfbandFilter
impl UnwindSafe for PolyIIRHalfbandFilter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more