Upload
yjlee123
View
37
Download
4
Tags:
Embed Size (px)
Citation preview
Scilab之訊號處理 (Signal Processing with Scilab)1
Scilab Group2 Superbfansy(翻譯) 3
1本文排版成三種格式: 螢幕閱讀格式 、A4 列印格式 讀者可視不同需要參考。有關 Scilab請參考:http://www-rocq.inria.fr/scilab/或 Scilab中文版主網頁。
2INRIA Meta2 Project/ENPC Cergrene3Scilab中文開發群
目 錄
1 基礎工具說明 11.1 介紹 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 訊號 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.1 檔案的儲存載入讀取及寫入 . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2 隨機訊號的模擬 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 多項式及系統轉移函數 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 多項式的計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 轉移函數的表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4 狀態空間表示法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
1.5 改變系統之表現法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
1.6 系統連結 (Interconnecting systems). . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.7 連續系統之離散化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
1.8 訊號之過濾 (Filtering) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.9 訊號之繪圖顯像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
1.10 訊號處理工具之開發 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
參考文獻 22
i
基礎工具說明
內容
1.1 介紹 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 訊號 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.1 檔案的儲存載入讀取及寫入 . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2 隨機訊號的模擬 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 多項式及系統轉移函數 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 多項式的計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 轉移函數的表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4 狀態空間表示法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
1.5 改變系統之表現法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
1.6 系統連結 (Interconnecting systems) . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.7 連續系統之離散化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
1.8 訊號之過濾 (Filtering) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
1.9 訊號之繪圖顯像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
1.10 訊號處理工具之開發 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
1.1 介紹
本文件的目的是說明 Scilab軟體在訊號處理上的使用。我們集合了大量的訊號處理演算法,以
Scilab函數來作為工具。
本手冊一部份是關於訊號處理學習的教學工具,一部份是在 Scilab中可使用的訊號處理工具
箱的學習指南。對哪些已經熟習手冊中訊號處理教學的部份的人來說這部份興趣會比較低。
在訊號處理工具箱的每一個工具,在手冊的教學區都可取得解釋方法背後的技術。這部份會
在描述函數設計的使用之後來完成前一節所描述的訊號處理。為了得到函數精確及完整的描述
(語法、功能敘述、範例及相關函數),這時候我們鼓勵讀者開啟 Scilab然後查閱線上輔助相關的
1
基礎工具說明 訊號
函數。這節由一個範例來展示函數的使用。一般來說,範例區在說明如何使用函數的不同模式
比語法區清楚。
本手冊中 (typewriter-face)的字型是用來表示函數的名稱或是發生在 Scilab的範例對話框。
每個訊號處理的主題都用 Scilab的範例及圖表來示範。更進一步幫助使用者,這有一個對每
個範例及圖表可用的執行檔案再生範例或圖表。執行範例或圖表用下列的 Scilab指令:
-->exec('file.name')
讓 Scilab執行叫作 file.name所包含的所有 Scilab指令。.想知道在 Scilab中有哪些可用的訊
號處理工具可以輸入:
-->disp(siglib)
1.2 訊號
對訊號處理來說,第一個要知道的就是儲存與讀取訊號或是只有訊號中由 Scilab產生的或要使
用的一小部份。最後,合成 (隨機)訊號的產生在訊號處理工具的實踐上是一個重要的工具。這
節說明這些主題。
1.2.1 檔案的儲存載入讀取及寫入
在 Scilab環境中已處理的或是新創的訊號與變數可由 Scilab直接寫入儲存檔案,save主要的語
法:
-->save(file_name[,var_list])
其中 file_name是要寫入的檔案, var_list是要寫入的變數列表。跟 save運作相反的由 load
來完成,它的語法:
-->load(file_name[,var_list])
其中參數列表跟save使用的一致。
雖然 save跟 load指令很方便,但是使用read及write能在檔案和 Scilab中更能控制資料的轉
移。這兩個指令的運作跟在 Fortran上的 read及 write相似。這兩個指令的語法如下。write的
語法是:
-->write(file,x[,form])
第二個參數x是要寫入檔案中值的矩陣。
read的語法是:
-->x=read(file,m,n[,form])
2 JJ ª目 錄 II
基礎工具說明 訊號
參數m,n是合成資料矩陣x列跟行的維度,form是格式規定的敘述。
要說明線上輔助來閱讀本手冊的使用,我們給 Scilab指令的結果:
-->help read
read(1) Scilab Function read(1)
NAME
read - matrices read
CALLING SEQUENCE
[x]=read(file-name,m,n,[format])
[x]=read(file-name,m,n,k,format)
PARAMETERS
file-name : string or integer (logical unit number)
m, n : integers (dimensions of the matrix x). Set m=-1 if you dont
know the numbers of rows, so the whole file is read.
format : string (fortran format). If format='(a)' then read reads a vec-
tor of strings n must be equal to 1.
k : integer
DESCRIPTION
reads row after row the mxn matrix x (n=1 for character chain) in the file
file-name (string or integer).
Two examples for format are : (1x,e10.3,5x,3(f3.0)),(10x,a20) ( the default
value is *).
The type of the result will depend on the specified form. If form is
numeric (d,e,f,g) the matrix will be a scalar matrix and if form contains
the character a the matrix will be a matrix of character strings.
A direct access file can be used if using the parameter k which is is the
vector of record numbers to be read (one record per row), thus m must be
m=prod(size(k)).
3 JJ ª目 錄 II
基礎工具說明 訊號
To read on the keyboard use read(%io(1),...).
EXAMPLE
A=rand(3,5); write('foo',A);
B=read('foo',3,5)
B=read('foo',-1,5)
read(%io(1),1,1,'(a)') // waits for user's input
SEE ALSO
file, readb, write, %io, x_dialog
1.2.2 隨機訊號的模擬
合成訊號的創造可用 Scilab函數 rand產生隨機的號碼來達成,使用者可以產生一連串隨機的數
字,一個隨機的方陣或是高斯機率定律。一個種子可能再次產生一樣的 pseudo隨機串列。
。在訊號處理中,我們通常聚焦在有確定的平均及協方差結構來產生標準常態隨機變數,這
由 rand產生標準常態隨機數字來完成,並由執行主要線性數值運算來修正它們。例如要從分佈
在標準常態 (如 N(my,Λy) )的隨機向量x,增加一個分佈在 N()的隨機變數 y,我們可以執行下
列的運算:
y = Λ1/2y x + my (1.1)
其中 Λ1/2y 是 Λy 矩陣的方根。一個矩陣的方根可用如下的 chol來得到:
-->//exec('rand1.code')
-->//create normally distributed N(m,L) random vector y
-->m=[-2;1;10];
-->L=[3 2 1;2 3 2;1 2 3];
-->L2=chol(L);
-->rand('seed');
-->rand('normal');
-->x=rand(3,1)
x =
! - .7616491 !
4 JJ ª目 錄 II
基礎工具說明 多項式及系統轉移函數
! .6755537 !! 1.4739763 !
-->y=L2'*x+m
y =
! - 3.3192149 !
! .9926595 !
! 12.122419 !
注意,它是從chol用來求想知道的協方差矩陣的平方根所得到的轉置矩陣,下述的規格化常
態機率定律的隨機數列也可以由過濾來得到。也就是,讓隨機的白標準常態數列通過線性濾波
器來得到有規格化頻譜的常態序列。對一個有離散傅利葉轉換 H(w)的濾波器,濾波結果的數列會是一個 S(w) = |H(w)|2光譜。 1.8部份會討論更多濾波。
1.3 多項式及系統轉移函數
Scilab中多項式,矩陣多項式及轉移矩陣也有定義而且它允許這些在自然符號型式主題的定義
和操作。多項式容易產生操作, Scilab中的 poly可以用來規定多項式的係數或是多項式的根。
poly一個非常好用的同伴是 roots,給定多項式 q的根:
-->a=roots(q);
下列的例子來闡明 poly及 roots的用法:
-->//exec('poly1.code')
-->//illustrate the roots format of poly
--> q1=poly([1 2],'x')
q1 =
2
2 - 3x + x
--> roots(q1)
ans =
! 1. !
! 2. !
-->//illustrate the coefficients format of poly
5 JJ ª目 錄 II
基礎工具說明 多項式及系統轉移函數
--> q2=poly([1 2],'x','c')
q2 =
1 + 2x
--> roots(q2)
ans =
- .5
-->//illustrate the characteristic polynomial feature
--> a=[1 2;3 4]
a =
! 1. 2. !
! 3. 4. !
--> q3=poly(a,'x')
q3 =
2
- 2 - 5x + x
--> roots(q3)
ans =
! - .3722813 !
! 5.3722813 !
注意第一個多項式 q1預設用roots,而結果多項式用 (s − 1)(s − 2) = 2 − 3s + s2 這個型式;
第二個多項式 q2由向量元素給的係數來定義;最後第 3個多項式 q3由定義 det(sI − a)計算出矩陣 a的特徵多項式,這邊 roots的計算產生 a矩陣的特徵值。
Scilab可以用相同的方法來操作多項式,像是其它數學對象如純量向量和矩陣,也就是多項
式可被其它多項式來加減乘除。下列 Scilab說明多項式間的操作:
-->//exec('poly2.code')
-->//illustrate some operations on polynomials
--> x=poly(0,'x')
6 JJ ª目 錄 II
基礎工具說明 多項式及系統轉移函數
x =
x
--> q1=3*x+1
q1 =
1 + 3x
--> q2=x**2-2*x+4
q2 =
2
4 - 2x + x
--> q2+q1
ans =
2
5 + x + x
--> q2-q1
ans =
2
3 - 5x + x
--> q2*q1
ans =
2 3
4 + 10x - 5x + 3x
--> q2/q1
ans =
2
4 - 2x + x
----------
1 + 3x
7 JJ ª目 錄 II
基礎工具說明 多項式及系統轉移函數
--> q2./q1
ans =
2
4 - 2x + x
----------
1 + 3x
注意以上的說明,我們由定義一個基本的多項式元素 x開始 (它不應該跟代表前個變數的字
串'x'混淆)。另外非常重要的一點是多項式的除法產生有理多項式,由列表來表示 (看 Scilab中
的 help list及help type)。
一個有理由包含 4個元素的列表來表示,第一個元素用 y值指出這個列表表示一個有理多項
式。列表中的第二個及第三個是有理多項式的分子和分母;列表的最後一個元素是[]或是字串
(更多這部份的主題在這章之後說明 (看1.3.2))。下列的對話說明列表中代表一個有理多項式的元
素:
-->//exec('poly3.code')
-->//list elements for a rational polynomial
--> p=poly([1 2],'x')./poly([3 4 5],'x')
p =
2
2 - 3x + x
------------------
2 3
- 60 + 47x - 12x + x
--> p(1)
ans =
!r num den dt !
--> p(2)
ans =
2
2 - 3x + x
--> p(3)
8 JJ ª目 錄 II
基礎工具說明 多項式及系統轉移函數
ans =
2 3
- 60 + 47x - 12x + x
--> p(4)
ans =
[]
1.3.1 多項式的計算
多項式上一個非常重要的運算是特殊點的計算,例如想要知道多項式 x2 + 3x − 5在點 x = 17.2的值。多項式的計算用 freq來完成,freq的語法如下:
-->pv=freq(num,den,v)
參數 v是在計算需要的值的向量。
濾波器及系統轉移函數頻率響應的估算用命令 freq來達到訊號處理的目的,例如一個離散
濾波器在 z平面的單位圓上可由下列所示的來計算:
-->//exec('poly4.code')
-->//demonstrate evaluation of discrete filter
-->//on the unit circle in the z-plane
--> h=[1:5,4:-1:1];
--> hz=poly(h,'z','c');
--> f=(0:.1:1);
--> hf=freq(hz,1,exp(%pi*%i*f));
--> hf'
ans =
! 25. !
! 6.3137515 - 19.431729i !
! - 8.472136 - 6.1553671i !
9 JJ ª目 錄 II
基礎工具說明 狀態空間表示法
! - 1.9626105 + 1.42592i !
! 1.110E-16 - 4.441E-16i !! 1. - 7.498E-33i !
! .4721360 - 1.4530851i !
! - .5095254 - .3701919i !
! - 5.551E-17i !
! .1583844 + .4874572i !
! 1. + 4.898E-16i !
此處 h是長度 9的三角脈衝響應 FIR濾波器,濾波器的轉移函數可由形成一個代表濾波器 z
轉換的多項式得到。藉由計算多項式在點 exp(2πin),n = 0, 1, . . . , 10,其中在十個等分的點,角度[0, π]的範圍的單位圓上計算z轉換。
1.3.2 轉移函數的表示
訊號處理用有理多項式來描述訊號與系統的轉移函數,這些轉移函數能表示連續時間訊號或系
統或者是離散的時間訊號或系統。此外,離散的訊號或系統跟由取樣的連續訊號或系統有關。
這處理有理多項式的函數可用轉移函數來表達,稱為 (syslin):
-->sl=syslin(domain,num,den)
函數 syslin在線性系統的狀態空間描述法的另一個用法在下一節描述。
1.4 狀態空間表示法
連續時間線性系統的古典狀態空間描述:
x(t) = Ax(t) + Bu(t)
y(t) = Cx(t) + Du(t)
x(0) = x0
其中 A,B,C 及 D是矩陣,x0是向量,而對離散時間系統用這個型式:
x(n + 1) = Ax(n) + Bu(n)
y(n) = Cx(n) + Du(n)
x(0) = x0
在 Scilab中狀態空間描述法用 syslin函數:
-->sl=syslin(domain,a,b,c [,d[,x0]])
sl的回傳值是一個目錄,其中 s=list('lss',a,b,c,d,x0,domain)。
有符號目標的值,它代表系統的狀態空間描述,是個在系統中操作的可創造函數。例如,我
們可以用並聯或串聯來結合兩個系統,把它們從狀態空間描述轉換成轉移函數描述及這些主題
及其它的都在之後的章節討論。
10 JJ ª目 錄 II
基礎工具說明 改變系統之表現法
1.5 改變系統之表現法
線性系統有時候由轉移函數表示,有時候由狀態方程式。當想要改變線性系統的表示方法,這
工作有兩個 Scilab函數可用。第一個函數 ft2ss,把轉移函數所描述的系統轉換到狀態空間表示
法描述的系統,第二個函數 ss2tf用相反的方式運作。
tf2ss的語法如下:
-->sl=tf2ss(h)
一個重要的細節,轉移函數 h必須是最小相位;也就是說,極點多項式的階數必須相等或是
比零點多項式更高。
-->h=ss2tf(sl)
以下的範例說明這兩個函數的使用:
-->//exec('sysrep1.code')
-->//Illustrate use of ss2tf and tf2ss
-->h1=iir(3,'lp','butt',[.3 0],[0 0])
h1 =
2 3
.2569156 + .7707468z + .7707468z + .2569156z
------------------------------------------------
2 3
.0562972 + .4217870z + .5772405z + z
-->h1=syslin('d',h1);
-->s1=tf2ss(h1)
s1 =
s1(1) (state-space system:)
!lss A B C D X0 dt !
s1(2) = A matrix =
! - .1005672 .1481983 - 2.429E-17 !
11 JJ ª目 錄 II
基礎工具說明 連續系統之離散化
! - .7153689 - .3117460 - .2178352 !! .3679056 .9934920 - .1649273 !
s1(3) = B matrix =
! - .2970827 !
! - 1.1777013 !
! .2281256 !
s1(4) = C matrix =
! - 2.0951899 - 5.551E-17 - 2.082E-16 !
s1(5) = D matrix =
.2569156
s1(6) = X0 (initial state) =
! 0. !
! 0. !
! 0. !
s1(7) = Time domain =
d
此處用函數 iir (見 ??節)創造一個離散 IIR的轉移函數,h1的第四個參數設定用 syslin函數,
然後在清單型式中用 tf2ss狀態空間表示法得到。
1.6 系統連結 (Interconnecting systems)
Scilab環境中產生的線性系統可用串聯或並聯的方式互相連結,在圖 1.1中繪出系統可能互連的
四種方式。圖中的符號 s1,s2代表兩個線性系統,它在 Scilab中由轉移函數或是狀態空間表示
式來表示。對圖 1.1中每一四個方塊圖,繪出互連的 Scilab指令在左圖中用 typewriter-face格式
表示。
1.7 連續系統之離散化
在 Scilab中,由狀態空間或轉移函數描述的一個連續時間的線性系統,可用 dscr函數來轉換成
離散時間的狀態空間或是轉移函數表示法。
12 JJ ª目 錄 II
基礎工具說明 連續系統之離散化
s1*s2- s1 - s2 -
s1+s2
-
-
s2
s1
?
6+ -
[s1,s2]
-
-
s2
s1
?
6+ -
[s1;s2]
-
-
s2
s1
-
-
圖 1.1: Block Diagrams of System Interconnections
例如考慮一個用狀態空間型式給定的輸入輸出映射為:
(C)
{x(t) = Ax(t) + Bu(t)y(t) = Cx(t) + Du(t)
(1.3)
從常數方程式的變數中,狀態 x(t)的值在任何時間 t都可以計算為
x(t) = eAtx(0) +∫ t
0eA(t−σ)Bu(σ)dσ (1.4)
設 h為時間步階且考慮一個輸入 u,在 h長度區間中為一個常數。然後連結 (1.3)就是下列
的離散時間模型,用 (1.4)常數方程式的變數得到。
(D)
{x(n + 1) = Ahx(n) + Bhu(n)
y(n) = Chx(n) + Dhu(n)
其中
Ah = exp(Ah)
Bh =∫ h
0eA(h−σ)Bdσ
13 JJ ª目 錄 II
基礎工具說明 連續系統之離散化
Ch = C
Dh = D
既然可用 Scilab的 exp計算指數矩陣的運算,它是直接的來執行這些式子,不過運
算exp(Ah)需要涉及額外的數值計算 ([30])
假如我們取
G =
[A B
0 0
]其中零矩陣的維度已選定故 G是方的然後我們增加
exp(Gh) =
[Ah Bh
0 I
]
當 A是非奇異矩陣,我們也有
Bh = A−1(Ah − I)B.
這正是 dscr函數在狀態空間格式中把一個連續時間線性系統做離散化。
用系統矩陣的語法如下:
-->[f,g[,r]]=dscr(syslin('c',a,b,[],[]),dt [,m])
其中 a跟 b是兩個跟連繫時間狀態空間描述有關的矩陣
x(t) = Ax(t) + Bu(t)
且 f跟 g對離散時間系統是結果矩陣
x(n + 1) = Fx(n) + Gu(n)
其中取樣周期是 dt。在這事件中第四個參數 m給定,連續時間系統假設有隨機的輸入所以連續
時間方程式為:
x(t) = Ax(t) + Bu(t) + w(t)
其中 w(t) 是白零平均協方差 m的高斯隨機程序 (white,aero-mean,Gaussian random sequence of
covariance m)
x(n + 1) = Fx(n) + Gu(n) + q(n)
其中 q(n) 是白零平均協方差 r 的高斯隨機程序 (white,aero-mean,Gaussian random sequence of
covariance r)
當參數是在狀態空間型式的線性系統,dscr的語法是
-->[sld[,r]]=dscr(sl,dt[,m])
14 JJ ª目 錄 II
基礎工具說明 連續系統之離散化
其中 sl跟 sld分別代表呈現連續與離散線性系統表示法的清單。這的 m及 r跟第一個函數的
語法是一樣的。當函數參數在轉移函數型式裡是線性系統,語法採用這種型式:-->[hd]=dscr(h,dt)
其中現在的 h及 hd分別代表的是連續與離散系統的轉移函數描述,轉移函數語法不允許隨
機系統的表示法。
以下是 Scilab的 dscr使用範例
-->//exec('dscr1.code')
-->//Demonstrate the dscr function
--> a=[2 1;0 2]
a =
! 2. 1. !
! 0. 2. !
--> b=[1;1]
b =
! 1. !
! 1. !
--> [sld]=dscr(syslin('c',a,b,eye(2,2)),.1);
--> sld(2)
ans =
! 1.2214028 .1221403 !
! 0. 1.2214028 !
--> sld(3)
ans =
! .1164208 !
! .1107014 !
15 JJ ª目 錄 II
基礎工具說明 訊號之過濾 (Filtering)
1.8 訊號之過濾 (Filtering)
線性系統訊號的濾波 (或是計算系統的時間響應)藉由有兩種格式的函數 flts來完成。第一種格
式由遞迴計算濾波器的輸出,而第二種格式由轉換計算濾波器輸出。函數的語法如下, flts的
語法是:-->[y[,x]]=flts(u,sl[,x0])
對現性系統的事件來說用它的狀態空間描述法來表示 (見1.4節)且
-->y=flts(u,h[,past])
對線性系統由其轉移函數來表示。
一般而言第二種格式比第一種格式快很多,儘管如此,第一種格式也產生狀態的改變。以下
說明的是 flts用第二種格式的使用的範例。
-->//filtering of signals
-->//make signal and filter
-->[h,hm,fr]=wfir('lp',33,[.2 0],'hm',[0 0]);
-->t=1:200;
-->x1=sin(2*%pi*t/20);
-->x2=sin(2*%pi*t/3);
-->x=x1+x2;
-->z=poly(0,'z');
-->hz=syslin('d',poly(h,'z','c')./z**33);
-->yhz=flts(x,hz);
-->plot(yhz);
注意,以上的範例中,一個由兩個不同頻率的弦波加總的訊號由低通濾波器來濾波,濾波器
的截止頻率。圖 1.2說明弦波的初始和而圖 1.3說明濾波後的訊號。
16 JJ ª目 錄 II
基礎工具說明 訊號之過濾 (Filtering)
0 20 40 60 80 100 120 140 160 180 200−2.0
−1.5
−1.0
−0.5
0.0
0.5
1.0
1.5
2.0
圖 1.2: exec('flts1.code') Sum of Two Sinusoids
0 20 40 60 80 100 120 140 160 180 200−1.5
−1.0
−0.5
0.0
0.5
1.0
1.5
圖 1.3: exec('flts2.code') Filtered Signal
17 JJ ª目 錄 II
基礎工具說明 訊號之繪圖顯像
1.9 訊號之繪圖顯像
這裡說明一些最簡單的繪圖指令的特點,線上輔助裡有更完整的圖形特點說明。我們呈現一些
例子來說明如何建構一些圖形的型式。
要說明一個 FIR濾波器的脈衝響應要如何畫出我們呈現以下的 Scilab部份
-->//Illustrate plot of FIR filter impulse response
-->[h,hm,fr]=wfir('bp',55,[.2 .25],'hm',[0 0]);
-->plot(h)
這裡有個用 Hamming window構成的帶通濾波器,截止頻率是 0.2,0.25,濾波器長度是 55。
0 10 20 30 40 50 60−0.10
−0.08
−0.06
−0.04
−0.02
0.00
0.02
0.04
0.06
0.08
0.10
圖 1.4: exec('plot1.code') Plot of Filter Impulse Response
在第 ??章可以找到更多如何作 FIR濾波器。結果秀在圖 1.4。
訊號與系統的頻率響應需要計算在虛軸 jω的 s轉換或是單位圓上的z轉換,一個連續時間系
統的頻率響應大小計算如下:
-->//Evaluate magnitude response of continuous-time system
-->hs=analpf(4,'cheb1',[.1 0],5)
hs =
161.30794
18 JJ ª目 錄 II
基礎工具說明 訊號之繪圖顯像
---------------------------------------------------
2 3 4179.23104 + 96.905252s + 37.094238s + 4.9181782s + s
-->fr=0:.1:15;
-->hf=freq(hs(2),hs(3),%i*fr);
-->hm=abs(hf);
-->plot(fr,hm),
這裡我們用 analpf函數來作一個類比低通濾波器 (更多詳情見第 ??章)這個濾波器是四階截
止頻率五赫茲的 type Chebyshev,freq (見 1.3.1)計算出轉移函數 hs在虛軸上 fr的值。結果秀在
圖 1.5。
0 5 10 150.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
圖 1.5: exec('plot2.code') Plot of Continuous Filter Magnitude Response
要畫出離散濾波器的大小響應,它在z平面的單位圓上轉移函數的計算已完成,可以用函
數frmag來達成相似過程的型式。
-->[xm,fr]=frmag(num[,den],npts)
xm是一個傳回參數,fr中的值是大小響應,包含正規化離散頻率在範圍[0, 0.5]值。
-->//demonstrate Scilab function frmag
19 JJ ª目 錄 II
基礎工具說明 訊號之繪圖顯像
-->hn=eqfir(33,[0,.2;.25,.35;.4,.5],[0 1 0],[1 1 1]);
-->[hm,fr]=frmag(hn,256);
-->plot(fr,hm),
這有一個用 eqfir函數創的一個 FIR低通濾波器。 (見 ??)
0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.500.0
0.2
0.4
0.6
0.8
1.0
1.2
圖 1.6: exec('plot3.code') Plot of Discrete Filter Magnitude Response
其他特殊的繪圖函數,對有理系統轉移函數的波德圖 bode,群延遲 group及極零點圖 plzr。
-->//Demonstrate function plzr
-->hz=iir(4,'lp','butt',[.25 0],[0 0])
hz =
2 3 4
.0939809 + .3759234z + .5638851z + .3759234z + .0939809z
-------------------------------------------------------------
2 3 4
.0176648 + 1.549E-17z + .4860288z + 3.469E-17z + z
-->plzr(hz)
20 JJ ª目 錄 II
基礎工具說明 訊號處理工具之開發
這有一個用 iir函數產生的四階低通 IIR 濾波器 (見 ??)產生的極零點圖由圖 1.7描繪。
ZerosΟ
Poles×
ZerosΟ
Poles×
transmission zeros and poles
real axis
imag. axis
−2.0 −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 2.0−1.5
−1.0
−0.5
0.0
0.5
1.0
1.5
圖 1.7: exec('plot4.code') Plot of Poles and Zeros of IIR Filter
1.10 訊號處理工具之開發
當然每個人都可以像之前的說明部份一樣寫他自有的函數,最簡單的方式是用特殊的格式寫一
個檔案,這個檔案用 Scilab的 getf與 exec來執行。這樣功能的完整描述在參考手冊與線上輔
助中有給,這些功能跟 File Operations鍵一致。
21 JJ ª目 錄 II
文 獻
[1] M. Abramowitz, I.A. Stegun, eds.,Handbook of Mathematical Functions, National Bureau of Stan-
dards Applied Mathematics Series, no. 55, Superintendent of Documents, U.S. Goverment Printing
Office, Washington, D.C., 1964.
[2] B.D.O. Anderson and J.B. Moore,Optimal Filtering, Englewood Cliffs, NJ: Prenctice Hall, 1979.
[3] Gerald J. Bierman,Factorization Methods for Discrete Sequential Estimation, Academic Press,
New York, 1977.
[4] B.C. Carlson,Special Functions of Applied Mathematics, Academic Press, New York, 1977.
[5] E.W. Cheney,Introduction to Approximation Theory, McGraw-Hill, 1966.
[6] T.A.C.M. Claasen and W.F.G. Mecklenbrauker, “The Wigner distribution: a tool for time frequency
signal analysis”,Phillips J. Res., vol. 35, pp. 217-250, 276-300, 372-389, 1980.
[7] F. Delebecque, C. Klimann and S. Steer,Basile, guide d’utilisation, Internal Report INRIA, 1987.
[8] J. Dieudonné,Calcul Infinitésimal, Hermann, Paris, 1980.
[9] P. Faurre,Réalisations markoviennes de processus stationnaires, Thèse d’état, Rapport Laboria n0
13, 1973.
[10] A. Gelb, ed.,Applied Optimal Estimation, MIT Press, 1974.
[11] Francis B. Hildebrand,Methods of Applied Mathematics, Prentice Hall, Englewood Cliffs, N.J.,
1965.
[12] B.L. Ho and R.E. Kalman, “Effective construction of linear state variable models from Input/Output
data”,Proc. 3rd Allerton Conference, 1963.
[13] R. Hooke, T.A. Jeeves, “Direct Search solution of numerical and statistical problems”, Journ. As-
soc. Comput. Mach., Vol 8 No 2, pp 212-229, April 1961.
[14] T. Kailath,Lectures on Wiener and Kalman Filtering, Springer-Verlag, New York, 1981.
[15] T. Kailath,Linear Systems, Prentice Hall, 1980.
22
文 獻
[16] Steven M. Kay and Stanley L. Marple, “Spectrum Analysis - A Modern Perspective”,Proc. IEEE,
vol. 69, no. 11, pp. 1380-1419, Nov. 1981.
[17] S. Kung, “A new identification and model reduction algorithm via singular value decompositions”,
Proc. 12th Asilomar Conf. Circuits, Syst. Comput., Pacific Grove, CA, pp 705-714, Nov 1978.
[18] W. Martin and P. Flandrin, “Wigner-Ville spectral analysis of nonstationary processes”,IEEE Trans.
Acoust., Speech, Signal Processing, Vol. ASSP-33, N0 6, Dec. 1985.
[19] C. Moler,MATLAB User’s Guide, Tech. Rep. CS81-1, Dept. of Computer Sci., Univ. New Mexico,
August, 1982.
[20] R. Nikoukhah,A Deterministic and Stochastic Theory of Two-Point Boundary-Value Descriptor
Systems, Ph.D. dissertation, Dept. of Elec. Eng. and Comp. Science, M.I.T., 1988.
[21] A.V. Oppenheim and R.W. Schafer,Digital Signal Processing, Prentice Hall, 1975.
[22] M. Prevosto, A. Benveniste, B. Barnouin, “La méthode des variables instrumentales en treillis;
application à la modélisation des structures en vibration”, Outils et modèles mathématiques pour
l’Automatique, l’Analyse des systèmes et le Traitement du Signal, Vol 2, pp 639-667, Ed. CNRS,
1982.
[23] Programs for Digital Signal Processing, IEEE Press John Wiley and Sons, 1979.
[24] L. Rabiner and B. Gold,Theory and Application of Digital Signal Processing, Prentice Hall, 1975.
[25] L.R. Rabiner, R.W. Schafer, and C.M. Rader, “The Chirp Z-Transform Algorithm and its Applica-
tions”, Bell Sys. Tech. J., vol 48, pp. 1249-1292, May 1969.
[26] J. Rissanen, “Recursive identification of linear systems”,SIAM Journal of Control, Vol 9, 1971.
[27] G. Ruckebusch,Représentations markoviennes de processus gaussiens stationnaires, Thèse 3ème
cyle math. stat., Paris VI, 1975.
[28] K. Steiglitz, “Designing Short-Word recursive digital filters”, Proc. 9th Allerton Conf. on Circuit
and Systems Theory, pp 778-788, Oct. 1971.
[29] G.W. Stewart,Introduction to Matrix Computations, Academic Press, New York, 1973.
[30] C.F. Van Loan, “Computing integrals involving matrix exponentials”,IEEE Trans. Autom. Control,
vol AC-23, pp. 395-404, 1978.
23 JJ ª目 錄 II
圖目錄
1.1 Block Diagrams of System Interconnections. . . . . . . . . . . . . . . . . . . . . . . . 13
1.2 exec('flts1.code') Sum of Two Sinusoids. . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3 exec('flts2.code') Filtered Signal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.4 exec('plot1.code') Plot of Filter Impulse Response. . . . . . . . . . . . . . . . . . . . 18
1.5 exec('plot2.code') Plot of Continuous Filter Magnitude Response. . . . . . . . . . . . 19
1.6 exec('plot3.code') Plot of Discrete Filter Magnitude Response. . . . . . . . . . . . . . 20
1.7 exec('plot4.code') Plot of Poles and Zeros of IIR Filter. . . . . . . . . . . . . . . . . . 21
24