-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Taiyou edited this page Jan 27, 2026
·
5 revisions
Feature extraction toolbox for gait dynamics analysis.
- API Reference - Full API documentation for all classes and methods
- Tutorial - Step-by-step guide for gait RQA analysis
- PyRQA Comparison - Numerical validation against PyRQA
- Gait Features - Gait-specific features (Poincare, Harmonic Ratio, ACI)
This toolbox provides two categories of features:
| Class | Purpose |
|---|---|
RecurrenceAnalyzer |
RQA for single time series (9 measures) |
CrossRecurrenceAnalyzer |
CRQA for two coupled time series (8 measures) |
RecurrencePlotter |
Recurrence plots and comparison charts |
| Class | Purpose |
|---|---|
PoincareAnalyzer |
Poincare plot SD1/SD2 for stride interval series |
HarmonicRatioAnalyzer |
Harmonic ratio for gait symmetry |
AttractorComplexityIndex |
Long-term divergence exponent (ACI) |
StrideVariability |
CV, MAD, IQR, asymmetry index |
GaitFeatureExtractor |
Unified sklearn-compatible extractor |
The gait-specific classes implement measures not available in standard Python libraries (nolds, antropy, neurokit2, EntropyHub):
- Poincare SD1/SD2: neurokit2 has this only for HRV (requires R-peaks), not for arbitrary stride intervals
- Harmonic Ratio: gait-domain-specific, no library provides it
- ACI: requires long-term fitting on Rosenstein divergence curve, not exposed by nolds
- Stride Variability: unified API for standard gait variability descriptors
For measures that ARE available in existing libraries (Sample Entropy, DFA, Lyapunov, etc.), GaitAnalysisPipeline wraps them automatically.
| Class | Purpose |
|---|---|
GaitAnalysisPipeline |
Single interface for all features (up to 30) |
Integrates internal features (RQA, Poincare, ACI, Variability) with external libraries:
| Library | Features Added |
|---|---|
nolds (optional) |
Sample Entropy, DFA, Lyapunov, Hurst, Correlation Dimension |
antropy (optional) |
Permutation/SVD/Approximate Entropy, Higuchi/Katz FD, DFA |
neurokit2 (optional) |
Multiscale Entropy |
from src import GaitAnalysisPipeline
pipeline = GaitAnalysisPipeline(embedding_dim=3, time_delay=5, target_rr=0.05)
results = pipeline.analyze(stride_intervals)
print(pipeline.summary())
# Bilateral coupling
bilateral = pipeline.analyze_bilateral(left, right)
git clone https://github.com/Taiyou/gait-dynamics-features.git
cd gait-dynamics-features
pip install -e .import numpy as np
from src import RecurrenceAnalyzer, GaitFeatureExtractor
# RQA
signal = np.sin(np.linspace(0, 10 * np.pi, 500))
analyzer = RecurrenceAnalyzer(embedding_dim=3, time_delay=10, theiler_window=1)
eps = analyzer.auto_threshold(signal, target_rr=0.05)
measures = analyzer.compute_rqa_measures(signal, threshold=eps)
# Gait features
stride_intervals = 1.1 + 0.03 * np.random.randn(200)
extractor = GaitFeatureExtractor(embedding_dim=3, time_delay=10)
features = extractor.compute_all(stride_intervals)