1. 程式人生 > >連續傳遞函式的離散化問題的一個誤區

連續傳遞函式的離散化問題的一個誤區

   最近思考關於傳遞函式的離散化問題時,產生了一個誤區,在這裡記錄一下。
當時想到s域到z域的對映時的一個關係式為
(1) z = e

s T z=e^{sT} \tag 1
   於是就想將連續傳遞函式離散化時為什麼不直接反變換
(2)
s = l n ( z
)
T
s=\frac{ln(z)}{T}\tag 2

   想了很久才弄出錯在哪了。s域和z域之間的對映關係是對同一個離散訊號而言的,不能將連續訊號的s變換和離散的z變換聯絡到一起。例如有
(3) G ( s ) = 1 s + 1 G_{(s)}=\frac{1}{s+1}\tag 3
   對應的離散系統 (將單位衝擊響應進行取樣之後的離散訊號) z變換為
(4) G ( z ) = 1 1 + e T z 1 G_{(z)}=\frac{1}{1+e^{-T}z^{-1}}\tag 4
   將 z = e s T z=e^{sT} 代入式 ( 4 ) (4) 得到
(5) G ( z ) = 1 1 + e T e s T G_{(z)}=\frac{1}{1+e^{-T}e^{-sT}}\tag 5
   式 ( 5 ) (5) 就是離散系統的拉式變換,將 s = l n ( z ) T s=\frac{ln(z)}{T} 代回就可得到離散系統的z變換,而將其代入連續系統傳遞函式式 ( 3 ) (3) 中沒有意義。

   上面採用的離散變換是所謂的直接變換,實際上是利用單位衝擊響應不變的方法進行變換。是利用對時域的單位衝擊響應訊號取樣的原理得到的,需要注意的是隻能保證單位衝擊響應不變,不能保證增益(單位階躍響應)不變。而在頻域的影響在下面根據自己的理解形象的梳理一下:
   如果利用單位衝擊響應不變對一個連續傳遞函式進行離散,在連續傳遞函式的s域中相當於將s域分為橫向的條帶(條頻寬度根據取樣週期而定),然後原s域的值按條帶依次移動混疊,最後得到離散系統的s域,即每個條帶的值重複。由於極點的值為無窮,所以混疊之後極點仍然存在;但零點的值為零,混疊之後不一定為零,因此不能保證零點仍然存在。而s域的虛軸即為頻率響應,同樣混疊。然後進行式(1)的變換,將離散系統的s域的每一個條帶都對映到z域的整個平面(s左半平面->z單位圓內)。
   除了利用保持時域訊號取樣不變的方法來對連續傳遞函式進行離散化,還可以直接在s域(頻域)上進行對映到z域。例如雙線性變換法的過程可以形象的理解成下面過程:首先有一個連續傳遞函式的s域,然後將整個s域非線性壓縮到一個橫向條帶中,然後這個條帶的值複製到每個條帶中,每個條帶值都相同,然後都對映到z域上。
   總而言之,根據自己的理解。連續傳遞函式的離散化問題在s域上可以看做是如何將原來s域變成按橫向條帶重複的s域的問題,而z域只是對按橫向條帶重複的s域的一個對映,作用僅僅是簡化離散後重復的s域。

附:
連續函式的離散化方法有許多,下面用Matlab中c2d()函式的引數選項來介紹:
'impluse':單位衝擊響應不變法,即直接z變換
'zoh'    :加零階保持器後進行z變換(預設選項)
'foh'    :加一階保持器後進行z變換
'tustin' :雙線性變換法
'matched':保持直流增益不變,同時傳遞函式的零極點按式(2)的關係對映不變
其他方法還有後向差分,前向差分,高階差分,這些方法c2d()函式並沒有。

(以上內容均為自己思考所得,如有錯誤和疏漏,感謝大家指正)