NeuroArm
EEG signal classification and visualization for a brain-controlled prosthetic arm.
Brain-computer interface research, Jul 2024 – May 2025

Research engineering on a brain-computer interface: preprocessing EEG, extracting frequency-band features, training classifiers for movement intent, and visualizing the signal path from brain to arm.
Problem
A prosthetic arm driven by thought needs a reliable way to turn noisy, low-amplitude EEG into a small set of commands. The signal is non-stationary, differs from person to person, and is buried in artifacts from blinks and muscle movement.
Why it was worth building
NeuroArm was an industry research project at IS360 Technologies. It sits where signal processing, machine learning and interface design meet, and a classifier’s output only matters if someone can see and trust it.
Architecture
- EEG capturemulti-channel headset, e.g. AF3 … AF4
- Preprocessfiltering, standardization
- Featuresband power: delta, theta, alpha, beta, gamma
- ClassifyRandom Forest / MLP
- Intentleft vs right
- Arm commandvisualized in the web app
Technical decisions
Frequency-band features before deep learning
Band-power features (delta through gamma, mean and standard deviation per electrode) are compact and interpretable, and they work with small datasets where end-to-end deep models overfit.
Compare a tree ensemble against a neural network
The public notebooks train both a 100-tree Random Forest and a two-layer MLP (128 → 64, dropout 0.3, early stopping) on standardized features, so the simpler model has to be beaten rather than assumed worse.
Make the pipeline visible
The NeuroArm web app walks through upload, visualization, filtering, feature extraction, training and results. It is meant for people who need to inspect the pipeline, not just read a number.
Challenges
Noisy, subject-specific signals
EEG varies across sessions and people. The reported numbers come from a random split of one dataset, so they measure within-dataset performance, not how well a model transfers to a new user.
Honest evaluation
One accuracy number hides class balance. The notebook reports per-class precision and recall (0.96 / 0.87 and 0.88 / 0.96) and a confusion matrix.
What I built
- pandas and scikit-learn pipeline: load, scale with StandardScaler, 80/20 train/test split, train RandomForestClassifier(n_estimators=100).
- Keras MLP with dropout and early stopping for comparison.
- Trained model and scaler exported with joblib for reuse in inference.
- React + TypeScript web app (Vite, Tailwind) for uploading EEG files and walking through the pipeline stages.
Results
- 91.6% test accuracy (macro F1 0.92) for the Random Forest on the public 12,811-sample EEG dataset in the BCI repository.
Takeaways
- Per-class metrics and a confusion matrix say more than headline accuracy, especially with near-balanced classes.
- For small EEG datasets, feature engineering and a strong classical baseline go a long way before deep learning pays off.
What I'd do next
- Cross-subject validation (leave-one-subject-out) to measure how well models generalize to new users.
- Streaming inference with windowed features to close the loop in real time.