The Fix That Can't Ship: Making r_norm Causal for Real-Time BCI
My drift fix works beautifully in a notebook — and would fail on a real implant. It quietly looks into the future. This post makes it causal, and measures the honest cost of that.

My drift fix works beautifully in a notebook — and would fail on a real implant. It quietly looks into the future. This post makes it causal, and measures the honest cost of that.

Part 2 showed r_norm stabilizes SBP features across days. Part 3 asks the next question — does a single nonlinear decoder trained on all 30 sessions, using both SBP r_norm and TCR z_norm, outperform the per-day Ridge baseline across every transfer horizon?

Part 1 showed that a static decoder trained on Day 0 raw SBP actively misleads by year three. Here's the preprocessing step that fixes it — no cross-day alignment, no labels, no retraining.

I loaded 30 sessions of chronic Utah-array data spanning three years and watched a trained decoder go from useful to actively harmful. Here's what the data showed me — and why I think it's a problem worth solving.
