倒著轉的馬車輪
你早就見過這個謊言,在螢幕上。一部老西部片裡,馬車向前飛奔,它的輻條輪卻彷彿緩緩地倒著爬。輪子沒有中邪——是攝影機在取樣,每秒抓 24 格,而兩格之間輻條只多轉了一根輻條間距的一絲一毫。你的眼睛只拿到這些快照,便挑了一個最簡單、又能對上這些點的故事:一場緩慢的倒退。真實發生的事,與最慢、又能對上樣本的那個運動,兩者間的這道落差,就是混疊,而它正是上一篇奈奎斯特定理在警告你的東西。
回想第 1 篇的規則:要忠實擷取一個訊號,取樣率必須快過它最高頻率的兩倍——也就是奈奎斯特率。混疊,就是發生在這條規則錯誤那一側的事。任何坐在取樣率一半(奈奎斯特頻率 fs/2)之上的成分,並不會單純地消失或被忽略。它會戴著偽裝,重新出現在你擷取到的頻帶之內——一個全新的、較低的頻率,而樣本無法把它和一個真正的慢訊號區分開來。那個高頻音沒有被濾掉;它被摺疊進來了,如今以一個完美的冒牌貨身分污染著你的資料。
摺疊規則:脫隊的頻率會落在哪
這份偽裝遵循一條精確的規則,值得把它烙進記憶。以 fs 取樣會讓頻譜每隔 fs 重複一次,所以任何輸入頻率 f,都會依照公式 f_alias = | f - n times fs | 被鏡射回可用頻帶,其中 n 是那個能讓答案落在 0 到 fs/2 之間的整數。用白話說:拿你的輸入頻率,減去最接近的整數倍取樣率,剩下的那段距離,就是你實際會記錄到的假頻率。
給它套上數字。取樣率 fs = 1000 Hz,於是奈奎斯特頻率是 500 Hz,從 0 到 500 Hz 的一切都被誠實擷取。送進一個 600 Hz 的音:f_alias = | 600 - 1000 | = 400 Hz,所以一個真實的 600 Hz 訊號,在你的資料裡顯示成 400 Hz。一個 900 Hz 的音落在 | 900 - 1000 | = 100 Hz。一個 1100 Hz 的音也落在 | 1100 - 1000 | = 100 Hz——兩個不同的輸入,同一個混疊。把頻率軸想像成一把沿著 500 Hz 摺線對摺的紙扇:600 摺到 400、700 摺到 300,而這個摺疊在每一個 fs/2 的倍數處持續來回彈跳。這就是為什麼混疊也叫作摺疊。
這就是為什麼混疊在音訊與儀表量測裡如此陰險:它不是加上一層溫和的雜訊毛邊,而是加上原本樂曲裡從不存在的錯誤音。一個 21 kHz 的超音波尖嘯,以 40 kHz 取樣,會摺到 | 21000 - 40000 | = 19000 Hz——一道刺耳的 19 kHz 哀鳴,被栽進可聽頻帶正中央。真實世界的訊號幾乎總在奈奎斯特之上某處帶著能量(諧波、嘶聲、干擾),所以少了守門員,那些高頻成分不會被禮貌地丟掉——它們會喬裝改扮,被搬遷進你正在乎的那個頻帶裡。
為何後面任何濾波器都救不回來
這裡是整個階段最艱難、也最重要的真相,正是標題說先濾波的理由。一旦高頻訊號發生了混疊,那個混疊就不只是和真實低頻訊號相似而已——它和後者是逐位元完全相同的。一個 1100 Hz 正弦波以 1000 Hz 取得的樣本,和一個 100 Hz 正弦波的樣本,是一模一樣的數字。沒有任何巧妙的數學、沒有數位濾波器、沒有任何 AI,能在轉換器之後把原始訊號救回來,因為能區分兩者的那份資訊,在取樣的那一瞬間就已經被丟棄了。
fs = 1000 Hz sampling. Two very different sine waves...
k (sample #): 0 1 2 3 4 5
t = k/1000 s: 0.000 0.001 0.002 0.003 0.004 0.005
100 Hz sin(0.2 pi k): 0.000 0.588 0.951 0.951 0.588 0.000
1100 Hz sin(2.2 pi k): 0.000 0.588 0.951 0.951 0.588 0.000
'----------- identical dots -----------'
The 1100 Hz wave wiggles 11x faster, yet lands on the SAME samples.
After sampling, the converter cannot tell which one you fed it.
alias = | f - n*fs | -> | 1100 - 1*1000 | = 100 Hz在這張表前坐一會兒。1100 Hz 的波上下擺動快上十一倍,但那些多出來的擺動,每一次都發生在兩個時脈滴答之間、在黑暗裡,轉換器從不往那看。在每一個滴答時刻,它剛好正通過和慢波相同的高度。於是被記錄下來的點,就是同一批點。這句話要永遠記住:取樣率低於最高頻率的兩倍,會造成後面任何濾波器都無法挽回的混疊。 損害是在類比世界裡、在類比數位轉換器動手的前一瞬間就已造成——所以解藥也必須住在類比世界裡,在那一瞬間之前。
抗混疊濾波器:類比大門口的守衛
解藥是一個單一、沒有商量餘地的元件:一個抗混疊濾波器,它其實就是一個低通濾波器,擺在類比訊號路徑上、在取樣保持與轉換器之前。它唯一的工作,是確保訊號抵達取樣器時,奈奎斯特頻率之上基本上已經沒有任何東西可以摺進來。你把它的截止頻率設在你在乎的頻帶頂端,再倚靠它的滾降,把 fs/2 之上的一切壓到你能忍受的水準以下。它就是那個保鑣,在高頻們穿著慢頻率的戲服溜進門之前,先把它們擋在外面。
有兩個細節決定它的成敗。第一,它必須是類比的,而且必須在取樣器之前——一個在轉換器之後、用軟體做的濾波器對混疊毫無用處,因為到那時,冒牌貨與真訊號就是上一節那組一模一樣的數字。第二,它要防範的不只是你想要訊號的雜散諧波。即使你的訊號頻帶限制得漂漂亮亮,導線仍會撿到寬頻雜訊與干擾——附近一個 2 MHz 的開關穩壓器、射頻雜訊、熱嘶聲——而奈奎斯特之上的所有這些能量,都會直直地摺進你的量測頻帶。即使你確信訊號乾淨,抗混疊濾波器依然是強制的,正因為它周圍的雜訊並不乾淨。
把它設計出來——以及過取樣這道逃生門
設計這個守衛,是濾波器陡峭度與取樣率之間的一場拔河,而它誠實的核心是:世上沒有磚牆濾波器。真實的低通無法在單一頻率上從全通直落到全阻。它是漸進地滾降的,所以你總是需要一段過渡帶——在你訊號結束之處與混疊頻帶開始之處之間留出空間——好讓衰減累積起來。要盯緊的最壞摺疊,是位於 fs 減去你最高頻率處的那個頻率,因為它恰好會落回你頻帶的最頂端。
- 釘住 f_max,也就是你真正需要的最高頻率,並把濾波器的截止頻率設在它之上或剛好之上(譬如感測器通道取 1 kHz——一個 RC 級用 R = 1.6 k、C = 100 nF,得到 f = 1/(2 times pi times R times C) ~= 1 kHz)。
- 決定你在混疊頻帶需要多少壓制。一個 N 位元的轉換器,動態範圍約為 6 times N + 1.76 dB,所以混疊必須被壓到那之下,才能藏在雜訊底下——12 位元的零件大約是 74 dB。
- 找出那道間隙。當 fs = 10 kHz、截止頻率 1 kHz 時,最壞的摺疊位於 fs - f_max = 9 kHz,所以濾波器有從 1 kHz 到 9 kHz(約 3.2 個八度)的空間,去達到那 74 dB。
- 挑一個合身的階數。每多一階大約多 6 dB/八度;在 3.2 個八度上,一個二階 Sallen-Key 只給約 12 times 3.2 ~= 38 dB——不夠——所以你要爬到四階,或者藉由提高 fs 來把間隙拉寬。
最後那句話就是逃生門,也是現代轉換器裡最聰明的點子:過取樣。取樣率取得遠快過奈奎斯特的要求,過渡帶便大大地敞開,於是一個溫和、便宜的濾波器就能包辦整件事。把 fs 從 10 kHz 推到 1 MHz,一個慵懶的一階 RC——單單一個電阻配一個電容——就有好幾個十倍頻的空間去達到 74 dB。這正是 Sigma-Delta 轉換器所做的交易:它以訊號率的瘋狂倍數取樣,好讓它的抗混疊濾波器幾乎可以微不足道,事後再在數位域裡清理並降速。你花掉轉換速度,去把濾波器的簡潔買回來。