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

z 轉換:數位系統的描述語言

每一個數位濾波器、回音、等化器,骨架其實都一樣:把幾個過去的取樣值,以適當的權重加回來。**z 轉換**就是讓你看見這副骨架的 X 光。它把整個系統濃縮成一張圖——散佈在一個圓內、圓外的點——就能告訴你系統是否穩定、它如何替聲音上色、以及它為什麼會這樣表現。學會讀懂這張圖,DSP 的其餘部分就不再是魔法了。

從 s 平面到 z 平面

如果你接觸過 拉普拉斯轉換,你已經知道它的核心戲法:把時間域裡那團亂糟糟的微分方程,變成複變數 s 裡單純的代數。電容、電感不再是微積分,而變成簡單的阻抗;整個電路塌縮成兩個多項式的比值。z 轉換是完全相同的構想,移植到離散世界——取樣的世界,而非連續電壓的世界。拉普拉斯住在 s 平面,z 轉換則住在 z 平面;一旦你學會讀懂這個平面,任何 DSP 系統都能寫在一張餐巾紙背面。

為什麼非得要一個*新*的轉換?因為 離散時間訊號 x[n] 並不是平滑的函數——它是一串以一個取樣間隔分開的數字。z 轉換用它自己的語言來面對它。我們把 X(z) 定義成對這些取樣值求和,每一項都乘上一個 z⁻¹ 的次方:X(z) = Σ x[n]·z⁻ⁿ,n 從 0 往上加(針對 DSP 通常在意的因果訊號)。這一行就是完整的定義。變數 z 是複數,而真正的奧妙,完全藏在它的次方*代表什麼*。

z⁻¹ 就是一個記憶單元

想像一條輸送帶載著你的取樣值經過你面前,每個時脈一個。單位延遲 z⁻¹ 就是輸送帶上的一個格子:一個取樣值掉進去,正好一拍之後從另一端彈出來。在硬體裡,那個格子實際上就是一個暫存器——一個正反器或記憶單元——由取樣頻率來定時。在軟體裡,它就是你讀取的陣列裡的一個位置。這就是為什麼 DSP 工程師說 z⁻¹ *就是*記憶:你在方塊圖裡畫的每一個延遲,都是系統記住某個過去數值的地方。

現在來看一個*系統*——任何把輸入 x[n] 變成輸出 y[n] 的東西——被寫下來的樣子。幾乎所有有用的 DSP 系統都是線性非時變的(LTI 系統):把輸入放大,輸出也跟著放大;把輸入延遲,輸出就只是跟著延遲。對這類系統,規則永遠是同一種形狀:今天的輸出,是近期幾個輸入與近期幾個輸出的加權和。把這句話寫成數學式,就是差分方程

Difference equation (what the code actually does each tick):

    y[n] = b0*x[n] + b1*x[n-1]  -  a1*y[n-1]

Delay-line / block-diagram view (-> is one sample of flow):

   x[n] --->(x b0)----+
      |               |
    [z^-1]            (+)---> y[n] ---+----> out
      |               |               |
   x[n-1]-->(x b1)----+             [z^-1]
                                      |
                      (x -a1)<------ y[n-1]
            (-a1 * y[n-1] fed back into the sum)

The two [z^-1] boxes are the only memory in the system.
一個一階系統,同時以方程式與延遲線圖呈現。每個 [z⁻¹] 方塊就是一個保存一個過去取樣值的暫存器。

差分方程 → 轉移函數 H(z)

整台機器的回報就在這裡。我們把 z 轉換套用到差分方程的每一項。因為 z⁻¹ 不過就是「平移一個取樣」,這個代換是機械式的:看到 x[n−k],就寫成 z⁻ᵏ·X(z);看到 y[n−k],就寫成 z⁻ᵏ·Y(z)。那些帶著微積分味道的時間延遲,全變成單純地乘上 z⁻¹ 的次方。接著我們整理各項,求比值 Y(z)/X(z)。這個比值就是系統的[[ee-transfer-function|轉移函數]],寫作 H(z)——它正是你或許在連續控制裡認識的那個轉移函數的離散表親。

  1. 從差分方程出發:y[n] = b0·x[n] + b1·x[n−1] − a1·y[n−1]。
  2. 把每個延遲項代換掉:y[n−1] → z⁻¹·Y(z)、x[n−1] → z⁻¹·X(z)。方程變成 Y = b0·X + b1·z⁻¹·X − a1·z⁻¹·Y。
  3. 把所有 Y 收到左邊:Y·(1 + a1·z⁻¹) = X·(b0 + b1·z⁻¹)。
  4. 相除得到轉移函數:H(z) = Y(z)/X(z) = (b0 + b1·z⁻¹) / (1 + a1·z⁻¹)。

看看這個形狀:兩個 z⁻¹ 多項式的比值。分子來自輸入權重(b 們),分母來自回授權重(a 們)。令分子 = 0 得到零點——系統會抹除的輸入頻率。令分母 = 0 得到極點——系統的自然共振,它會放大的頻率與它震盪的模態。零點與極點合起來,極點與零點就是 LTI 系統的完整指紋:告訴我它們落在哪,我就能重建出系統的一切行為。

讀懂 z 平面:單位圓就是穩定的分界線

