The main implementation of the RICA (Robust Independent Component Analysis) algorithm. Contains:
- JAX-based implementation with GPU/Metal acceleration support
SignatureComputerclass for computing signature momentsContrastCalculatorclass for delta computation and contrast functionsOptimizerclass implementing the RICA optimization algorithm- Utility functions for error computation and matrix operations
Implementation of theoretical analysis classes for testing Theorems 4.3 and 4.6:
ContinuityModuliclass for continuity moduli of Theorem 4.3RobustnessModuliclass for the constants of Theorem 4.6
Signal generation utilities with support for various time series types:
SignalGeneratorclass for synthetic signal creation- Support for IID, Ornstein-Uhlenbeck (OU), Moving Average, and ARMA processes
- Signal confounding methods (multiplicative, additive, talking pairs, etc.)
Implementation of SOBI (Second-Order Blind Identification) algorithm for comparison with RICA. Adapted from https://github.com/davidrigie/sobi/blob/master/sobi/sobi.py
Comprehensive robustness analysis script:
- Multi-algorithm comparison (RICA, FastICA, SOBI)
- Various confounding strength testing
- Statistical analysis and visualization
Extended testing for different signal types and Theorem 4.3 validation.
Analysis of perturbation effects and delta parameter relationships.
Visualization tool for understanding the effects of signal confounding:
- Comparison of original vs. confounded signals
- Delta parameter analysis across confounding levels
Real-world application of ICA to the cocktail party problem:
- Audio Files:
gray.mp3,goethe.mp3,kordian.mp3- Source audio signals cocktail_party.py- Main cocktail party separation implementationrobustness_cocktail_party.py- Robustness analysis with real audio dataunmix_cocktail_party.py- Audio unmixing utilitiesgenerate_unmixed_mp3.py- Generate separated audio outputs
Jupyter notebook for point cloud visualization and comparison to FastICA for a two-dimensional i.i.d. signal.
Project dependencies:
numpy
matplotlib
scikit-learn
scipy
statsmodels
signax
jax<0.6.0
jaxlib<0.6.0- JAX Integration: High-performance computing with GPU/Metal acceleration
- Multiple Signal Types: Support for IID, OU, and ARMA processes
- Identifiability Criteria checks: Allows for testing of mean stationarity and the diagonal third-order identifiability condition.
- Comprehensive Testing: Extensive robustness and theoretical validation
pip install -e .pip install -e ".[cuda]"pip install -e ".[metal]"pip install numpy>=1.26.4 scikit-learn>=1.3.2 signax==0.2.1 statsmodelspip install "jax[cuda12_pip]>=0.4.25" "jaxlib[cuda12_pip]>=0.4.25"pip install jax-metal>=0.0.6 jax==0.4.24 jaxlib==0.4.23pip install jax>=0.4.25 jaxlib>=0.4.25After installation, run:
python -c "import jax; print('Available devices:', jax.devices())"python RICA.py
- Ensure NVIDIA drivers are installed
- Verify CUDA 12 compatibility
- Try:
nvidia-smito check GPU status
- Only works on Apple Silicon Macs (M1/M2/M3/M4)
- Ensure macOS is up to date
- Implement a fallback to cpu.