PsdCascade

Struct PsdCascade 

Source
pub struct PsdCascade<const N: usize> { /* private fields */ }
Expand description

Online power spectral density estimation

This performs efficient long term power spectral density monitoring in real time. The idea is to perform FFTs over relatively short windows and simultaneously decimate the time domain data, everything in multiple stages, then stitch together the FFT bins from the different stages. This allows arbitrarily large effective FFTs sizes in practice with only logarithmically increasing memory and cpu consumption. And it makes available PSD data from higher frequency stages immediately to get rid of the delay in recording and computing large FFTs. The effective full FFT size grows in real-time, is unlimited, and does not need to be fixed. This is well defined with the caveat that spur power (bin power not dominated by noise) depends on the stage-dependent bin width. This also typically what some modern signal analyzers or noise metrology instruments do.

See also csdl or LPSD.

Infinite averaging Incremental updates Automatic FFT stage extension

Implementations§

Source§

impl<const N: usize> PsdCascade<N>

Source

pub fn new(stage_depth: usize) -> Self

Create a new Psd instance

fft_size: size of the FFT blocks and the window stage_length: number of decimation stages. rate change per stage is 1 << stage_length detrend: Detrend method

Source

pub fn set_avg(&mut self, avg: AvgOpts)

Source

pub fn set_detrend(&mut self, d: Detrend)

Source

pub fn process(&mut self, x: &[f32])

Process input items

Source

pub fn psd(&self, opts: &MergeOpts) -> (Vec<f32>, Vec<Break>)

Return the PSD and a Vec of segement break information

§Args
  • min_count: minimum number of averages to include in output, if zero, also return bins that would otherwise be masked by lower stage bins.
§Returns
  • psd: Vec normalized reversed (Nyquist first, DC last)
  • breaks: Vec of stage breaks

Trait Implementations§

Source§

impl<const N: usize> Clone for PsdCascade<N>

Source§

fn clone(&self) -> PsdCascade<N>

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

Auto Trait Implementations§

§

impl<const N: usize> Freeze for PsdCascade<N>

§

impl<const N: usize> !RefUnwindSafe for PsdCascade<N>

§

impl<const N: usize> Send for PsdCascade<N>

§

impl<const N: usize> Sync for PsdCascade<N>

§

impl<const N: usize> Unpin for PsdCascade<N>

§

impl<const N: usize> !UnwindSafe for PsdCascade<N>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V