audio-lab 0.1.0

Toolkit for audio research and testing
Documentation
use crate::signal::FreqSignal;

impl FreqSignal {
    pub fn freq_spacing(&self) -> f64 {
        self.sample_rate() / self.num_time_steps() as f64
    }

    pub fn nyquist(&self) -> f64 {
        self.sample_rate() / 2.0
    }

    pub fn nearest_freq_index(&self, freq: f64) -> usize {
        let index = (freq / self.freq_spacing()).round() as usize;
        index.min(self.num_freq_bins().saturating_sub(1))
    }
}

#[cfg(test)]
mod tests {
    use crate::signal::{FreqSignal, SignalError};

    #[test]
    fn frequency_helpers() -> Result<(), SignalError> {
        let signal = FreqSignal::zeros(1, 5, 16.0, Some(8))?;

        assert_eq!(signal.freq_spacing(), 2.0);
        assert_eq!(signal.nyquist(), 8.0);
        assert_eq!(signal.nearest_freq_index(0.1), 0);
        assert_eq!(signal.nearest_freq_index(3.1), 2);
        assert_eq!(signal.nearest_freq_index(99.0), 4);

        Ok(())
    }
}