帕克斯-麥克萊倫算法(英語:Parks–McClellan algorithm),為一個用以設計最佳化有限脈衝回響濾波器(finite impulse response filter)的疊代算法,由James McClellan and Thomas Parks於1972年的著作中提出。
此算法的主要精神,在於利用疊代的方式最小化濾波器在通帶(pass band)和止帶(stop band)的最大誤差,因此有時也稱為最小化最大誤差算法(Mini-max filter design)。由於帕克斯-麥克萊倫算法也屬於Remez-exchange algorithm為了設計有限脈衝回響濾波器而產生的一種變形,因此也有人以Remez-exchange algorithm代稱。
基本介紹
- 中文名:帕克斯-麥克萊倫算法
- 外文名:Parks–McClellan algorithm
有限脈衝回響濾波器設計,帕克斯-麥克萊倫算法,
有限脈衝回響濾波器設計
有限脈衝回響濾波器(finite impulse response filter)利用有限的點數來表示濾波器的脈衝回響,對於N點有限脈衝回響濾波器
![](/img/9/d96/57453c7b14975b3972549442a62c.jpg)
有限脈衝回響濾波器的優點在於脈衝回響是有限的,使得設計上較為簡單。然而如何在有限的點數下,設計出效果最近似於理想目標的濾波器,則是帕克斯-麥克萊倫算法所欲解決的問題。
對於濾波器設計,帕克斯-麥克萊倫算法的精神在於最小化最大誤差。在忽略通帶與止帶之間轉換帶(transition band)的情況下,最小化通帶與止帶的最大誤差:![](/img/b/d1d/6cbce1126d2099697b3c3fc1694e.jpg)
![](/img/b/d1d/6cbce1126d2099697b3c3fc1694e.jpg)
其中
為設計濾波器的頻率回響,F為正規化頻率(normalized frequency),
則為理想目標濾波器的頻率回響。
![](/img/8/d27/c64f50a940e2751882ea9ea2d552.jpg)
![](/img/8/613/339f683e6738290f01db03eeb084.jpg)
濾波器設計時,可利用weighting function將較重要的頻帶比重放大。如此一來,在利用帕克斯-麥克萊倫算法設計濾波器時,則會較重視比重較大頻帶的誤差。
若在加入weighting function情況下,可將帕克斯-麥克萊倫算法一般化。此時的最大誤差則可表示為:![](/img/0/2d2/04c7ff503fda7431702042461de8.jpg)
![](/img/0/2d2/04c7ff503fda7431702042461de8.jpg)
帕克斯-麥克萊倫算法
下面的文章將說明如何以該算法設計最佳化濾波器,假設
濾波器長度為N,且N為奇數可表示成![](/img/c/181/6e3ca47fe5ad1d2a07fd84641fba.jpg)
![](/img/c/181/6e3ca47fe5ad1d2a07fd84641fba.jpg)
目標濾波器的頻率回響為
偶函式
![](/img/3/b95/93d8c2b1a5eb853c33b810395479.jpg)
W(F)用以表示所指定的weighting function
此算法共分為6個步驟:
1、設定極值點起始值
在範圍的範圍內,任意選擇
點頻率
作為極值點(extreme frequency)的起始值。
![](/img/1/5f9/3334b1c4be25662678785f2321da.jpg)
![](/img/6/1ea/e863229225369cc4bb1d08e461a8.jpg)
將此時的最大誤差
設為
,但所選擇的
點起始值不能落在轉換頻帶(transition band),也不能將所有的起始直設在止帶(stop band)上。
![](/img/d/441/71e0581119dbd5ee2b4e0a94bc8e.jpg)
![](/img/a/099/c84dff87d81d9859b15fd54d0875.jpg)
![](/img/3/d2c/6b89bb69726494a9bf106d065279.jpg)
極端頻率為最後完成設計的濾波器頻率回響中,會出現最大誤差的頻率。一開始所給定的起始值是隨機的,會在此算法之後的步驟中逐漸收斂。
此時,令在各點極端頻率的誤差為![](/img/d/2fa/9257c3fe010aeb1a09396b2f8ba1.jpg)
![](/img/d/2fa/9257c3fe010aeb1a09396b2f8ba1.jpg)
2、計算目前的頻率回響
為了方便算法運算之後的進行,我們可稍微整理誤差的表示方式。若令
![](/img/6/8d9/4baf39b7a0f78bdae8b08961b7f8.jpg)
![](/img/6/da7/edbe8aecb247943620cc06d49343.jpg)
如此一來,可將在第1步驟中所得到的誤差式表示為:
![](/img/d/113/790feb4ebe6a87813f08f9c27c66.jpg)
其中,
經過整理之後可得
![](/img/a/e4c/885df66112cf5599f971ee4c36cd.jpg)
![](/img/c/30d/b2637d80a39beb03e22a775ab4fa.jpg)
上述的誤差關係式,可表示為矩陣形式{\displaystyle Ax=H}
![](/img/b/eca/8793e54a04e2218b2633a29f3dd9.jpg)
因此,我們可由
計算![](/img/0/9aa/6dee6124ad67e294a62f41ad89fb.jpg)
![](/img/9/27e/8988b4b5b8acfac29ae0e402dfee.jpg)
![](/img/0/9aa/6dee6124ad67e294a62f41ad89fb.jpg)
3、計算誤差函式
計算誤差函式![](/img/8/c13/9d1b7f2bf6a9b30c056106ed0768.jpg)
![](/img/8/c13/9d1b7f2bf6a9b30c056106ed0768.jpg)
![](/img/4/f74/9cf906196fe5ff5b3edb3adc6bb6.jpg)
4、尋找極值點
從
中,找k+2個區域極大或極小值,將區域極大或極小值出現的頻率標示為![](/img/3/881/7f8f691e4101657d6e1b2002e17d.jpg)
![](/img/7/c94/a1d0676a074ee67bc96e10c64f7d.jpg)
![](/img/3/881/7f8f691e4101657d6e1b2002e17d.jpg)
區域極大或極小值的判斷規則:
若找到多於
個極值點,選擇極值點的優先順位為:
![](/img/2/f7e/b7ae4a7f40c4034507f9c078362b.jpg)
不是在邊界處的區域高峰(peaks)或低谷(dips)。在此,邊界區域即為
以及頻率轉換帶的兩邊。
![](/img/1/2bb/53dbb1b04d4232b11d2af4262bbf.jpg)
對於在邊界區域的頻率點,可用下列的標準判斷是否為區域極大或極小:
及
為同相時,右邊界是極值點;反相時,左邊界是極值點;其他情況非極值點。
![](/img/c/2c1/1ee15d313436ff56f000f88d4604.jpg)
![](/img/4/236/bb6fcf2309c4da54044734e1ae48.jpg)
優先選擇不在邊界的極值點。
其次選在邊界的極值點中,
較大的,直到湊足
個極值點為止。
![](/img/1/ac0/75af49045d826811ab84ac83890d.jpg)
![](/img/2/f7e/b7ae4a7f40c4034507f9c078362b.jpg)
當邊界的極值點的
一樣大時,優先選擇轉換頻帶兩旁的點。
![](/img/8/7ee/6e9cdb00dcfdd24e77c74e225c77.jpg)