scirs2_series/features/
config.rs

1//! Configuration structures for time series feature extraction
2//!
3//! This module contains all configuration structures used to customize
4//! feature extraction algorithms and their parameters.
5
6/// Configuration for turning points detection and analysis
7#[derive(Debug, Clone)]
8pub struct TurningPointsConfig {
9    /// Minimum relative threshold for detecting turning points
10    pub min_turning_point_threshold: f64,
11    /// Window size for local extrema detection
12    pub extrema_window_size: usize,
13    /// Threshold for major vs minor trend reversals
14    pub major_reversal_threshold: f64,
15    /// Enable detection of advanced patterns (double peaks, head-shoulders, etc.)
16    pub detect_advanced_patterns: bool,
17    /// Smoothing window sizes for multi-scale analysis
18    pub smoothing_windows: Vec<usize>,
19    /// Calculate temporal autocorrelation of turning points
20    pub calculate_temporal_patterns: bool,
21    /// Maximum lag for turning point autocorrelation
22    pub max_autocorr_lag: usize,
23    /// Enable clustering analysis of turning points
24    pub analyze_clustering: bool,
25    /// Minimum sequence length for momentum persistence
26    pub min_sequence_length: usize,
27    /// Enable multi-scale turning point analysis
28    pub multiscale_analysis: bool,
29}
30
31impl Default for TurningPointsConfig {
32    fn default() -> Self {
33        Self {
34            min_turning_point_threshold: 0.01, // 1% relative threshold
35            extrema_window_size: 3,            // 3-point window for local extrema
36            major_reversal_threshold: 0.05,    // 5% threshold for major reversals
37            detect_advanced_patterns: true,
38            smoothing_windows: vec![3, 5, 7, 10, 15], // Multiple smoothing scales
39            calculate_temporal_patterns: true,
40            max_autocorr_lag: 20,
41            analyze_clustering: true,
42            min_sequence_length: 3,
43            multiscale_analysis: true,
44        }
45    }
46}
47
48/// Configuration for advanced spectral analysis feature calculation
49#[derive(Debug, Clone)]
50pub struct SpectralAnalysisConfig {
51    // Power Spectral Density estimation parameters
52    /// Calculate Welch's method PSD
53    pub calculate_welch_psd: bool,
54    /// Calculate periodogram PSD
55    pub calculate_periodogram_psd: bool,
56    /// Calculate autoregressive PSD
57    pub calculate_ar_psd: bool,
58    /// Window length for Welch's method (as fraction of signal length)
59    pub welch_window_length_factor: f64,
60    /// Overlap for Welch's method (as fraction of window length)
61    pub welch_overlap_factor: f64,
62    /// Order for autoregressive PSD estimation
63    pub ar_order: usize,
64
65    // Spectral peak detection parameters
66    /// Enable spectral peak detection
67    pub detect_spectral_peaks: bool,
68    /// Minimum peak height (as fraction of max power)
69    pub min_peak_height: f64,
70    /// Minimum peak distance (in frequency bins)
71    pub min_peak_distance: usize,
72    /// Peak prominence threshold
73    pub peak_prominence_threshold: f64,
74    /// Maximum number of peaks to detect
75    pub max_peaks: usize,
76
77    // Frequency band analysis parameters
78    /// Enable standard EEG frequency band analysis
79    pub calculate_eeg_bands: bool,
80    /// Enable custom frequency band analysis
81    pub calculate_custom_bands: bool,
82    /// Custom frequency band boundaries (in Hz or normalized units)
83    pub custom_band_boundaries: Vec<f64>,
84    /// Enable relative band power calculation
85    pub calculate_relative_band_powers: bool,
86    /// Enable band power ratio calculation
87    pub calculate_band_ratios: bool,
88
89    // Spectral entropy and information measures
90    /// Calculate spectral Shannon entropy
91    pub calculate_spectral_shannon_entropy: bool,
92    /// Calculate spectral Rényi entropy
93    pub calculate_spectral_renyi_entropy: bool,
94    /// Rényi entropy alpha parameter
95    pub renyi_alpha: f64,
96    /// Calculate spectral permutation entropy
97    pub calculate_spectral_permutation_entropy: bool,
98    /// Permutation order for spectral permutation entropy
99    pub spectral_permutation_order: usize,
100    /// Calculate spectral sample entropy
101    pub calculate_spectral_sample_entropy: bool,
102    /// Sample entropy tolerance for spectral domain
103    pub spectral_sample_entropy_tolerance: f64,
104    /// Calculate spectral complexity measures
105    pub calculate_spectral_complexity: bool,
106
107    // Spectral shape and distribution measures
108    /// Calculate spectral flatness (Wiener entropy)
109    pub calculate_spectral_flatness: bool,
110}
111
112impl Default for SpectralAnalysisConfig {
113    fn default() -> Self {
114        Self {
115            // Power Spectral Density estimation parameters
116            calculate_welch_psd: true,
117            calculate_periodogram_psd: true,
118            calculate_ar_psd: false,          // More expensive
119            welch_window_length_factor: 0.25, // 25% of signal length
120            welch_overlap_factor: 0.5,        // 50% overlap
121            ar_order: 10,
122
123            // Spectral peak detection parameters
124            detect_spectral_peaks: true,
125            min_peak_height: 0.1, // 10% of max power
126            min_peak_distance: 2,
127            peak_prominence_threshold: 0.05,
128            max_peaks: 20,
129
130            // Frequency band analysis parameters
131            calculate_eeg_bands: true,
132            calculate_custom_bands: false,
133            custom_band_boundaries: vec![], // Empty by default
134            calculate_relative_band_powers: true,
135            calculate_band_ratios: true,
136
137            // Spectral entropy and information measures
138            calculate_spectral_shannon_entropy: true,
139            calculate_spectral_renyi_entropy: false,
140            renyi_alpha: 2.0,
141            calculate_spectral_permutation_entropy: false,
142            spectral_permutation_order: 3,
143            calculate_spectral_sample_entropy: false,
144            spectral_sample_entropy_tolerance: 0.2,
145            calculate_spectral_complexity: true,
146
147            // Spectral shape and distribution measures
148            calculate_spectral_flatness: true,
149        }
150    }
151}
152
153/// Configuration for enhanced periodogram analysis
154#[derive(Debug, Clone)]
155pub struct EnhancedPeriodogramConfig {
156    // Advanced Periodogram Methods
157    /// Enable Bartlett's method (averaged periodograms)
158    pub enable_bartlett_method: bool,
159    /// Number of segments for Bartlett's method
160    pub bartlett_num_segments: usize,
161    /// Enable enhanced Welch's method
162    pub enable_enhanced_welch: bool,
163    /// Enable multitaper periodogram using Thomson's method
164    pub enable_multitaper: bool,
165    /// Number of tapers for multitaper method
166    pub multitaper_num_tapers: usize,
167    /// Time-bandwidth product for multitaper
168    pub multitaper_bandwidth: f64,
169    /// Enable Blackman-Tukey periodogram
170    pub enable_blackman_tukey: bool,
171    /// Maximum lag for Blackman-Tukey method (fraction of signal length)
172    pub blackman_tukey_max_lag_factor: f64,
173    /// Enable Capon's minimum variance method
174    pub enable_capon_method: bool,
175    /// Enable MUSIC (Multiple Signal Classification) method
176    pub enable_music_method: bool,
177    /// Number of signal sources for MUSIC method
178    pub music_num_sources: usize,
179    /// Enable enhanced autoregressive periodogram
180    pub enable_enhanced_ar: bool,
181    /// Enhanced AR model order
182    pub enhanced_ar_order: usize,
183
184    // Window Analysis and Optimization
185    /// Enable window analysis and optimization
186    pub enable_window_analysis: bool,
187    /// Primary window type to use
188    pub primary_window_type: String,
189    /// Enable automatic window selection
190    pub enable_auto_window_selection: bool,
191    /// Window selection criteria
192    pub window_selection_criteria: String,
193    /// Calculate window effectiveness metrics
194    pub calculate_window_effectiveness: bool,
195    /// Calculate spectral leakage measures
196    pub calculate_spectral_leakage: bool,
197    /// Leakage threshold for warnings
198    pub spectral_leakage_threshold: f64,
199
200    // Cross-Periodogram Analysis
201    /// Enable cross-periodogram analysis
202    pub enable_cross_periodogram: bool,
203    /// Enable coherence function calculation
204    pub enable_coherence_analysis: bool,
205    /// Coherence confidence level
206    pub coherence_confidence_level: f64,
207    /// Enable phase spectrum analysis
208    pub enable_phase_spectrum: bool,
209    /// Phase unwrapping method
210    pub phase_unwrapping_method: String,
211    /// Calculate cross-correlation from periodogram
212    pub calculate_periodogram_xcorr: bool,
213    /// Maximum lag for cross-correlation analysis
214    pub xcorr_max_lag: usize,
215
216    // Statistical Analysis and Confidence
217    /// Enable confidence interval calculation
218    pub enable_confidence_intervals: bool,
219    /// Confidence level for intervals (e.g., 0.95)
220    pub confidence_level: f64,
221    /// Enable statistical significance testing
222    pub enable_significance_testing: bool,
223    /// Significance testing method
224    pub significance_test_method: String,
225    /// Enable goodness-of-fit testing
226    pub enable_goodness_of_fit: bool,
227    /// Null hypothesis spectral model
228    pub null_hypothesis_model: String,
229    /// Enable variance and bias estimation
230    pub enable_variance_bias_estimation: bool,
231
232    // Bias Correction and Variance Reduction
233    /// Enable bias correction methods
234    pub enable_bias_correction: bool,
235    /// Enable variance reduction methods
236    pub enable_variance_reduction: bool,
237    /// Enable smoothing methods
238    pub enable_smoothing: bool,
239    /// Enable zero padding for frequency resolution enhancement
240    pub enable_zero_padding: bool,
241}
242
243impl Default for EnhancedPeriodogramConfig {
244    fn default() -> Self {
245        Self {
246            // Advanced Periodogram Methods
247            enable_bartlett_method: true,
248            bartlett_num_segments: 8,
249            enable_enhanced_welch: true,
250            enable_multitaper: false, // More expensive
251            multitaper_num_tapers: 4,
252            multitaper_bandwidth: 4.0,
253            enable_blackman_tukey: false, // More expensive
254            blackman_tukey_max_lag_factor: 0.25,
255            enable_capon_method: false, // More expensive
256            enable_music_method: false, // Most expensive
257            music_num_sources: 1,
258            enable_enhanced_ar: true,
259            enhanced_ar_order: 10,
260
261            // Window Analysis and Optimization
262            enable_window_analysis: true,
263            primary_window_type: "Hanning".to_string(),
264            enable_auto_window_selection: false,
265            window_selection_criteria: "MinSidelobes".to_string(),
266            calculate_window_effectiveness: true,
267            calculate_spectral_leakage: true,
268            spectral_leakage_threshold: 0.1,
269
270            // Cross-Periodogram Analysis
271            enable_cross_periodogram: false,
272            enable_coherence_analysis: false,
273            coherence_confidence_level: 0.95,
274            enable_phase_spectrum: false,
275            phase_unwrapping_method: "Quality".to_string(),
276            calculate_periodogram_xcorr: false,
277            xcorr_max_lag: 50,
278
279            // Statistical Analysis and Confidence
280            enable_confidence_intervals: false,
281            confidence_level: 0.95,
282            enable_significance_testing: false,
283            significance_test_method: "WhiteNoise".to_string(),
284            enable_goodness_of_fit: false,
285            null_hypothesis_model: "WhiteNoise".to_string(),
286            enable_variance_bias_estimation: false,
287
288            // Bias Correction and Variance Reduction
289            enable_bias_correction: false,
290            enable_variance_reduction: false,
291            enable_smoothing: false,
292            enable_zero_padding: false,
293        }
294    }
295}
296
297/// Configuration for entropy-based feature calculation
298#[derive(Debug, Clone)]
299pub struct EntropyConfig {
300    /// Calculate classical entropy measures (Shannon, Rényi, Tsallis)
301    pub calculate_classical_entropy: bool,
302    /// Calculate differential entropy measures (ApEn, SampEn, PermEn)
303    pub calculate_differential_entropy: bool,
304    /// Calculate multiscale entropy measures
305    pub calculate_multiscale_entropy: bool,
306    /// Calculate conditional and joint entropy measures
307    pub calculate_conditional_entropy: bool,
308    /// Calculate spectral entropy measures
309    pub calculate_spectral_entropy: bool,
310    /// Calculate time-frequency entropy measures
311    pub calculate_timefrequency_entropy: bool,
312    /// Calculate symbolic entropy measures
313    pub calculate_symbolic_entropy: bool,
314    /// Calculate distribution-based entropy measures
315    pub calculate_distribution_entropy: bool,
316    /// Calculate complexity and regularity measures
317    pub calculate_complexity_measures: bool,
318    /// Calculate fractal and scaling entropy measures
319    pub calculate_fractal_entropy: bool,
320    /// Calculate cross-scale entropy measures
321    pub calculate_crossscale_entropy: bool,
322
323    // Parameters for entropy calculations
324    /// Number of bins for discretization (for classical entropy)
325    pub n_bins: usize,
326    /// Embedding dimension for approximate entropy
327    pub embedding_dimension: usize,
328    /// Tolerance for approximate entropy (as fraction of std dev)
329    pub tolerance_fraction: f64,
330    /// Order for permutation entropy
331    pub permutation_order: usize,
332    /// Maximum lag for conditional entropy
333    pub max_lag: usize,
334    /// Number of scales for multiscale entropy
335    pub n_scales: usize,
336    /// Rényi entropy parameter α
337    pub renyi_alpha: f64,
338    /// Tsallis entropy parameter q
339    pub tsallis_q: f64,
340    /// Number of symbols for symbolic encoding
341    pub n_symbols: usize,
342    /// Use fast approximations for expensive calculations
343    pub use_fast_approximations: bool,
344    /// Window size for instantaneous entropy
345    pub instantaneous_window_size: usize,
346    /// Overlap for instantaneous entropy windows
347    pub instantaneous_overlap: f64,
348}
349
350impl Default for EntropyConfig {
351    fn default() -> Self {
352        Self {
353            calculate_classical_entropy: true,
354            calculate_differential_entropy: true,
355            calculate_multiscale_entropy: true,
356            calculate_conditional_entropy: true,
357            calculate_spectral_entropy: true,
358            calculate_timefrequency_entropy: false, // Expensive
359            calculate_symbolic_entropy: true,
360            calculate_distribution_entropy: true,
361            calculate_complexity_measures: true,
362            calculate_fractal_entropy: false,    // Expensive
363            calculate_crossscale_entropy: false, // Expensive
364
365            n_bins: 10,
366            embedding_dimension: 2,
367            tolerance_fraction: 0.2,
368            permutation_order: 3,
369            max_lag: 5,
370            n_scales: 5,
371            renyi_alpha: 2.0,
372            tsallis_q: 2.0,
373            n_symbols: 3,
374            use_fast_approximations: false,
375            instantaneous_window_size: 50,
376            instantaneous_overlap: 0.5,
377        }
378    }
379}
380
381/// Configuration for wavelet analysis
382#[derive(Debug, Clone)]
383pub struct WaveletConfig {
384    /// Wavelet family to use
385    pub family: WaveletFamily,
386    /// Number of decomposition levels
387    pub levels: usize,
388    /// Whether to calculate CWT features
389    pub calculate_cwt: bool,
390    /// CWT scale range (min, max)
391    pub cwt_scales: Option<(f64, f64)>,
392    /// Number of CWT scales
393    pub cwt_scale_count: usize,
394    /// Whether to calculate denoising-based features
395    pub calculate_denoising: bool,
396    /// Denoising threshold method
397    pub denoising_method: DenoisingMethod,
398}
399
400impl Default for WaveletConfig {
401    fn default() -> Self {
402        Self {
403            family: WaveletFamily::Daubechies(4),
404            levels: 5,
405            calculate_cwt: false,
406            cwt_scales: None,
407            cwt_scale_count: 32,
408            calculate_denoising: false,
409            denoising_method: DenoisingMethod::Soft,
410        }
411    }
412}
413
414/// Configuration for multi-window analysis
415#[derive(Debug, Clone)]
416pub struct WindowConfig {
417    /// Small window size (high temporal resolution)
418    pub small_window_size: usize,
419    /// Medium window size (balanced resolution)
420    pub medium_window_size: usize,
421    /// Large window size (low temporal resolution)
422    pub large_window_size: usize,
423    /// Whether to calculate cross-window correlations
424    pub calculate_cross_correlations: bool,
425    /// Whether to perform change detection
426    pub detect_changes: bool,
427    /// Whether to calculate Bollinger bands
428    pub calculate_bollinger_bands: bool,
429    /// Whether to calculate MACD features
430    pub calculate_macd: bool,
431    /// Whether to calculate RSI
432    pub calculate_rsi: bool,
433    /// RSI period
434    pub rsi_period: usize,
435    /// MACD fast period
436    pub macd_fast_period: usize,
437    /// MACD slow period
438    pub macd_slow_period: usize,
439    /// MACD signal period
440    pub macd_signal_period: usize,
441    /// Bollinger band standard deviations
442    pub bollinger_std_dev: f64,
443    /// EWMA smoothing factor
444    pub ewma_alpha: f64,
445    /// Change detection threshold
446    pub change_threshold: f64,
447    /// Change detection threshold (alias for compatibility)
448    pub change_detection_threshold: f64,
449    /// Bollinger band window size
450    pub bollinger_window: usize,
451    /// Bollinger band multiplier (alias for std_dev)
452    pub bollinger_multiplier: f64,
453    /// Normalization window size
454    pub normalization_window: usize,
455}
456
457impl Default for WindowConfig {
458    fn default() -> Self {
459        Self {
460            small_window_size: 5,
461            medium_window_size: 20,
462            large_window_size: 50,
463            calculate_cross_correlations: true,
464            detect_changes: true,
465            calculate_bollinger_bands: true,
466            calculate_macd: true,
467            calculate_rsi: true,
468            rsi_period: 14,
469            macd_fast_period: 12,
470            macd_slow_period: 26,
471            macd_signal_period: 9,
472            bollinger_std_dev: 2.0,
473            ewma_alpha: 0.1,
474            change_threshold: 2.0,
475            change_detection_threshold: 2.0,
476            bollinger_window: 20,
477            bollinger_multiplier: 2.0,
478            normalization_window: 20,
479        }
480    }
481}
482
483/// Configuration for expanded statistical analysis
484#[derive(Debug, Clone)]
485pub struct ExpandedStatisticalConfig {
486    /// Enable higher-order moments calculation (5th and 6th moments)
487    pub calculate_higher_order_moments: bool,
488    /// Enable robust statistics (trimmed means, winsorized mean, MAD)
489    pub calculate_robust_statistics: bool,
490    /// Enable percentile-based measures (P5, P10, P90, P95, P99)
491    pub calculate_percentiles: bool,
492    /// Enable distribution characteristics (L-moments, skewness variants)
493    pub calculate_distribution_characteristics: bool,
494    /// Enable tail statistics (outlier counts, tail ratios)
495    pub calculate_tail_statistics: bool,
496    /// Enable central tendency variations (harmonic, geometric, quadratic means)
497    pub calculate_central_tendency_variations: bool,
498    /// Enable advanced variability measures
499    pub calculate_variability_measures: bool,
500    /// Enable normality tests (Jarque-Bera, Anderson-Darling, etc.)
501    pub calculate_normality_tests: bool,
502    /// Enable advanced shape measures (biweight, Qn/Sn estimators)
503    pub calculate_advancedshape_measures: bool,
504    /// Enable count-based statistics (zero crossings, local extrema)
505    pub calculate_count_statistics: bool,
506    /// Enable concentration measures (Herfindahl, Shannon diversity)
507    pub calculate_concentration_measures: bool,
508    /// Trimming fraction for trimmed means (default: 0.1 for 10% trimming)
509    pub trimming_fraction_10: f64,
510    /// Trimming fraction for trimmed means (default: 0.2 for 20% trimming)
511    pub trimming_fraction_20: f64,
512    /// Winsorizing fraction (default: 0.05 for 5% winsorizing)
513    pub winsorizing_fraction: f64,
514    /// Number of bins for mode approximation (default: sqrt(n))
515    pub mode_bins: Option<usize>,
516    /// Confidence level for normality tests (default: 0.05)
517    pub normality_alpha: f64,
518    /// Whether to use fast approximations for computationally expensive measures
519    pub use_fast_approximations: bool,
520}
521
522impl Default for ExpandedStatisticalConfig {
523    fn default() -> Self {
524        Self {
525            // Enable all categories by default for comprehensive analysis
526            calculate_higher_order_moments: true,
527            calculate_robust_statistics: true,
528            calculate_percentiles: true,
529            calculate_distribution_characteristics: true,
530            calculate_tail_statistics: true,
531            calculate_central_tendency_variations: true,
532            calculate_variability_measures: true,
533            calculate_normality_tests: true,
534            calculate_advancedshape_measures: true,
535            calculate_count_statistics: true,
536            calculate_concentration_measures: true,
537
538            // Default parameter values
539            trimming_fraction_10: 0.1,
540            trimming_fraction_20: 0.2,
541            winsorizing_fraction: 0.05,
542            mode_bins: None, // Use sqrt(n) by default
543            normality_alpha: 0.05,
544            use_fast_approximations: false,
545        }
546    }
547}
548
549/// Configuration for Empirical Mode Decomposition (EMD) analysis
550#[derive(Debug, Clone)]
551pub struct EMDConfig {
552    /// Maximum number of IMFs to extract
553    pub max_imfs: usize,
554    /// Stopping criterion for sifting (standard deviation)
555    pub sifting_tolerance: f64,
556    /// Maximum number of sifting iterations per IMF
557    pub max_sifting_iterations: usize,
558    /// Whether to calculate Hilbert spectral features
559    pub calculate_hilbert_spectrum: bool,
560    /// Whether to calculate instantaneous features
561    pub calculate_instantaneous: bool,
562    /// Whether to calculate EMD-based entropies
563    pub calculate_emd_entropies: bool,
564    /// Interpolation method for envelope generation
565    pub interpolation_method: InterpolationMethod,
566    /// Edge effect handling method
567    pub edge_method: EdgeMethod,
568}
569
570impl Default for EMDConfig {
571    fn default() -> Self {
572        Self {
573            max_imfs: 10,
574            sifting_tolerance: 0.2,
575            max_sifting_iterations: 100,
576            calculate_hilbert_spectrum: true,
577            calculate_instantaneous: true,
578            calculate_emd_entropies: false,
579            interpolation_method: InterpolationMethod::CubicSpline,
580            edge_method: EdgeMethod::Mirror,
581        }
582    }
583}
584
585/// Wavelet family types
586#[derive(Debug, Clone, Copy, PartialEq, Eq)]
587pub enum WaveletFamily {
588    /// Daubechies wavelets (db1-db10)
589    Daubechies(usize),
590    /// Haar wavelet (simplest case of Daubechies)
591    Haar,
592    /// Biorthogonal wavelets
593    Biorthogonal(usize, usize),
594    /// Coiflets wavelets
595    Coiflets(usize),
596    /// Morlet wavelet (for CWT)
597    Morlet,
598    /// Mexican hat wavelet (Ricker)
599    MexicanHat,
600}
601
602/// Denoising threshold methods
603#[derive(Debug, Clone, Copy, PartialEq, Eq)]
604pub enum DenoisingMethod {
605    /// Hard thresholding
606    Hard,
607    /// Soft thresholding
608    Soft,
609    /// Sure thresholding
610    Sure,
611    /// Minimax thresholding
612    Minimax,
613}
614
615/// Window types for spectral analysis
616#[derive(Debug, Clone, Copy, PartialEq)]
617pub enum WindowType {
618    /// Rectangular window
619    Rectangular,
620    /// Hanning window
621    Hanning,
622    /// Hamming window
623    Hamming,
624    /// Blackman window
625    Blackman,
626    /// Kaiser window
627    Kaiser(f64), // Beta parameter
628}
629
630/// Interpolation methods for EMD envelope generation  
631#[derive(Debug, Clone, Copy, PartialEq, Eq)]
632pub enum InterpolationMethod {
633    /// Cubic spline interpolation
634    CubicSpline,
635    /// Linear interpolation
636    Linear,
637    /// Piecewise cubic Hermite interpolation
638    Pchip,
639}
640
641/// Edge effect handling methods for EMD
642#[derive(Debug, Clone, Copy, PartialEq, Eq)]
643pub enum EdgeMethod {
644    /// Mirror reflection at boundaries
645    Mirror,
646    /// Zero padding at boundaries
647    ZeroPadding,
648    /// Extend with constant values
649    Constant,
650    /// Polynomial extrapolation
651    Polynomial,
652}
653
654/// Configuration for general feature extraction
655#[derive(Debug, Clone, Default)]
656pub struct FeatureExtractionOptions {
657    /// Turning points configuration
658    pub turning_points: TurningPointsConfig,
659    /// Enhanced periodogram configuration
660    pub enhanced_periodogram: EnhancedPeriodogramConfig,
661    /// Entropy features configuration
662    pub entropy: EntropyConfig,
663    /// Spectral analysis configuration
664    pub spectral_analysis: SpectralAnalysisConfig,
665    /// Window-based features configuration
666    pub window: WindowConfig,
667    /// Expanded statistical features configuration
668    pub expanded_statistical: ExpandedStatisticalConfig,
669    /// Wavelet features configuration
670    pub wavelet: WaveletConfig,
671    /// EMD features configuration
672    pub emd: EMDConfig,
673}