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]}=∑∞n=−∞x[n]z−n
反z轉換定義為:
x[n]=Z−1{X(z)}=12πj∮CX(z)zn−1dz 其中 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(ejω)=∑∞n=−∞x[n]e−jωn
可發現到 z=ejw
z轉換就是 DTFT 的另一種表示法。
收斂區域 Region of Convergence (ROC)
就是使得 z 轉換收斂的複數平面的 z 點集合,定義為
ROC={z:|∑∞n=−∞x[n]z−n|<∞}
其中 C 是包含原點的逆時針封閉路徑,落在收斂區域中。
ex: 求單位脈衝 δ[n] 的 z 轉換,並決定其收斂區域 ROC
單位脈衝的定義:δ[n]={1,if n=00,if n≠0
Z{δ[n]}=∑∞n=−∞δ[n]z−n=δ[0]z−0=1
ROC 為複數平面上所有 z 點集合
ex: 求單位步階 𝜇[n] 的轉換及其收斂區域
單位步階的定義:𝜇[n]={1,if t≥00,if t<0
Z{𝜇[n]}=∑∞n=−∞𝜇[n]z−n=∑∞n=0z−n=11−z−1
ROC 為 |z−1|<1 或 |z|>1
ex: 給定單位脈衝時間延遲 δ[n-k] ,其中 k>0,求 z 轉換及其 ROC
Z{δ[n−k]}=∑∞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]}=∑∞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]}=∑∞n=−∞x[n]z−n=∑∞n=−∞(0.5)n𝜇[n]z−n=∑∞n=0(0.5)nz−n=∑∞n=0(0.5z−1)n=11−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] | 11−z−1 或 zz−1 | $ |
-𝜇[-n-1] | 11−z−1 或 zz−1 | $ |
an𝜇[n] | 11−az−1 或 zz−a | $ |
−an𝜇[−n−1] | 11−az−1 或 zz−a | $ |
n𝜇[n] | z−1(1−az−1)2 或 z(z−1)2 | $ |
n2𝜇[n] | z−1(1+z−1)(1−z−1)3 或 z(z+1)(z−1)3 | $ |
e−an | 11−e−az−1 或 zz−e−a | $ |
sinω0n | zsinω0z2−2zcosω0+1 | $ |
cosω0n | z(z−cosω0)z2−2zcosω0+1 | $ |
z轉換的性質
線性運算原則
Z{αx1[n]+βx2[n]}=αX1(z)+βX2(z)
證明:
Z{αx1[n]+βx2[n]}=∑∞n=−∞(αx1[n]+βx2[n])z−n=α∑∞n=−∞x1[n]z−n+β∑∞n=−∞x2[n]z−n=αZ{x1[n]}+βZ{x2[n]}=αX1(z)+βX2(z)
時間延遲
若 x[n] 的 z 轉換為 X(z),時間延遲 x[n-k] 的 z 轉換為
Z{x[n−k]}=z−kX(z)
證明:
Z{x[n−k]}=∑∞−∞x[n−k]z−n=∑∞j=−∞x[j]z−(j+k)假設j=n−k,n=j+k=∑∞j=−∞x[j]z−jz−k)=z−k∑∞j=−∞x[j]z−j=z−kX(z)
轉換函式
LTI 系統方塊圖
y[n]=h[n]∗x[n] 其中 h[n] 稱為脈衝響應 (Impulse Response)
卷積定理也成立:
Z{y[n]}=Z{h[n]∗x[n]}=Z{h[n]}⋅Z{x[n]}
或 Y(z)=H(z)∗X(z)
因此轉換函式(Transform Function) 或 系統函式 (System Function)可表示為
H(z)=Y(z)X(z)
零點與極點
LTI 的轉換函式,可以用有理式函數 (Rational Function) 的型態表示,讓分子與分母都是 z−1 的多項式函數
H(z)=b0+b1z−1+...+bMz−Ma0+a1z−1+...+aNz−N 其中的係數包含 {ak},k=0,1,2,...N 與 {bk},k=0,1,2,...M
系統的轉換函式可因式分解為:
H(z)=b0a0zN−M∏Ml=1(z−zl)∏Nl=1(z−pl)
讓分子多項式為 0 的所有根,也就是 z=zl,l=1,2,...M ,稱為零點 Zeros
讓分母多項式為 0 的所有根,也就是z=pl,l=1,2,...N,稱為極點 Poles
b0a0 稱為系統的增益 gain
ex: 如 LTI 系統的轉換函式定義為 H(z)=11−z−1 ,求收斂區域、零點、極點
H(z)=11−z−1=zz−1
ROC 為 |z|>1,零點為 z=0 (讓分子為0), 極點為 z=1 (讓分母為0)
定理:穩定系統與極點
若 LTI 系統的轉換函式 H(z) 可表示成有理式函數,則 LTI 系統為穩定系統,若且惟若 H(z) 的所有極點都落在複數平面的單位圓內。
換句話說:LTI 要是穩定系統的充要條件為:LTI 的轉換函式,所有極點都要落在複數平面的單位圓內。若條件不成立,則構成不穩定的 LTI 系統。上面範例中,極點落在單位圓上,因此是不穩定系統。
ex: 轉換函式 H(z)=0.8−0.16z−1−0.64z−21−0.2z−1−0.2z−2+z3 ,求系統的零點、極點、增益
可使用 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)}=12πj∮CX(z)zn−1dz 其中 C 是封閉曲線,落在收斂區域中。
雖然公視是使用封閉曲線積分,實際的反z轉換運算,會採用以下三種方法:
- 長除法 long division method
- 部分分式展開法 partial fraction expansion method
- 餘數法 residue method
長除法
訊號或系統的 z 轉換,通常表示成兩個多項式相除的型態,因此可表示成幂級數 Power Series:
X(Z)=N(z)D(z)=∑∞n=0anz−n=a+a1z−1+a2z−2+....
其中 N(z) 是 Numerator 分子多項式,D(z) 是 Denominator 分母多項式。
求反 z 轉換時,可以使用長除法求幂級數的係數
ex: 訊號的 z 轉換函式如下,求 反 z 轉換
X(z)=1+z−1+2z−2−z−3+3z−41−z−1+z−2
1 +2z−1 +3z−2 _1 −z−1 +z−2)1 +z−1 +2z−2 −z−3 +3z−4 1 −z−1 +z−2 _ 2z−1 +z−2 −z−3 2z−1 −2z−2 +2z−3 _ 3z−2 −3z−3 +3z−4 3z−2 −3z−3 +3z−4 _ 0
因此 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)=b0+b1z−1+...+bMz−Ma0+a1z−1+...+aNz−N
長除法可用遞迴方法計算:
x[n]=[bn−∑ni=1x[n−i]ai]/a0,n=1,2,... ,其中 x[0]=b0/a0
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)=11−3z−1+2z−2 ,求反z轉換
分母可分解為 (1−z−1)(1−2z−1)
因此可假設 X(z)=11−3z−1+2z−2=A1−z−1+B1−2z−1
A, B 為常數。通分後可得
1=A(1−2z−1)+B(1−z−1)
假設 z=1,則 1=A(1−2)+B(1−1)⇒A=−1
假設 z=2,則 1=A(1−1)+B(1−1/2)⇒B=2
因此 X(z)=−11−z−1+21−2z−1
求反z轉換
x[n]=Z−1{X(z)}=Z−1{−11−z−1+21−2z−1}查表=−𝜇[n]+2⋅(2)n𝜇[n]=[−1+2n+1]𝜇[n]
餘數法
反z轉換定義為:
x[n]=Z−1{X(z)}=12πj∮CX(z)zn−1dz 其中 C 是包含 X(z) 所有極點的封閉曲線,落在收斂區域中。餘數法根據複變分析的柯西餘數定理 Cauchy's Residue Theorem。
柯西餘數定理 Cauchy's Residue Theorem:
x[n]=Z−1{X(z)}=12πj∮CX(z)zn−1dz=封閉曲線C內所有極點,取zn−1X(z)的餘數總和
若 X(z) 某個極點 Pk,則該極點的餘數 Residue 為:
Residue[F(z),Pk]=(z−Pk)F(z)|z=Pk=(z−Pk)zn−1X(z)|z=Pk
其中 F(z)=zn−1X(z)
若訊號 z 轉換函式為 X(z)=z(z−0.75)(z+0.5),求反z轉換
因為 z=0.75,z=−0.5 讓分母為 0,是 X(z) 的極點
當 z=0.75(P1=0.75) 時
Residue[F(z),P1]==(z−P1)zn−1X(z)|z=P1=(z−0.75)zn−1z(z−0.75)(z+0.5)|z=0.75=zn(z+0.5)|z=0.75=(0.75)n(0.75+0.5)=45(0.75)n
當 z=−0.5(P1=−0.5) 時
Residue[F(z),P2]==(z−P2)zn−1X(z)|z=P2=(z+0.5)zn−1z(z−0.75)(z+0.5)|z=−0.5=zn(z−0.75)|z=−0.5=(−0.5)n(−0.5−0.75)=−45(−0.5)n
根據柯西餘數定理,反z轉換為餘數總和:
x[n]=Residue[F(z),P1]+Residue[F(z),P2] 因此反z轉換為
x[n]=[45(0.75)n−45(−0.5)n]𝜇[n]
沒有留言:
張貼留言