"""
Respiratory Analysis Module for Physiological Signal Processing
This module provides comprehensive capabilities for physiological
signal processing including ECG, PPG, EEG, and other vital signs.
Author: vitalDSP Team
Date: 2025-01-27
Version: 1.0.0
Key Features:
- Multiple processing methods and functions
- NumPy integration for numerical computations
- Comprehensive signal analysis
Examples:
---------
Basic usage:
>>> import numpy as np
>>> from vitalDSP.fusion.multimodal_analysis import MultimodalAnalysis
>>> signal = np.random.randn(1000)
>>> processor = MultimodalAnalysis(signal)
>>> result = processor.process()
>>> print(f'Processing result: {result}')
"""
import numpy as np
from vitalDSP.respiratory_analysis.estimate_rr.peak_detection_rr import (
peak_detection_rr,
)
from vitalDSP.respiratory_analysis.estimate_rr.frequency_domain_rr import (
frequency_domain_rr,
)
[docs]
def multimodal_analysis(signals, sampling_rate, preprocess=None, **preprocess_kwargs):
"""
Perform multimodal analysis by combining multiple signals for robust respiratory rate estimation.
Parameters
----------
signals : list of numpy.ndarray
List of input signals (e.g., respiratory, ECG, PPG).
sampling_rate : float
The sampling rate of the signals in Hz.
preprocess : str, optional
The preprocessing method to apply to all signals (e.g., "bandpass", "wavelet").
preprocess_kwargs : dict, optional
Additional arguments for the preprocessing function.
Returns
-------
rr_multimodal : float
The combined respiratory rate estimate in breaths per minute.
Examples
--------
>>> signals = [np.sin(2 * np.pi * 0.2 * np.arange(0, 10, 0.01)),
np.sin(2 * np.pi * 0.25 * np.arange(0, 10, 0.01))]
>>> rr_multimodal = multimodal_analysis(signals, sampling_rate=100, preprocess='bandpass', lowcut=0.1, highcut=0.5)
>>> print(rr_multimodal)
"""
rr_estimates = []
# Estimate RR from each signal using different methods
for signal in signals:
rr_peak = peak_detection_rr(
signal, sampling_rate, preprocess=preprocess, **preprocess_kwargs
)
rr_freq = frequency_domain_rr(
signal, sampling_rate, preprocess=preprocess, **preprocess_kwargs
)
rr_estimates.append(np.mean([rr_peak, rr_freq]))
# Combine RR estimates from all signals
rr_multimodal = np.mean(rr_estimates)
return rr_multimodal