#![doc = include_str!("../README.md")]
#![cfg_attr(not(feature = "std"), no_std)]
pub mod frequency_domain;
pub mod geometric_domain;
pub mod io_utils;
pub mod processing_utils;
pub mod test_data;
pub mod time_domain;
pub mod welch;
#[derive(Debug, PartialEq, Clone, Copy)]
pub struct HrvMetrics<T> {
pub time: crate::time_domain::TimeMetrics<T>,
pub frequency: crate::frequency_domain::FrequencyMetrics<T>,
pub geometric: crate::geometric_domain::GeometricMetrics<T>,
}
#[macro_export]
macro_rules! standard_analysis {
( $x:expr ) => {{
use cardio_rs::{
frequency_domain::FrequencyMetrics,
geometric_domain::GeometricMetrics,
processing_utils::{DetectOutliers, EctopicMethod, RRIntervals},
time_domain::TimeMetrics,
};
let mut rr_intervals = RRIntervals::new($x);
rr_intervals.detect_ectopics(EctopicMethod::Karlsson);
rr_intervals.detect_outliers(&300., &2_000.);
rr_intervals.remove_outliers_ectopics();
let time = TimeMetrics::compute(rr_intervals.as_slice());
let frequency = FrequencyMetrics::compute(rr_intervals.as_slice(), 10.);
let geometric = GeometricMetrics::compute(rr_intervals.as_slice());
HrvMetrics {
time,
frequency,
geometric,
}
}};
( $path:expr, $signal:expr, $rate:expr ) => {{
#[cfg(feature = "std")]
{
use cardio_rs::io_utils::{Data, DataBuilder};
let data = DataBuilder::new($path.into(), $signal.into())
.with_rate($rate)
.build()
.unwrap();
standard_analysis!(data.get_rr())
}
}};
}