Skip to main content

wifi_densepose_signal/
lib.rs

1//! WiFi-DensePose Signal Processing Library
2//!
3//! This crate provides signal processing capabilities for WiFi-based human pose estimation,
4//! including CSI (Channel State Information) processing, phase sanitization, feature extraction,
5//! and motion detection.
6//!
7//! # Features
8//!
9//! - **CSI Processing**: Preprocessing, noise removal, windowing, and normalization
10//! - **Phase Sanitization**: Phase unwrapping, outlier removal, and smoothing
11//! - **Feature Extraction**: Amplitude, phase, correlation, Doppler, and PSD features
12//! - **Motion Detection**: Human presence detection with confidence scoring
13//!
14//! # Example
15//!
16//! ```rust,no_run
17//! use wifi_densepose_signal::{
18//!     CsiProcessor, CsiProcessorConfig,
19//!     PhaseSanitizer, PhaseSanitizerConfig,
20//!     MotionDetector,
21//! };
22//!
23//! // Configure CSI processor
24//! let config = CsiProcessorConfig::builder()
25//!     .sampling_rate(1000.0)
26//!     .window_size(256)
27//!     .overlap(0.5)
28//!     .noise_threshold(-30.0)
29//!     .build();
30//!
31//! let processor = CsiProcessor::new(config);
32//! ```
33
34pub mod bvp;
35pub mod csi_processor;
36pub mod csi_ratio;
37pub mod features;
38pub mod fresnel;
39pub mod hampel;
40pub mod hardware_norm;
41pub mod motion;
42pub mod phase_sanitizer;
43pub mod ruvsense;
44pub mod spectrogram;
45pub mod subcarrier_selection;
46
47// Re-export main types for convenience
48pub use csi_processor::{
49    CsiData, CsiDataBuilder, CsiPreprocessor, CsiProcessor, CsiProcessorConfig,
50    CsiProcessorConfigBuilder, CsiProcessorError,
51};
52pub use features::{
53    AmplitudeFeatures, CsiFeatures, CorrelationFeatures, DopplerFeatures, FeatureExtractor,
54    FeatureExtractorConfig, PhaseFeatures, PowerSpectralDensity,
55};
56pub use motion::{
57    HumanDetectionResult, MotionAnalysis, MotionDetector, MotionDetectorConfig, MotionScore,
58};
59pub use hardware_norm::{
60    AmplitudeStats, CanonicalCsiFrame, HardwareNormError, HardwareNormalizer, HardwareType,
61};
62pub use phase_sanitizer::{
63    PhaseSanitizationError, PhaseSanitizer, PhaseSanitizerConfig, UnwrappingMethod,
64};
65
66/// Library version
67pub const VERSION: &str = env!("CARGO_PKG_VERSION");
68
69/// Common result type for signal processing operations
70pub type Result<T> = std::result::Result<T, SignalError>;
71
72/// Unified error type for signal processing operations
73#[derive(Debug, thiserror::Error)]
74pub enum SignalError {
75    /// CSI processing error
76    #[error("CSI processing error: {0}")]
77    CsiProcessing(#[from] CsiProcessorError),
78
79    /// Phase sanitization error
80    #[error("Phase sanitization error: {0}")]
81    PhaseSanitization(#[from] PhaseSanitizationError),
82
83    /// Feature extraction error
84    #[error("Feature extraction error: {0}")]
85    FeatureExtraction(String),
86
87    /// Motion detection error
88    #[error("Motion detection error: {0}")]
89    MotionDetection(String),
90
91    /// Invalid configuration
92    #[error("Invalid configuration: {0}")]
93    InvalidConfig(String),
94
95    /// Data validation error
96    #[error("Data validation error: {0}")]
97    DataValidation(String),
98}
99
100/// Prelude module for convenient imports
101pub mod prelude {
102    pub use crate::csi_processor::{CsiData, CsiProcessor, CsiProcessorConfig};
103    pub use crate::features::{CsiFeatures, FeatureExtractor};
104    pub use crate::motion::{HumanDetectionResult, MotionDetector};
105    pub use crate::phase_sanitizer::{PhaseSanitizer, PhaseSanitizerConfig};
106    pub use crate::{Result, SignalError};
107}
108
109#[cfg(test)]
110mod tests {
111    use super::*;
112
113    #[test]
114    fn test_version() {
115        assert!(!VERSION.is_empty());
116    }
117}