一串數字,其實是個函數
在上一篇裡,我們看到布羅姆維奇圍道如何反演拉普拉斯變換——那是連續時間的故事。現在切換到電腦的世界,這裡的訊號不是時間的平滑函數,而是一串序列:樣本 x_0, x_1, x_2, ... 隨著每一次時脈滴答逐一到來。這正是數位音訊、控制迴路,以及你手機裡每一個濾波器的家。我們需要一件工具,對序列做出拉普拉斯變換對函數所做的事,而結果竟是你早已深刻理解的東西:一個冪級數。
序列 x_n 的 z 變換定義為級數 X(z) = sum x_n z^(-n),對 n 的相關範圍求和。注意那個負指數:是 z^(-n),不是 z^n。於是序列就變成一個關於 1/z 的級數,而這恰恰是一個羅朗級數——你在分類奇點時遇過的那種雙邊冪級數。樣本 x_n 不多不少,就是 X(z) 的羅朗係數。一個訊號與一個複變函數,可以說字面上就是同一個物件的兩種看法。
收斂域是一個圓環
羅朗級數並非處處收斂——它在一個圓環 r < |z| < R 上收斂。這裡也是如此,工程師給這個圓環取了自己的名字:收斂域,簡稱 ROC。這個圓環從哪裡來?正 n 的項(過去與當下的樣本,x_0 z^0 + x_1 z^(-1) + ...)是 1/z 的乘冪;當 |z| 夠大時它們收斂,給出外側條件 |z| > r。任何負 n 的項則是貨真價實的 z 的乘冪,當 |z| 夠小時收斂,給出 |z| < R。兩者合起來,正是你早已熟悉的收斂圓環。
這不是腳註——它是整門學問的縮影。同一個公式 X(z) 可以在好幾個不同的圓環上收斂,而每一個圓環都對應到一個不同的序列 x_n。一個因果訊號(在時刻零之前保持靜默的訊號)住在某個圓盤之外;反因果訊號住在裡面;雙邊訊號則住在兩個半徑之間、貨真價實的圓環裡。所以你無法單憑公式反演一個 z 變換:你還必須被告知 ROC。代數定下了極點;圓環則告訴你,你站在每個極點的哪一側。
X(z) = sum_{n>=0} a^n z^(-n) = 1 / (1 - a z^(-1)) = z / (z - a)
pole at z = a ROC: |z| > |a| -> x_n = a^n for n >= 0 (causal)
same formula ROC: |z| < |a| -> x_n = -a^n for n < 0 (anticausal)極點與單位圓決定穩定性
現在來收成。一個濾波器在工程意義上是穩定的——有界的輸入產生有界的輸出,沒有任何東西逃逸到無窮——恰恰發生在它的脈衝響應 x_n 絕對可和的時候,也就是 sum |x_n| < infinity。從我們的玩具例子 x_n = a^n 來看,那個和為有限,正好在 |a| < 1 時成立。當極點坐落在單位圓 |z| = 1 之內,幾何序列衰減;當極點坐落在圓外,它便爆炸。一整段訊號隨時間的行為,竟可從平面上單獨一個點的位置讀出。
對一個因果濾波器而言,這收斂成全工程界最乾淨俐落的規則之一:一個因果系統穩定,當且僅當它的轉移函數的每一個極點都嚴格落在單位圓內。單位圓 |z| = 1 就是秩序與混沌之間的分界線。(這是連續時間規則在 z 平面上的表親;在那裡,穩定意味著每個極點的實部為負——落在左半平面。把左半平面映到單位圓盤的共形映射,正是把一條規則搬運成另一條規則的關鍵。)
轉移函數,以及如何讀出它
大多數有用的濾波器,都由一條遞迴關係式描述:新的輸出是近期輸入與近期輸出的加權混合,例如 y_n = x_n + 0.5 y_(n-1)。取 z 變換後,每一個「延遲一個時脈」都化為一個 z^(-1) 因子,於是遞迴關係式變成一條單純的代數方程,再解出比值 Y(z)/X(z),便得到一個有理函數 H(z)。這就是 轉移函數——一個多項式之比,其分母的根即極點,分子的根即零點。那個讓拉普拉斯變換如此強大的「微分方程化為代數」的把戲,在這裡如出一轍地奏效。
一旦你把 H(z) 寫成有理函數,要還原脈衝響應就是一個圍道積分。逆 z 變換為 x_n = (1 / 2 pi i) 乘上沿著 ROC 內某個圓周對 X(z) z^(n-1) dz 所作的積分,而這個積分由留數定理求值——你只需把圓周所圍住的那些極點上的留數加總起來。這正是上一篇布羅姆維奇圍道在離散世界裡的回聲:在那裡你沿一條鉛直線往上走,在這裡你繞著一個圓走,但兩種情形下,極點上的留數就是時域裡的答案。
- 寫下濾波器的遞迴關係,例如 y_n = x_n + 0.5 y_(n-1),並對它取 z 變換:Y(z) = X(z) + 0.5 z^(-1) Y(z)。
- 解出轉移函數:H(z) = Y(z)/X(z) = 1 / (1 - 0.5 z^(-1)) = z / (z - 0.5)。
- 找出極點:z = 0.5。由於 |0.5| < 1,極點落在單位圓內,因此這個因果濾波器是穩定的。
- 以留數反演來讀出脈衝響應:x_n = (0.5)^n(n >= 0)——一道緩緩衰減的回聲,正是一個落在圓內的穩定極點該給出的東西。
數圈圈:論證原理再度登場
當 H 太過糾結、難以手算分解,或者一個回饋迴路改變了極點時,你該如何檢查穩定性?你用數的,而那件數數的工具,你早已擁有。論證原理說:當 z 沿一條閉圍道行進時,像曲線 H(z) 繞原點的圈數,等於(內部零點數)減去(內部極點數)。讓沿單位圓的圍道穿過迴路的開迴路函數,看看輸出繞一個臨界點繞了幾圈。這就是 奈奎斯特判據,它不過是戴上工程師帽子的論證原理罷了。
這幅圖像美妙地具體。閉迴路系統不穩定,恰恰發生在開迴路響應——隨頻率掃過單位圓而在平面上畫出的那條曲線——繞臨界點繞了「不對的圈數」的時候。不必分解、不必求解——只要盯著一條曲線、數它繞一個點的圈數,正是當年在論證原理那一級驅動了儒歇定理的同一個繞數概念。一整個穩定性問題,就此塌縮成一句話:這個迴圈繞那個點繞了幾圈?