pub struct Lowpass<const N: usize>(/* private fields */);
Expand description
Arbitrary order, high dynamic range, wide coefficient range, lowpass filter implementation. DC gain is 1.
Type argument N is the filter order. N must be 1
or 2
.
The filter will cleanly saturate towards the i32
range.
Both filters have been optimized for accuracy, dynamic range, and speed on Cortex-M7.
Trait Implementations§
source§impl<const N: usize> Filter for Lowpass<N>
impl<const N: usize> Filter for Lowpass<N>
source§type Config = [i32; N]
type Config = [i32; N]
The filter configuration Config
contains the filter gains.
For the first-order lowpass this is a single element array [k]
with
the corner frequency in scaled Q31:
k = pi*(1 << 31)*f0/fn
where
f0
is the 3dB corner frequency and
fn
is the Nyquist frequency.
The corner frequency is warped in the usual way.
For the second-order lowpass this is [k**2/(1 << 32), -k/q]
with q = 1/sqrt(2)
for a Butterworth response.
In addition to the poles at the corner frequency the filters have zeros at Nyquist.
The first-order lowpass works fine and accurate for any positive gain
1 <= k <= (1 << 31) - 1
.
The second-order lowpass works and is accurate for
1 << 16 <= k <= q*(1 << 31)
.
impl<const N: usize> Copy for Lowpass<N>
Auto Trait Implementations§
impl<const N: usize> Freeze for Lowpass<N>
impl<const N: usize> RefUnwindSafe for Lowpass<N>
impl<const N: usize> Send for Lowpass<N>
impl<const N: usize> Sync for Lowpass<N>
impl<const N: usize> Unpin for Lowpass<N>
impl<const N: usize> UnwindSafe for Lowpass<N>
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)