量化與 ADC
類比數位轉換器把放大後的訊號切成離散階層。四捨五入到最近階層會注入量化誤差,其行為就像被加入的雜訊。對一個以正弦波滿量程驅動的理想 N 位元轉換器而言,可能達到的最佳訊雜比是位元深度的一個乾淨函數。
\mathrm{SNR}_{\mathrm{dB}} = 6.02\,N + 1.76理想量化 SNR:每多一個位元約買到 6 dB。10 位元 ADC 給約 62 dB,對神經工作而言舒適地低於電極/放大器雜訊——而這是刻意的。
對理想轉換器而言,每多一個位元的解析度,約可買到 6 dB 的訊雜比。因此位元數直接決定了物理所允許的最乾淨數位化——在任何實際電路缺陷介入之前。
- \mathrm{SNR}_{\mathrm{dB}}
- 理想量化訊雜比,以分貝計。
- N
- 轉換器的位元數。
- 6.02\,N
- 每多一位元約增加的 6 dB。
10 位元的 ADC 給約 62 dB——對神經工作而言,這刻意低於電極與放大器的雜訊。
設計上的洞見與直覺相反:你並不想要一個卓越的 ADC。既然真正的類比雜訊底是數 μV,量化得比它細得多,只會燒功率、並產生只編碼雜訊的位元。正確的 ADC 解析度把量化階距放在類比雜訊之下一點——通常 8–12 位元——如此不會遺失任何真實訊息、也不浪費。實際轉換器達不到理想,這由有效位元數刻畫。
\mathrm{ENOB} = \dfrac{\mathrm{SNDR}_{\mathrm{dB}} - 1.76}{6.02}有效位元數,由量測到的訊號對雜訊與失真比反推而得;一旦把實際電路的不完美計入,它才是誠實的解析度。
用實際量測到的訊號品質把理想公式倒推,找出你真正得到幾個位元的解析度。一旦把實際電路的不完美計入,它才是誠實的解析度——通常比標稱位元數低一兩位。
- \mathrm{ENOB}
- 有效位元數——你真正達到的解析度。
- \mathrm{SNDR}_{\mathrm{dB}}
- 量測到的訊號對雜訊與失真比,以分貝計。
一顆標榜 12 位元、但量得 68 dB SNDR 的轉換器,實際只提供約 11 個有效位元。
取樣與總吞吐量
每個通道必須以其頻寬兩倍以上取樣(奈奎斯特)。到 ~5–7 kHz 的 spike 頻帶迫使 f_s 約為每通道 20–30\,\mathrm{kSa/s};只取 LFP 的通道則可慢得多。乘上整個陣列,你就重新得到第一篇的消防栓水柱。
管線在此分岔。你可以傳輸原始寬頻、在植入體外解碼——準確,但在無線電上很耗電——或者你可以花一點晶片內運算,只送出遠少得多的位元。本篇其餘部分與下一篇,都在談這個取捨,因為耗電大戶通常是無線電,而非放大器。
分時多工:一個 ADC、多個通道
由於一個完整 ADC 又大又耗電,你無法給每個電極各配一個。取而代之,分時多工(TDM)讓一個高速 ADC 輪流掃過多個通道:一個開關接通通道 1、ADC 取樣,接著通道 2,依此類推。一個被 M 通道共享的 ADC,必須跑得比任何單一通道快 M 倍。
- 多工器選擇通道 k,把它的取樣保持接到共享的 ADC 輸入。
- 在轉換前,該節點必須建立到 ½ LSB 以內——建立時間預算為一個時槽,T_slot = 1 / (M · f_s)。
- ADC 轉換,取樣被儲存或串流,多工器前進到通道 k+1。
- 經過 M 個時槽,每個通道都被造訪一次;此循環在每個通道的取樣時刻重複。
晶片內 spike 偵測:馴服消防栓
寬頻串流的大半,是 spike 之間的基線。若應用只需要 spike 的時間與波形,那麼在植入體上偵測 spike、只送出每個 spike 周圍的小片段,就能把資料率砍掉一到兩個數量級。最簡單的偵測器是振幅門檻;更穩健的是非線性能量算子(NEO/Teager 能量),它凸顯 spike 尖銳、高頻的形狀。
\psi[x_n] = x_n^2 - x_{n-1}\,x_{n+1}離散非線性能量算子:當訊號同時具有高振幅與高頻率時(正是 spike)它很大,對緩慢的基線漂移則很小。
一個便宜的偵測器,只有當訊號同時又大又快變時才會亮起來——正是 spike 的特徵——對緩慢的基線漂移則維持近乎零。實際上它追蹤瞬時能量,其大小隨振幅平方乘以頻率平方縮放。
- \psi[x_n]
- 第 n 個樣本的能量算子輸出——對 spike 很大。
- x_n
- 目前的訊號樣本。
- x_{n-1}\,x_{n+1}
- 左右兩側相鄰樣本的乘積。
對尖銳快速的 spike,輸出很大;對緩慢的基線游移,則很小。
門檻本身必須對「雜訊水準因通道而異、並隨時間漂移」這件事保持穩健。一個被廣泛採用的估計法,把門檻設為以中位數為基礎的雜訊估計之倍數,如此便不會被你正想偵測的那些 spike 本身撐大。
\mathrm{Thr} = c\,\sigma_n, \qquad \sigma_n = \dfrac{\mathrm{median}\!\left(|x|\right)}{0.6745}以中位數為基礎的雜訊估計(0.6745 因子把中位數絕對偏差換算為高斯 σ);門檻倍數 c 通常取約 4–5。
把偵測 spike 的門檻設為雜訊水準的數倍——但用「絕對訊號的中位數」(spike 幾乎不擾動它)而非標準差(spike 會膨脹它)來穩健地估計雜訊。0.6745 這個因子把中位數絕對偏差換算成高斯 sigma。
- \mathrm{Thr}
- 樣本要被算作 spike 所需超過的門檻。
- c
- 門檻倍數,通常約 4 到 5。
- \sigma_n
- 門檻所依據的穩健雜訊估計。
- \mathrm{median}(|x|)/0.6745
- 絕對值中位數換算成等效的高斯 sigma。
當 c \approx 4,只有超出雜訊四個 sigma 的偏移才算偵測到的 spike。
# On-chip-style spike detection with a robust, self-tuning threshold
import numpy as np
def detect_spikes(x, c=4.5, refractory=15):
sigma = np.median(np.abs(x)) / 0.6745 # robust noise estimate
thr = c * sigma
neo = x[1:-1]**2 - x[:-2] * x[2:] # nonlinear energy operator
above = np.where(neo > thr**2)[0] + 1 # NEO is compared to thr^2
spikes, last = [], -refractory
for i in above: # enforce a refractory gap
if i - last >= refractory:
spikes.append(i); last = i
return spikes偵測之外:晶片內壓縮
即使門檻化之後,高通道數陣列仍產生大量資料,而有些應用還需要 LFP 或完整波形。晶片內資料壓縮填補這個空缺:輕量、有損或無損的方案——差分編碼、波形樣板、學習得到的字典——在酬載抵達無線電之前把它縮小。設計準則是:只有當壓縮器在遙測上省下的功率,超過它為運算所燒的功率時,納入它才划算——這個平衡我們會在第四篇中精確化。