Educational Jupyter notebooks for adaptive and blind signal processing. A minimal, clean implementation collection for educational demonstration and hands-on experimentation.
- Adaptive Signal Processing (LMS, ALE, ANC)
- Blind Source Separation (JADE, FastICA, SOBI)
- Designed for seminars, lectures, and hands-on practice.
Run notebooks directly in Google Colab via the badges below.
Repository: https://github.com/ogawa-tdu/dsp-adaptive-blind
Recommended Learning Path:
FND → ASP → (BE or BSS)
Choose BE for blind equalization problems (channel compensation),or BSS for source separation problems.
- Open a notebook using the "Open in Colab" badge.
- Run all cells from top to bottom.
- Modify key parameters (e.g., SNR, step size, filter order, lag number) and observe how the results change.
No installation is required if you use Google Colab.
These notebooks are designed for exploration.
- Change one parameter at a time and observe the effect.
- Try extreme values to understand failure cases.
- Compare time-domain and frequency-domain behavior.
- Ask: Why does this work? When does it fail?
Signal processing is best understood through controlled experimentation.
- Stability vs. convergence speed (LMS step size)
- Noise level vs. recoverability (SNR)
- Model order vs. performance
- Assumptions vs. reality (stationarity, independence, etc.)
notebooks/
├── ASP/
│ ├── DSP_ASP_01_LMS.ipynb
│ ├── DSP_ASP_02_ALE.ipynb
│ ├── DSP_ASP_03_ANC.ipynb
│ └── DSP_ASP_04_SysIdentification_Compare.ipynb
├── BE/
│ ├── DSP_BE_01_Sato_Algorithm.ipynb
│ └── DSP_BE_02_CMA.ipynb
├── BSS/
│ ├── DSP_BSS_01_JADE.ipynb
│ ├── DSP_BSS_02_FastICA.ipynb
│ └── DSP_BSS_03_SOBI.ipynb
└── FND/
├── DSP_FND_01_Signal_and_Noise.ipynb
└── DSP_FND_02_Wiener_filter.ipynb
Adaptive Signal Processing
- LMS : System identification
- ALE : Periodic signal enhancement
- ANC : Reference-based noise cancellation
Blind Source Separation
- JADE / FastICA : Higher-order statistics (ICA)
- SOBI : Second-order statistical BSS
Fundamental signal processing concepts and baselines for later algorithms (SNR, optimal filtering).
Explores the relationship between SNR and signal clarity in both time and frequency domains.
Demonstrates theoretical optimal noise reduction using the Wiener filter (MMSE).
Explores frequency-domain gain design and practical limitations under real-world assumptions.
Online/recursive parameter estimation: update a filter from data to track changing systems and environments.
Adaptive filtering using LMS algorithm.
Demonstrates convergence behavior and coefficient identification.
Noise reduction using Adaptive Line Enhancer (ALE). Demonstrates periodic component extraction from noisy signals.
Adaptive Noise Cancellation (ANC) using LMS.
Implements a simplified feedforward ANC model without secondary path effects.
Compares adaptive filters for system identification under white/colored inputs. Highlights convergence speed, stability, and parameter sensitivity (e.g., RLS forgetting factor).
⚠️ Note on RLS: RLS is sensitive to λ and initialization; inappropriate settings may cause instability.
Recover transmitted signals from unknown channels without training sequences.
Blind equalization using the Sato algorithm for multi-level PAM signals.
Includes theoretical explanation, residual ISI monitoring, and pseudo-constellation (delay embedding) visualization.
Blind equalization using the Constant Modulus Algorithm (CMA).
Demonstrates moment-based adaptation, residual ISI monitoring, and pseudo-constellation (delay embedding) visualization.
Recover latent sources from mixtures using structural assumptions (e.g., independence, temporal diversity, low-rankness).
Blind source separation using fourth-order statistics (JADE). Demonstrates separation via joint diagonalization of cumulant matrices.
Blind source separation using fixed-point ICA (FastICA). Demonstrates the effect of nonlinearity selection on separation performance.
Blind source separation using second-order statistics (SOBI). Demonstrates the impact of lag design on separation quality.
Tested on Google Colab (recommended)
- Python 3.9+
- NumPy
- SciPy
- Matplotlib
- librosa (optional, for audio demos)
- Ideal low-pass vs Wiener comparison
- Non-stationary noise example
- Causal FIR Wiener
- Widely Linear LMS
- Kalman Filter
- Sparse algorithm
- Natural Gradient ICA
- Frequency domain ICA
- NMF based BSS
- Deep Learning based BSS
- Deep Unfolding based BSS
MIT License. Free for educational, research, and commercial use.