A comprehensive signal processing project for analyzing EEG (electroencephalography) brain signals using advanced digital signal processing techniques.
This project performs in depth analysis of brain signals from EDF (European Data Format) files using time domain, frequency domain, and time frequency analysis methods. The analysis includes signal visualization, spectral analysis, artifact detection, and seizure identification.
The analysis uses the BORI EEG dataset consisting of 10 EDF files containing brain signal recordings:
- Files: 10 EDF recordings (bori_dataset_10s_eeg_1.edf through bori_dataset_10s_eeg_10.edf)
- Duration: 10 seconds per recording
- Sampling Frequency: 256 Hz
- Format: European Data Format (EDF)
Brain-Signals-Analysis/
├── Brain-Signals.ipynb # Main analysis notebook
├── README.md # This file
└── bori_dataset_edf/ # Dataset folder
├── bori_dataset_10s_eeg_1.edf
├── bori_dataset_10s_eeg_2.edf
└── ... (10 files total)
Objectives: Load EEG signals and perform initial frequency domain analysis.
Methods:
- Loading EDF files using PyEDFlib library
- Time domain visualization of raw signals
- Fast Fourier Transform (FFT) for frequency domain representation
- Power Spectral Density (PSD) computation using Welch's method
Key Features:
- Signal extraction and preprocessing
- FFT magnitude spectrum visualization (full and EEG range 0-50 Hz)
- Reference markers for EEG frequency bands (Delta, Theta, Alpha, Beta)
- PSD analysis for each signal using 256-point Welch periodogram
Objectives: Perform advanced time-frequency analysis to capture signal dynamics.
Methods:
-
Short-Time Fourier Transform (STFT)
- Window length: 256 samples
- Window function: Periodic Hann window
- Overlap: 75% (ensuring 192 samples per hop)
- FFT length: 256 points
- Scaling: Spectrum mode
-
Continuous Wavelet Transform (CWT)
- Wavelet: Morlet wavelet (optimal for time-frequency localization)
- Scales: 1-127 (corresponding to frequency range ~2-128 Hz)
- Scalogram visualization showing time-frequency energy distribution
Key Output: Time-frequency representations revealing non-stationary signal characteristics and transient events.
Objectives: Demonstrate the Nyquist Shannon sampling theorem and aliasing phenomena.
Methods:
- Downsampling signals to 32 Hz (below Nyquist frequency of 128 Hz)
- Signal resampling using scipy.signal.resample
- Visual comparison of original vs. downsampled signals
Findings: Clear demonstration of aliasing artifacts when sampling below Nyquist frequency, illustrating critical importance of adequate sampling rates for accurate signal representation.
Objectives: Remove unwanted frequency components from signals.
Methods:
- Butterworth bandpass filter design
- Filter specifications: 4th-order, 1-30 Hz passband
- Frequency normalization for filter coefficient calculation
- Linear filtering (lfilter) for zero-phase operation
Results:
- PSD comparison before and after filtering
- Time domain visualization of original vs. filtered signals
- Effective removal of noise outside the EEG frequency range
Objectives: Identify and localize pathological events and non neural artifacts in EEG signals.
Detection Algorithms:
-
Seizure Detection
- Bandpass filter: 6 8 Hz (theta seizure range)
- Envelope detection and thresholding (mean + 3σ)
- Minimum gap specification: 0.5 seconds (prevents duplicate detections)
- Onset timing identification
-
Eye Blink Detection
- Sliding window: 150 ms
- Threshold based peak detection (mean + 3.5σ)
- Onset estimation via backward search from peak
- Baseline relative positioning
-
Muscle Artifact Detection
- 1 second sliding window analysis (50% overlap)
- Frequency band analysis:
- Muscle band: 40-100 Hz
- Baseline band: 1-30 Hz
- Power ratio thresholding (muscle/baseline > 0.02)
- Welch periodogram for spectral estimation
Visualization: Comprehensive EEG plots with color coded vertical markers indicating detected events:
- Red dashed lines: Seizure activity
- Blue dashed lines: Eye blinks
- Green dashed lines: Muscle artifacts
- numpy: Numerical computations and array operations
- scipy.signal: DSP functions (STFT, Welch, filtering, resampling)
- scipy.fft: Fast Fourier Transform operations
- matplotlib: Data visualization
- pyedflib: EDF file reading and writing
- PyWavelets: Continuous wavelet transform implementation| Parameter | Value | Justification |
|---|---|---|
| Sampling Frequency (fs) | 256 Hz | Nyquist rate for EEG signals (> 2×128 Hz max component) |
| STFT Window Length | 256 samples | Matches sampling frequency, provides 1 second resolution |
| STFT Overlap | 75% (192 samples) | Captures temporal dynamics with sufficient resolution |
| Butterworth Order | 4 | Balanced passband ripple and phase response |
| FFT Length | 256 points | Efficient computation and adequate frequency resolution |
| CWT Scales | 1-127 | Covers relevant EEG frequency range (2 128 Hz) |
| Wavelet | Morlet | Optimal time-frequency localization for EEG analysis |
- Data Loading: Read EDF files and extract signal channels
- Preprocessing: Time and frequency domain visualization
- Spectral Analysis: FFT and Welch's method for PSD
- Time-Frequency Analysis: STFT and CWT computations
- Sampling Analysis: Demonstrate aliasing effects
- Filtering: Apply bandpass Butterworth filter
- Artifact Detection: Identify seizures, blinks, and muscle artifacts
- Visualization: Comprehensive plotting of all results
- Successful loading and analysis of 10 EEG signals
- Detailed time-frequency characterization using multiple methods
- Clear demonstration of sampling theorem principles
- Effective frequency domain filtering with minimal phase distortion
- Robust detection of pathological and artifactual events in EEG signals
- Visual correlation between temporal and spectral representations
Figure 1: Raw EEG signal in time domain showing 10 second recording at 256 Hz sampling frequency
Figure 2: Fast Fourier Transform magnitude spectrum showing frequency components in full range and EEG specific range (0 50 Hz) with band markers
Figure 3: Power Spectral Density using Welch's method, demonstrating energy distribution across frequency bands
Figure 4: Short Time Fourier Transform and Spectrogram visualization showing temporal evolution of frequency components
Figure 5: Wavelet scalogram using Morlet wavelet showing multi-scale time-frequency decomposition
Figure 6: Comparison of original signal (256 Hz) and downsampled signal (32 Hz) demonstrating aliasing artifacts below Nyquist frequency
Figure 7: Original vs. bandpass filtered signal (1 30 Hz) showing effective noise reduction
Figure 8: Power Spectral Density of filtered signal showing dominant energy in passband region
Figure 9: Comprehensive artifact detection visualization with color-coded markers for seizure activity (red), eye blinks (blue), and muscle artifacts (green)
To run the analysis:
jupyter notebook Brain-Signals.ipynbExecute cells sequentially to perform the complete analysis pipeline. Each section is self-contained and includes visualization of intermediate results.
- European Data Format (EDF) Standard: PhysioNet EDF Format
- Signal Processing: Oppenheim & Schafer, "Discrete Time Signal Processing"
- Wavelet Analysis: Grossmann & Morlet, "Decomposition of Hardy Functions into Square Integrable Wavelets"
- EEG Analysis: Teplan, "Fundamentals of EEG Measurement"
Mehdi Benabi