現在把極點與零點畫到複數 z 平面上,一個故事就浮現了。最重要的地標就是單位圓——離原點剛好距離 1 的所有點所成的圓。它是 s 平面裡虛軸的離散時間對應物,承載著龐大的意義。對因果系統,規則直截了當:每一個極點都必須嚴格落在單位圓內,否則系統不穩定。 極點在圓內,代表一個逐取樣衰減的模態;極點落在圓上,就永遠震盪而不消亡;極點在圓外,代表響應無界成長,終將爆掉。

             Im(z)
               |        . . . .
           .       unit circle (|z| = 1)
         .           |           .
        .            |            .
       .   x <-- pole INSIDE      .
      .    (stable, decays)       .
   ---+--------o--------+-------+----- Re(z)
      .       zero    (origin)  .
       .                       .
        .   x  <-- pole ON circle = rings forever
         .         (marginally stable) .
           .                       .
               . . . .   x <-- pole OUTSIDE = blows up

  Inside circle  -> stable
  On  circle     -> oscillates, never settles
  Outside circle -> unstable (output grows without limit)
單位圓把 z 平面切成穩定(圓內)與不穩定(圓外)。極點(x)決定穩定性;零點(o)在響應裡刻出凹槽。

同一張圖也告訴你濾波器的形狀,而這部分簡直像是超能力。要求出 頻率響應——濾波器如何對待每一個頻率——你讓一個點沿著單位圓繞一整圈,從 z = 1(直流,最低頻率)一路繞到 z = −1(最高頻,由取樣定理決定的奈奎斯特頻率)。在每一點,增益大致等於*到各零點距離的乘積,除以到各極點距離的乘積*。滑到極點附近,分母縮小,增益就飆高——一個共振、一個峰。滑到零點附近,分子縮小,增益就下陷——一個凹槽。這個幾何,真的就替你畫出了濾波器的響應曲線。

一個一階範例:單極點平滑器

我們用最簡單卻好用的 IIR 濾波器把它落實——一個單極點低通平滑器,藏在每一個「指數移動平均」與每一個和緩的音量推桿裡的那種。它的差分方程是 y[n] = (1−α)·x[n] + α·y[n−1],其中 α 介於 0 與 1 之間。用白話說:新的輸出是新輸入與前一個輸出的某個比例 α 的混合。把 α 調大,濾波器就重重倚靠它的記憶,於是平滑得很用力、反應很慢;把 α 調小,它幾乎瞬間就跟上輸入。

Take the z-transform of   y[n] = (1-a)*x[n] + a*y[n-1]

   Y = (1-a)*X + a*z^-1 * Y
   Y - a*z^-1*Y = (1-a)*X
   Y*(1 - a*z^-1) = (1-a)*X

              (1 - a)
   H(z) = ---------------       <-- transfer function
            1 - a*z^-1

   Pole: 1 - a*z^-1 = 0  ->  z = a   (a real pole on the +Re axis)
   Zero: numerator is constant -> a zero at z = 0

   DC gain (set z = 1):  H(1) = (1-a)/(1-a) = 1   (passes DC perfectly)
   Nyquist gain (z=-1):  H(-1)= (1-a)/(1+a) < 1   (cuts high freq)

   With a = 0.9 :  pole at 0.9 (just inside circle) -> stable,
                   heavy smoothing, slow ~ settles in tens of samples
   With a = 0.5 :  pole at 0.5 -> light smoothing, fast settle
推導單極點平滑器的 H(z),再直接從位於 z = α 的極點讀出穩定性與濾波器形狀。

免費讀一下 z 平面剛剛告訴我們的事。極點落在實軸上的 z = α。只要 α < 1,那個極點就在單位圓內,所以濾波器穩定——正是我們期望的條件。它以滿增益讓直流(訊號裡緩慢的、平均的部分)通過,並衰減靠近奈奎斯特的快速抖動:一個貨真價實的低通。而 α 越是逼近 1,極點就越逼近圓,濾波器就變得越遲緩、平滑得越用力。一個極點、一個參數,幾何就一次解釋了穩定性、通帶與速度。

為什麼這是 DSP 的拱心石

退一步,看看這一個想法替你買到了什麼。一個差分方程——晶片上實際執行的那段 C 程式——變成了多項式比值 H(z)。那個比值變成一撮極點與零點。那一撮點,對著單位圓畫出來,立刻揭露了穩定性與濾波器的整個形狀。在時間域裡對訊號做卷積,是個瑣碎的滑動加總運算,如今變成 z 轉換的單純*相乘*——正如卷積在任何轉換域裡都塌縮成乘法。把兩個濾波器串接?只要把它們的 H(z) 相乘。z 轉換就是讓這一切融成一場流暢對話的共通語言。

有一個誠實的提醒要帶著往下走。z 轉換能漂亮地告訴你系統在每個頻率的*增益*——但單位圓的距離只給了大小。要同時看見相位(每個頻率所承受的時間延遲),並從有限資料算出真正的頻譜,你會伸手去拿離散傅立葉轉換,它本質上就是把 H(z) 在單位圓上等間隔的點上求值。把 DFT 想成 z 轉換的捲尺:同一個圓,現在多了刻度。那是下一個工具,而再下一個——FFT——只是用快得驚人的方式去讀它。