1.LSI系統的轉移函數
對於一個線性時不變離散時間系統(如下圖所示),我們在之前就已經接觸到了4種不同的描述方法。
1.1 頻率響應
H ( e j ω ) = ∑ n = 0 ∞ h ( n ) e − j ω n
H(e^{j\omega})=\sum_{n=0}^{\infty}h(n)e^{-j\omega n}
H ( e j ω ) = n = 0 ∑ ∞ h ( n ) e − j ω n
1.2 轉移函數
H ( z ) = ∑ n = 0 ∞ h ( n ) z − n
H(z)=\sum_{n=0}^{\infty}h(n)z^{-n}
H ( z ) = n = 0 ∑ ∞ h ( n ) z − n
1.3 差分方程
y ( n ) = − ∑ k = 1 N a ( k ) y ( n − k ) + ∑ r = 0 M b ( r ) x ( n − r )
y(n)=-\sum_{k=1}^Na(k)y(n-k)+\sum_{r=0}^Mb(r)x(n-r)
y ( n ) = − k = 1 ∑ N a ( k ) y ( n − k ) + r = 0 ∑ M b ( r ) x ( n − r )
1.4 卷積關係
y ( n ) = x ( n ) ∗ h ( n ) = ∑ k = − ∞ ∞ x ( k ) h ( n − k )
y(n)=x(n)*h(n)=\sum_{k=-\infty}^\infty x(k)h(n-k)
y ( n ) = x ( n ) ∗ h ( n ) = k = − ∞ ∑ ∞ x ( k ) h ( n − k )
上邊的4種方法從不同的角度描述了一個LSI系統的物理特性,他們之間有着密切的聯繫,其聯繫的紐帶就是系統的單位衝激響應h ( n ) h(n) h ( n )
1.5 系統的轉移函數H ( Z ) H(Z) H ( Z )
對上邊的第三式兩邊取Z變換,得
Y ( z ) = − Y ( z ) ∑ k = 1 N a ( k ) z − k + X ( z ) ∑ r = 0 M b ( r ) z − r Y ( z ) [ 1 + ∑ k = 1 N a ( k ) z − k ] = X ( z ) [ b ( 0 ) + ∑ r = 1 M b ( r ) z − r ]
Y(z)=-Y(z)\sum_{k=1}^Na(k)z^{-k}+X(z)\sum_{r=0}^Mb(r)z^{-r}\\ \quad \\Y(z)[1+\sum_{k=1}^Na(k)z^{-k}]=X(z)[b(0)+\sum_{r=1}^Mb(r)z^{-r}]
Y ( z ) = − Y ( z ) k = 1 ∑ N a ( k ) z − k + X ( z ) r = 0 ∑ M b ( r ) z − r Y ( z ) [ 1 + k = 1 ∑ N a ( k ) z − k ] = X ( z ) [ b ( 0 ) + r = 1 ∑ M b ( r ) z − r ]
對上邊的式子進行整理可得
H ( z ) = Y ( z ) X ( z ) = ∑ r = 0 M b ( r ) z − r 1 + ∑ k = 1 N a ( k ) z − k
H(z)=\frac{Y(z)}{X(z)}=\frac{\sum_{r=0}^Mb(r)z^{-r}}{1+\sum_{k=1}^Na(k)z^{-k}}
H ( z ) = X ( z ) Y ( z ) = 1 + ∑ k = 1 N a ( k ) z − k ∑ r = 0 M b ( r ) z − r
上式H ( z ) H(z) H ( z ) 就被稱爲系統的轉移函數。它即可以定義爲系統單位抽樣響應h ( n ) h(n) h ( n ) 的z變換,也可以 定義爲系統的輸出、輸入Z變換之比。
2.matlab編程訓練,求系統的階躍響應
我們之前學過的,如果已經知道系統的h ( n ) h(n) h ( n ) ,由於y ( n ) = x ( n ) ∗ h ( n ) y(n)=x(n)*h(n) y ( n ) = x ( n ) ∗ h ( n ) ,則我們可以輕鬆的使用conv函數將其求得,但是如果我們不知道h ( n ) h(n) h ( n ) ,已知Y ( z ) Y(z) Y ( z ) 、X ( z ) X(z) X ( z ) ,需要求y ( n ) y(n) y ( n ) ,則我們可以根據公式,
y ( n ) = − ∑ k = 1 N a ( k ) y ( n − k ) + ∑ r = 0 M b ( r ) x ( n − r ) = b ( 1 ) x ( n ) + b ( 2 ) x ( n − 1 ) + . . . + b ( n b + 1 ) x ( n − n b ) − a ( 2 ) y ( n − 1 ) − . . . − a ( n a + 1 ) y ( n − n a )
y(n)=-\sum_{k=1}^Na(k)y(n-k)+\sum_{r=0}^Mb(r)x(n-r)\\ \quad
\\=b(1)x(n)+b(2)x(n-1)+...+b(n_b+1)x(n-n_b)\\ \quad \\-a(2)y(n-1)-...-a(n_a+1)y(n-n_a)
y ( n ) = − k = 1 ∑ N a ( k ) y ( n − k ) + r = 0 ∑ M b ( r ) x ( n − r ) = b ( 1 ) x ( n ) + b ( 2 ) x ( n − 1 ) + . . . + b ( n b + 1 ) x ( n − n b ) − a ( 2 ) y ( n − 1 ) − . . . − a ( n a + 1 ) y ( n − n a )
求取我們的y ( n ) y(n) y ( n ) ,使用matlab內的一個函數y = f i l t e r ( b , a , x ) y=filter(b,a,x) y = f i l t e r ( b , a , x ) 其中x 、 y 、 a 和 b x、y、a和b x 、 y 、 a 和 b 都是向量。
2.1 編程實訓
已知一個系統的轉移函數如下所示:
H ( z ) = 0.001836 + 0.007344 z − 1 + 0.011016 z − 2 + 0.007374 z − 3 + 0.001836 z − 4 1 − 3.0544 z − 1 + 3.8291 z − 2 − 2.2925 z − 3 + 0.55075 z − 4
H(z)=\frac{0.001836+0.007344z^{-1}+0.011016z^{-2}+0.007374z^{-3}+0.001836z^{-4}}{1-3.0544z^{-1}+3.8291z^{-2}-2.2925z^{-3}+0.55075z^{-4}}
H ( z ) = 1 − 3 . 0 5 4 4 z − 1 + 3 . 8 2 9 1 z − 2 − 2 . 2 9 2 5 z − 3 + 0 . 5 5 0 7 5 z − 4 0 . 0 0 1 8 3 6 + 0 . 0 0 7 3 4 4 z − 1 + 0 . 0 1 1 0 1 6 z − 2 + 0 . 0 0 7 3 7 4 z − 3 + 0 . 0 0 1 8 3 6 z − 4
求該系統的階躍響應。
% % 轉移函數
clc;
clear;
x= ones ( 100 , 1 ) ;
% 定義階躍輸入
t= 1 : 100 ;
b= [ 0.001836 , 0.007344 , 0.011016 , 0.007374 , 0.001836 ] ;
% 定義向量b
a= [ 1 , - 3.0544 , 3.8291 , - 2.2925 , 0.55075 ] ;
% 定義向量a
y= filter ( b, a, x) ;
% 得到y ( n)
hold on
h1= plot ( t, x, 'b' ) ;
h2= plot ( t, y, 'r' ) ;
hold off
% 畫圖結束
legend ( [ h1, h2] , '階躍輸入' , '階躍響應' ) ;
% 添加標註
其運行結果爲:
2.2 求取系統的單位抽樣響應h(n)
在我們得到上邊的情況下,如果我們想要得到該系統的單位抽樣響應,編輯mtalab代碼如下:
[ h, t] = impz ( b, a, 40 ) ;
% 令h ( n) 的長度爲N= 40
stem ( t, h, '.' ) ;
% 繪製離散的h ( n)
grid on;
其顯示結果如下所示:
2.3 求上述系統的頻率響應
% % 得到系統的頻率響應
[ H, w] = freqz ( b, a, 256 , 'whole' , 1 ) ;
% whole 指定計算的頻率範圍是0 - Fs, 此處我們設置Fs= 1
Hr= abs ( H) ;
% 得到絕對值,也就是幅度值
plot ( w, Hr, 'r' , 'linewidth' , 2 ) ;
% 繪製圖形,並且設置顏色和線寬
grid on;
% 顯示方格
xlabel ( '\omega /2\pi' ) ;
ylabel ( '|H(e^{j\omega})|' ) ;
title ( '幅頻響應' )
% 座標軸設置
輸出圖像如下所示:
3.參考文章
數字信號處理理論、算法與實現(第三版)