z Transform 用來將離散的數位訊號表示成複數指數函數的數學工具。以下討論 z transform,並用 z 轉換求 LTI 系統的轉換函式,並求零點與極點等參數,分析 LTI 系統的特性,最後說明反 z 轉換。
z轉換
z轉換 源自 Laplace Transform (適用於分析連續時間域的函數),適用於離散時間域 discrete time domain 的數位訊號分析。跟離散時間傅立葉轉換 DTFT 比較,z轉換提供更廣義的訊號表示法,可用來分析 DSP 系統的操作特性。
DTFT 是針對絕對可加總序列(Absolute Summable Sequence) 進行轉換,僅適合用來分析穩定的 LTI 系統, z 轉換應用範圍較廣,也可分析不穩定的 LTI 系統。
給定離散序列 x[n],z轉換定義為:
\(X(z)=Z\{x[n]\}=\sum_{n=-∞}^{∞}x[n]z^{-n}\)
反z轉換定義為:
\(x[n]=Z^{-1}\{X(z)\} = \frac{1}{2πj} \oint_CX(z)z^{n-1}dz\) 其中 C 是包含原點的逆時針封閉路徑,落在收斂區域中。
z轉換是將離散時間域 (discrete-time domain) 的序列 x[n],轉換成 z domain 的函數 X(z)。\(Z\{\}\) 代表 z 轉換。z 轉換符合可逆性,可用反 z 轉換將 X(z) 還原為 x[n]。
跟 discrete-time fourier transform (DTFT) 的公式比較
\( X(e^{jω}) = \sum_{n=-∞}^{∞}x[n]e^{-jωn} \)
可發現到 \(z=e^{jw}\)
z轉換就是 DTFT 的另一種表示法。
收斂區域 Region of Convergence (ROC)
就是使得 z 轉換收斂的複數平面的 z 點集合,定義為
\( ROC = \{z: |\sum_{n=-∞}^{∞}x[n]z^{-n}|<∞\} \)
其中 C 是包含原點的逆時針封閉路徑,落在收斂區域中。
ex: 求單位脈衝 δ[n] 的 z 轉換,並決定其收斂區域 ROC
單位脈衝的定義:\( δ[n] = \left\{ \begin{array}{ll} 1, & \mbox{if n=0} \\ 0, & \mbox{if n≠0} \end{array} \right.\)
\(Z\{δ[n]\}=\sum_{n=-∞}^{∞}δ[n]z^{-n} = δ[0]z^{-0} = 1\)
ROC 為複數平面上所有 z 點集合
ex: 求單位步階 𝜇[n] 的轉換及其收斂區域
單位步階的定義:\( 𝜇[n] = \left\{ \begin{array}{ll} 1, & \mbox{if t≥0} \\ 0, & \mbox{if t<0} \end{array} \right.\)
\(Z\{𝜇[n]\}=\sum_{n=-∞}^{∞}𝜇[n]z^{-n} = \sum_{n=0}^{∞}z^{-n} = \frac{1}{1-z^{-1}}\)
ROC 為 \( |z^{-1}|<1 \) 或 \( |z|>1\)
ex: 給定單位脈衝時間延遲 δ[n-k] ,其中 k>0,求 z 轉換及其 ROC
\(Z\{δ[n-k]\}=\sum_{n=-∞}^{∞}δ[n-k]z^{-n} = z^{-k}\)
ROC 為複數平面上除了原點以外的所有 z 點集合
ex: 數位訊號 \(x={x[n]}, n=1,2,3,4,5\) 或 \(x={1,2,4,3,2,1}\) ,求z轉換及 ROC
\(X(z)=Z\{x[n]\}=\sum_{n=-∞}^{∞}x[n]z^{-n} \\ = 1 + 2z^{-1}+ 4z^{-2}+ 3z^{-3}+ 2z^{-4}+ z^{-5}\)
ROC 為複數平面上除了原點以外的所有 z 點集合
ex: 數位訊號\(x[n] = (0.5)^n 𝜇[n]\) ,求z轉換及其 ROC
\(X(z)=Z\{x[n]\}=\sum_{n=-∞}^{∞}x[n]z^{-n} \\ = \sum_{n=-∞}^{∞}(0.5)^n𝜇[n]z^{-n} \\ = \sum_{n=0}^{∞}(0.5)^nz^{-n} \\ = \sum_{n=0}^{∞}(0.5z^{-1})^{n} \\ = \frac{1}{1-0.5z^{-1}}\)
要讓無窮等比級數收斂的條件是 \(|r|<1\),因此
ROC 為 \(|0.5z^{-1}|<1\) 或 \(|z|>0.5\)
常見的 z 轉換對應表
離散序列 | z轉換 | ROC |
---|---|---|
δ[n] | 1 | all z |
δ[n-k] | \(z^{-k}\) | z≠0, k>0 |
𝜇[n] | \(\frac{1}{1-z^{-1}}\) 或 \(\frac{z}{z-1}\) | $ |
-𝜇[-n-1] | \(\frac{1}{1-z^{-1}}\) 或 \(\frac{z}{z-1}\) | $ |
\(a^n𝜇[n]\) | \(\frac{1}{1-az^{-1}}\) 或 \(\frac{z}{z-a}\) | $ |
\(-a^n𝜇[-n-1]\) | \(\frac{1}{1-az^{-1}}\) 或 \(\frac{z}{z-a}\) | $ |
\(n𝜇[n]\) | \(\frac{z^{-1}}{(1-az^{-1})^2}\) 或 \(\frac{z}{(z-1)^2}\) | $ |
\(n^2𝜇[n]\) | \(z^{-1}\frac{(1+z^{-1})}{(1-z^{-1})^3}\) 或 \(\frac{z(z+1)}{(z-1)^3}\) | $ |
\(e^{-an}\) | \(\frac{1}{1-e^{-a}z^{-1}}\) 或 \(\frac{z}{z-e^{-a}}\) | $ |
\(sinω_0n\) | \(\frac{z sinω_0}{z^2-2zcosω_0+1}\) | $ |
\(cosω_0n\) | \(\frac{z(z-cosω_0)}{z^2-2zcosω_0+1}\) | $ |
z轉換的性質
線性運算原則
\(Z\{αx_1[n]+βx_2[n]\} = αX_1(z) + βX_2(z)\)
證明:
\(Z\{αx_1[n]+βx_2[n]\} = \sum_{n=-∞}^{∞}(αx_1[n]+βx_2[n])z^{-n} \\ = α \sum_{n=-∞}^{∞}x_1[n]z^{-n}+β\sum_{n=-∞}^{∞}x_2[n]z^{-n} \\ = αZ\{x_1[n]\} + βZ\{ x_2[n] \} \\ = αX_1(z) + βX_2(z)\)
時間延遲
若 x[n] 的 z 轉換為 X(z),時間延遲 x[n-k] 的 z 轉換為
\(Z\{x[n-k]\}=z^{-k}X(z)\)
證明:
\(Z\{x[n-k]\} = \sum_{-∞}^{∞}x[n-k]z^{-n} \\ = \sum_{j=-∞}^{∞}x[j]z^{-(j+k)} \quad\quad 假設 j=n-k, n=j+k \\ = \sum_{j=-∞}^{∞}x[j]z^{-j}z^{-k)} \\ = z^{-k} \sum_{j=-∞}^{∞}x[j]z^{-j} \\ = z^{-k} X(z)\)
轉換函式
LTI 系統方塊圖
\(y[n]=h[n]*x[n]\) 其中 \(h[n]\) 稱為脈衝響應 (Impulse Response)
卷積定理也成立:
\(Z\{y[n]\} = Z\{h[n]*x[n]\} = Z\{h[n]\} \cdot Z\{x[n]\}\)
或 \(Y(z) = H(z) * X(z)\)
因此轉換函式(Transform Function) 或 系統函式 (System Function)可表示為
\(H(z) = \frac{Y(z)}{X(z)}\)
零點與極點
LTI 的轉換函式,可以用有理式函數 (Rational Function) 的型態表示,讓分子與分母都是 \(z^{-1}\) 的多項式函數
\(H(z) = \frac{b_0+b_1z^{-1}+...+b_Mz^{-M}}{a_0+a_1z^{-1}+...+a_Nz^{-N}}\) 其中的係數包含 \(\{a_k\}, k=0,1,2,...N\) 與 \(\{b_k\}, k=0,1,2,...M\)
系統的轉換函式可因式分解為:
\(H(z) = \frac{b_0}{a_0}z^{N-M}\frac{\prod_{l=1}^{M}(z-z_l)}{\prod_{l=1}^{N}(z-p_l)}\)
讓分子多項式為 0 的所有根,也就是 \(z=z_l, l=1,2,...M\) ,稱為零點 Zeros
讓分母多項式為 0 的所有根,也就是\(z=p_l, l=1,2,...N\),稱為極點 Poles
\(\frac{b_0}{a_0}\) 稱為系統的增益 gain
ex: 如 LTI 系統的轉換函式定義為 \(H(z)=\frac{1}{1-z^{-1}}\) ,求收斂區域、零點、極點
\(H(z)=\frac{1}{1-z^{-1}} = \frac{z}{z-1}\)
ROC 為 \(|z|>1 \),零點為 z=0 (讓分子為0), 極點為 z=1 (讓分母為0)
定理:穩定系統與極點
若 LTI 系統的轉換函式 H(z) 可表示成有理式函數,則 LTI 系統為穩定系統,若且惟若 H(z) 的所有極點都落在複數平面的單位圓內。
換句話說:LTI 要是穩定系統的充要條件為:LTI 的轉換函式,所有極點都要落在複數平面的單位圓內。若條件不成立,則構成不穩定的 LTI 系統。上面範例中,極點落在單位圓上,因此是不穩定系統。
ex: 轉換函式 \(H(z) = \frac{0.8-0.16z^{-1}-0.64z^{-2}}{1-0.2z^{-1}-0.2z^{-2}+z^3}\) ,求系統的零點、極點、增益
可使用 SciPy Signal 的 tf2zpk (Transfer Funciton to Zeros, Poles, Gain)
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
from matplotlib import patches
from matplotlib.markers import MarkerStyle
def zplane(z, p):
fig = plt.figure( )
ax = plt.subplot( 1, 1, 1 )
# 單位圓
unit_circle = patches.Circle( ( 0,0 ), radius = 1, fill = False, color = 'black', ls = 'dashed' )
ax.add_patch( unit_circle )
# 軸線
plt.axvline( 0, color = 'black' )
plt.axhline( 0, color = 'black' )
# 橫軸 -2~2
plt.xlim( ( -2, 2 ) )
# 縱軸 -1.5 ~ 1.5
plt.ylim( ( -1.5, 1.5 ) )
plt.grid( )
# 畫上 zeros, ko 為圓圈
plt.plot( z.real, z.imag, 'ko', fillstyle = 'none', ms = 12 )
# 畫上 poles, ko 為叉叉
plt.plot( p.real, p.imag, 'kx', fillstyle = 'none', ms = 12 )
return fig
def main( ):
# 分子的係數
b = np.array( [ 0.8, -0.16, -0.64 ] )
# 分母的係數
a = np.array( [ 1, -0.2, -0.2, 1 ] )
# 用 tf2zpk 找到 zeros, poles, gain
z, p, k = signal.tf2zpk( b, a )
print( "Zeros =", z )
print( "Poles =", p )
print( "Gain =", k )
zplane( z, p )
plt.show( )
main( )
執行結果
$ python tf2zpk.py
Zeros = [ 1. -0.8]
Poles = [ 0.6+0.8j 0.6-0.8j -1. +0.j ]
Gain = 0.8
反過來可用 zp2tf,根據零點及極點,找到轉換函式的係數
import numpy as np
import scipy.signal as signal
z = np.array( [ -0.8, 1 ] )
p = np.array( [ 0.6 + 0.8j, 0.6 - 0.8j, -1 ] )
k = 0.8
b, a = signal.zpk2tf( z, p, k )
print( "Numerator Polynomial Coefficients =", b )
print( "Denominator Polynomial Coefficients =", a )
執行結果
$ python zp2tf.py
Numerator Polynomial Coefficients = [ 0.8 -0.16 -0.64]
Denominator Polynomial Coefficients = [ 1. -0.2 -0.2 1. ]
反z轉換
反z轉換定義為:
\(x[n]=Z^{-1}\{X(z)\} = \frac{1}{2πj} \oint_CX(z)z^{n-1}dz\) 其中 C 是封閉曲線,落在收斂區域中。
雖然公視是使用封閉曲線積分,實際的反z轉換運算,會採用以下三種方法:
- 長除法 long division method
- 部分分式展開法 partial fraction expansion method
- 餘數法 residue method
長除法
訊號或系統的 z 轉換,通常表示成兩個多項式相除的型態,因此可表示成幂級數 Power Series:
\(X(Z) = \frac{N(z)}{D(z)} = \sum_{n=0}^{∞}a_nz^{-n} = a+a_1z^{-1}+a_2z^{-2}+....\)
其中 N(z) 是 Numerator 分子多項式,D(z) 是 Denominator 分母多項式。
求反 z 轉換時,可以使用長除法求幂級數的係數
ex: 訊號的 z 轉換函式如下,求 反 z 轉換
\(X(z)=\frac{1+z^{-1}+2z^{-2}-z^{-3}+3z{-4}}{1-z^{-1}+z^{-2}}\)
\(\begin{split} \\ &\underline {\ 1 \ +2^z{-1} \ +3^{z-2} \ } \\ 1 \ -z^{-1} \ +z^{-2}\big)& 1 \ +z^{-1} \ +2z^{-2} \ -z^{-3} \ +3z^{-4}\ \\ &\underline{1 \ -z^{-1} \ +z^{-2}\ \ \ \ \ \ }\ \\ & \ \ \ \ 2z^{-1} \ +z^{-2} \ -z^{-3} \ \ \\ &\underline{\ \ \ \ 2z^{-1} \ -2z^{-2} \ +2z^{-3}\ \ \ \ \ \ }\ \\ & \ \ \ \ \ \ \ \ \ \ \ \ \ \ 3z^{-2} \ -3z^{-3} \ +3z^{-4} \ \ \\ &\underline{\ \ \ \ \ \ \ \ \ \ \ \ \ \ 3z^{-2} \ -3z^{-3} \ +3z^{-4}\ \ \ \ \ \ }\ \\ & \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0 \\ \end{split}\)
因此 X(z) 可化簡為 \(X(z) = 1+2z^{-1}+3z^{-2}\)
求反 z 轉換可得下列結果:
\(x[n]=Z^{-1}\{X(z)\} = Z^{-1}\{1+2z^{-1}+3z^{-2}\} = δ[n]+2δ[n-1]+3δ[n-2]\)
或 \(x[n]=\{1,2,3\}\)
若X(z) 定義為 \( X(z) = \frac{b_0+b_1z^{-1}+...+b_Mz^{-M}}{a_0+a_1z^{-1}+...+a_Nz^{-N}}\)
長除法可用遞迴方法計算:
\(x[n]=[b_n-\sum_{i=1}^{n}x[n-i]a_i]/a_0, n=1,2,...\) ,其中 \(x[0]=b_0/a_0\)
import numpy as np
b = np.array( [ 1, 1, 2, -1, 3 ] )
a = np.array( [ 1, -1, 1, 0, 0 ] )
M = b.size
N = a.size
x = np.zeros( M )
x[0] = b[0] / a[0]
for n in range( 1, M ):
sum = 0
k = n
if n > N:
k = N
for i in range( 1, k + 1 ):
sum = sum + x[n-i] * a[i]
x[n] = ( b[n] - sum ) / a[0]
print( x )
執行結果
$ python long_division.py
[1. 2. 3. 0. 0.]
部分分式展開法
如果 z 轉換中的分母多項式 D(z) 可進一步因式分解,則可使用部分分式展開法求反z轉換
ex: 訊號的 z 轉換 \(X(z)=\frac{1}{1-3z^{-1}+2z^{-2}}\) ,求反z轉換
分母可分解為 \((1-z^{-1})(1-2z^{-1})\)
因此可假設 \(X(z)=\frac{1}{1-3z^{-1}+2z^{-2}}= \frac{A}{1-z^{-1}} + \frac{B}{1-2z^{-1}}\)
A, B 為常數。通分後可得
\(1=A(1-2z^{-1})+B(1-z^{-1})\)
假設 \(z=1\),則 \(1=A(1-2)+B(1-1) \Rightarrow A=-1\)
假設 \(z=2\),則 \(1=A(1-1)+B(1-1/2) \Rightarrow B=2\)
因此 \(X(z)= \frac{-1}{1-z^{-1}} + \frac{2}{1-2z^{-1}}\)
求反z轉換
\( x[n]=Z^{-1}\{X(z)\} = Z^{-1} \{ \frac{-1}{1-z^{-1}} + \frac{2}{1-2z^{-1}} \} \quad\quad 查表 \\ = -𝜇[n]+2 \cdot (2)^n𝜇[n] = [-1+2^{n+1}]𝜇[n]\)
餘數法
反z轉換定義為:
\(x[n]=Z^{-1}\{X(z)\} = \frac{1}{2πj} \oint_CX(z)z^{n-1}dz\) 其中 C 是包含 X(z) 所有極點的封閉曲線,落在收斂區域中。餘數法根據複變分析的柯西餘數定理 Cauchy's Residue Theorem。
柯西餘數定理 Cauchy's Residue Theorem:
\(x[n]=Z^{-1}\{X(z)\} = \frac{1}{2πj} \oint_CX(z)z^{n-1}dz \\ = 封閉曲線C內所有極點,取 z^{n-1}X(z) 的餘數總和\)
若 X(z) 某個極點 \(P_k\),則該極點的餘數 Residue 為:
\( Residue[F(z), P_k] = (z-P_k)F(z)|_{z=P_k} = (z-P_k)z^{n-1}X(z)|_{z=P_k} \)
其中 \(F(z)=z^{n-1}X(z)\)
若訊號 z 轉換函式為 \(X(z)= \frac{z}{(z-0.75)(z+0.5)}\),求反z轉換
因為 \( z=0.75, z= -0.5 \) 讓分母為 0,是 X(z) 的極點
當 \(z=0.75 (P_1=0.75)\) 時
\(Residue[F(z), P_1] = \\ =(z-P_1)z^{n-1}X(z)|_{z=P_1} \\ = (z-0.75)z^{n-1} \frac{z}{(z-0.75)(z+0.5)}|_{z=0.75} \\ = \frac{z^n}{(z+0.5)}|_{z=0.75} = \frac{(0.75)^n}{(0.75+0.5)} = \frac{4}{5}(0.75)^n \)
當 \(z=-0.5 (P_1=-0.5)\) 時
\(Residue[F(z), P_2] = \\ =(z-P_2)z^{n-1}X(z)|_{z=P_2} \\ = (z+0.5)z^{n-1} \frac{z}{(z-0.75)(z+0.5)}|_{z=-0.5} \\ = \frac{z^n}{(z-0.75)}|_{z=-0.5} = \frac{(-0.5)^n}{(-0.5-0.75)} = -\frac{4}{5}(-0.5)^n \)
根據柯西餘數定理,反z轉換為餘數總和:
\(x[n] = Residue[F(z), P_1] + Residue[F(z), P_2]\) 因此反z轉換為
\(x[n]=[\frac{4}{5}(0.75)^n-\frac{4}{5}(-0.5)^n]𝜇[n]\)
沒有留言:
張貼留言