use serde::{Deserialize, Serialize};
use dspk_ops::filter::FilterSpec;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum NeuralBand {
Ap,
Lfp,
Ripple,
Emg,
}
impl NeuralBand {
pub fn low_hz(&self) -> f64 {
match self {
NeuralBand::Ap => 300.0,
NeuralBand::Lfp => 0.5,
NeuralBand::Ripple => 150.0,
NeuralBand::Emg => 300.0,
}
}
pub fn high_hz(&self) -> f64 {
match self {
NeuralBand::Ap => 6000.0,
NeuralBand::Lfp => 300.0,
NeuralBand::Ripple => 250.0,
NeuralBand::Emg => 5000.0,
}
}
pub fn filter_spec(&self) -> FilterSpec {
FilterSpec::bandpass(self.low_hz(), self.high_hz())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_neural_bands() {
assert_eq!(NeuralBand::Ap.low_hz(), 300.0);
assert_eq!(NeuralBand::Ap.high_hz(), 6000.0);
let sos = NeuralBand::Ap.filter_spec().design(30000.0).unwrap();
assert_eq!(sos.len(), 5);
assert!(NeuralBand::Lfp.filter_spec().design(2500.0).is_ok());
}
}