JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

速度卡爾曼濾波器:最佳即時動作學解碼

從第一原理建立皮質內運動 BCI 的主力解碼器:一個以遞迴方式、逐一時間窗估計的線性高斯狀態空間模型。

把運動意圖當成隱藏狀態

把你想要的東西建模成隱藏狀態 \mathbf{x}_k——對游標而言就是位置與速度,\mathbf{x} = [x, y, v_x, v_y, 1]^\top(末尾的 1 用來吸收基線偏移)。你量測到的神經特徵是觀測量 \mathbf{z}_k——即分箱放電率向量。一個狀態空間模型以兩條線性高斯方程把它們耦合起來。

\begin{aligned} \mathbf{x}_k &= A\,\mathbf{x}_{k-1} + \mathbf{w}_k, & \mathbf{w}_k &\sim \mathcal{N}(\mathbf{0}, W) \\ \mathbf{z}_k &= C\,\mathbf{x}_k + \mathbf{q}_k, & \mathbf{q}_k &\sim \mathcal{N}(\mathbf{0}, Q) \end{aligned}

上式為軌跡(狀態)模型,下式為觀測(編碼)模型。解碼器所知的一切都住在 A, W, C, Q 之中。

卡爾曼濾波器把運動建模成一個隨時間滑行前進的隱藏狀態(軌跡模型),並由它生成你觀測到的神經放電(觀測模型)。解碼器對世界的一切假設,都塞進四個矩陣裡。

\mathbf{x}_k
k 步的隱藏狀態(例如游標速度)。
\mathbf{z}_k
k 步觀測到的神經放電。
A,\ W
狀態轉移與其過程雜訊共變異數。
C,\ Q
狀態如何映到神經觀測,以及觀測雜訊。

A 說「速度會延續」;C 說「這些神經元對那個速度放這麼多電」——這就是速度卡爾曼濾波器

兩個模型:動力學與編碼

軌跡模型 A 是一個平滑先驗——一個近似隨機漫步的過程,表示速度會延續且略受阻尼;W 設定狀態每個時間窗可跳動的幅度。觀測模型 C編碼映射:每一列是某通道對動作學參數的線性調諧,因此 C\mathbf{x} 是該狀態所預測的放電率,而 Q 是神經雜訊共變異數。兩者皆由一段短暫的校準區段(觀察或嘗試的動作)擬合而得。

預測—更新遞迴

每個時間窗執行兩步。預測:把上一個估計推過動力學,並讓不確定性增長。更新:依你對新神經量測的信任程度,把預測拉向該量測。

\hat{\mathbf{x}}_k^- = A\,\hat{\mathbf{x}}_{k-1}, \qquad P_k^- = A\,P_{k-1}\,A^\top + W

預測步:先驗狀態及其共變異數。

在看到新的神經資料之前,濾波器把上一次的估計透過動力學向前推,猜出狀態跑到哪裡,並擴大它的不確定度,以反映「預測從不完美」。

\hat{\mathbf{x}}_k^-
量測之前的先驗(預測)狀態。
A\,\hat{\mathbf{x}}_{k-1}
上一次估計被動力學向前推。
P_k^-
預測的不確定度(共變異數)。
W
加入的過程雜訊,使不確定度膨脹。

「上一框游標往右移,所以預測它繼續往右」——只是誤差範圍變得更寬。

\begin{aligned} K_k &= P_k^-\,C^\top\!\left(C\,P_k^-\,C^\top + Q\right)^{-1} \\ \hat{\mathbf{x}}_k &= \hat{\mathbf{x}}_k^- + K_k\,\underbrace{\left(\mathbf{z}_k - C\,\hat{\mathbf{x}}_k^-\right)}_{\text{innovation}} \\ P_k &= \left(I - K_k C\right)P_k^- \end{aligned}

更新步:卡爾曼增益將創新(量測殘差)相對於先驗加以加權。

現在新的神經量測到了。濾波器把它和原本的預期相比(創新),再依卡爾曼增益決定的幅度,把預測往資料方向推——神經訊號可靠時就更信量測,否則就更信預測。

K_k
卡爾曼增益——在預測與量測之間的信任旋鈕。
\mathbf{z}_k - C\,\hat{\mathbf{x}}_k^-
創新:實際觀測減去預期觀測。
\hat{\mathbf{x}}_k
校正後的(後驗)狀態估計。
P_k
用了量測之後降低的不確定度。

若神經元放電比「往右移」的預測還多,卡爾曼增益就把速度往上修正。

卡爾曼增益 K_k 講的全是信任:當神經雜訊 Q 很大時它縮小,濾波器倚賴先驗(平滑、遲滯);當 Q 很小時它增大,濾波器追逐量測(靈敏、抖動)。創新 \mathbf{z}_k - C\hat{\mathbf{x}}_k^- 是新資訊;若模型正確它應為白噪聲,這也是一個即時診斷——用以判斷編碼模型是否已漂移。

# one closed-loop bin k of a velocity Kalman filter
x_pred = A @ x                                  # predict state (pos, vel)
P_pred = A @ P @ A.T + W
S      = C @ P_pred @ C.T + Q                   # innovation covariance
K      = P_pred @ C.T @ inv(S)                   # Kalman gain
x      = x_pred + K @ (z - C @ x_pred)           # correct with firing rates z
P      = (I - K @ C) @ P_pred
cursor_velocity = x[2:4]                         # drive the effector
# user sees the cursor move, adjusts intention -> next z
整個遞迴每個 20–50 毫秒時間窗只是少數幾個矩陣運算——足夠廉價以達成硬即時。

調整濾波器就是調整手感

平滑與遲滯之間沒有免費午餐。較大的過程雜訊 W(或較小的 Q)給出靈敏但抽動的游標;反之則給出平滑但遲鈍的游標。實務上你要依使用者的操控手感、而非離線誤差來調整比值 W/Q——離線擬合最好的設定,往往遲滯到無法操作。

在帶雜訊的「意圖速度」餵入速度卡爾曼濾波器的同時,驅動游標抵達目標。推動過程雜訊與量測雜訊的滑桿,親自感受增益方程所描述的平滑—遲滯取捨。

乾淨模型崩壞之處

此濾波器僅在其假設下最佳,而真實皮質會違反這些假設。調諧 C 在單次內與跨單次間漂移;積分後的速度會累積位置偏差;而校準是在開迴路下蒐集的,其統計特性與解碼器實際運行的閉迴路情境不同。每一種失效都有對策——而每一種對策正是下一章的主題。