梁清,王世闖,王曉林
?
基于FxKalman算法的有源控制器設(shè)計與實現(xiàn)研究
梁清,王世闖,王曉林
(杭州應(yīng)用聲學(xué)研究所,浙江杭州 310023)
近年來,對于有源噪聲控制算法的性能越來越重視。與基于維納濾波原理的最小均方濾波(Filtered-x Least Mean Square,F(xiàn)xLMS)、最小二乘濾波(Filtered-x Recursive Least Square,F(xiàn)xRLS)算法相比較,基于卡爾曼濾波的有源控制算法(Filtered-x Kalman,F(xiàn)xKalman)具有較快的收斂速度和良好的跟蹤性能,且對帶寬噪聲有較好的降噪性能。設(shè)計、仿真運行了FxKalman算法的有源控制器,并針對單頻、窄帶和寬帶信號,在實驗室封閉空間對FxKalman算法、FxLMS算法和FxRLS算法進行有源控制器驗證性實驗比較,證實了FxKalman有源控制器具有上述優(yōu)點。而如果初級噪聲為單頻信號且對算法收斂速度要求不高,F(xiàn)xLMS算法是最經(jīng)濟穩(wěn)妥的選擇。當(dāng)需要控制帶寬噪聲或?qū)λ惴ㄊ諗克俣纫筝^高時,F(xiàn)xKalman算法則為最好的選擇。
有源噪聲控制;卡爾曼濾波;平均降噪量;性能代價比
隨著中國經(jīng)濟和工業(yè)化進程的不斷發(fā)展,噪聲污染已經(jīng)成為一個不容忽視的環(huán)境問題。有源噪聲控制是根據(jù)聲波的相消性干涉原理,初級聲源發(fā)出期望信號,次級聲源通過生成一個與初級源幅度相等、相位相反的輻射聲波,對期望信號進行抵消,從而達到降低噪聲的目的,其消聲原理如圖1所示。1981年,J. C. Burgress[1]首次將自適應(yīng)濾波理論應(yīng)用于有源噪聲控制系統(tǒng),提出了著名的最小均方濾波(Filtered-x Least Mean Square,F(xiàn)xLMS)算法。Kuo和Morgan[2]在其專著中介紹了基于RLS的最小二乘濾波(Filtered-x Recursive Least Square,F(xiàn)xRLS)算法。從80年代起研究所、清華大學(xué)、哈爾濱工業(yè)大學(xué)、西北工業(yè)大學(xué)及南京大學(xué)也開展了有源噪聲控制的研究[3-4],但還沒有利用卡爾曼濾波算法進行有源控制的實例。由于卡爾曼濾波算法中存在大量矩陣相乘以及求逆的過程,因此該算法的運算量較高。本文主要研究利用卡爾曼濾波算法實現(xiàn)封閉空間有源噪聲控制器的設(shè)計,并通過相關(guān)實驗將該算法與FxLMS算法、FxRLS算法進行比較,完成了基于卡爾曼濾波(Filtered-x Kalman,F(xiàn)xKalman)算法的有源控制器設(shè)計與實現(xiàn)研究。
圖1 有源噪聲控制中聲波抵消示意圖
在控制領(lǐng)域,科學(xué)家早已經(jīng)發(fā)現(xiàn)了一種隨著系統(tǒng)狀態(tài)變化而對步長進行相應(yīng)調(diào)節(jié)的算法——卡爾曼濾波算法[5-6],該算法的核心內(nèi)容是進行系統(tǒng)的狀態(tài)估計。在最小均方誤差準(zhǔn)則以及最小干擾原理的共同作用下,卡爾曼濾波算法約束并優(yōu)化問題。也就是說,自適應(yīng)卡爾曼濾波器權(quán)系數(shù)的迭代是按照最小方式進行變動的。雖然最小均方算法LMS (Least Mean Square,LMS)和最小二乘RLS (Recursive Least Squares,RLS)算法是基于維納濾波原理的,但它們?nèi)耘c卡爾曼濾波算法存在著不小的關(guān)聯(lián):利用最小二乘法求目標(biāo)函數(shù)的最小范數(shù)值是LMS算法的核心思想,以這一思想為基礎(chǔ)也建立了LMS算法和RLS算法之間重要的數(shù)學(xué)聯(lián)系;此外RLS算法可以看作卡爾曼濾波算法的特例。
卡爾曼濾波器是由其發(fā)明者匈牙利數(shù)學(xué)家卡爾曼提出的。該算法是建立在線性最小方差估計原理上,與之前所研究的基于維納濾波器的FxLMS算法和FxRLS算法有所不同,卡爾曼濾波算法引入了系統(tǒng)的狀態(tài)空間模型以及狀態(tài)變量等概念,因此有著更為廣闊的應(yīng)用環(huán)境,特別是在非平穩(wěn)環(huán)境下,卡爾曼濾波算法的性能要遠優(yōu)于基于維納濾波的算法。狀態(tài)空間可以理解為兩方面:其一是指狀態(tài)空間矩陣與輸入的關(guān)系,其二是狀態(tài)矩陣對輸出結(jié)果所產(chǎn)生的影響。其算法思想是在得到系統(tǒng)的輸入以及輸出所需的相關(guān)估計值之后,對參數(shù)進行反復(fù)的估計與修正,從而獲得最優(yōu)的結(jié)果。其特點是[6]:可進行算法遞推、能夠適用于非平穩(wěn)過程,適用于連續(xù)型算法和離散型算法。
基本的卡爾曼濾波算法已很成熟。這里給出卡爾曼濾波的時間更新方程以及狀態(tài)更新方程。
(1) 時間更新方程如下:
(2) 狀態(tài)更新方程如下:
下面將基本的卡爾曼濾波算法應(yīng)用于有源噪聲控制系統(tǒng)中,推導(dǎo)出FxKalman。
圖2 有源控制系統(tǒng)框圖
圖3 有源控制系統(tǒng)等價框圖
通過上述推導(dǎo)得到了在有源噪聲控制系統(tǒng)中的卡爾曼濾波狀態(tài)方程。表1總結(jié)了FxKalman算法的流程。
表1 FxKalman算法流程
通過編寫基于Simulink的自適應(yīng)有源噪聲算法程序和次級通路離線建模程序,通過使用實時系統(tǒng)完成了自適應(yīng)控制器的實現(xiàn),并在封閉空間內(nèi)完成了實驗,將FxLMS、FxRLS與FxKalman算法進行對比。
實驗系統(tǒng)利用個人計算機作為上位機,利用Matlab中的Simulink工具箱搭建了三種算法模塊,并利用Xpc Target將搭建好的模塊編譯成C語言,將代碼傳遞給下位機。下位機有多通道的AD和DA端口,通過AD端口采集誤差傳感器所得的電壓信號輸入到自適應(yīng)算法模塊中。自適應(yīng)算法模塊根據(jù)誤差信號和參考信號,利用算法自動調(diào)整濾波器權(quán)系數(shù),通過DA端口傳遞給次級聲源使其工作。詳見3.3節(jié)中自適應(yīng)控制器的實現(xiàn)原理。
具體儀器名稱以及其用途如表2所示。
表2 實驗儀器及功能
如上文所述,為了實現(xiàn)自適應(yīng)控制器,第一步要在Simulink中搭建三種算法模塊并進行仿真以驗證搭建模塊的正確性,通過查找相關(guān)資料可以發(fā)現(xiàn),Simulink自帶的工具箱中只包含了最為基礎(chǔ)的LMS、RLS等自適應(yīng)模塊,并沒有FxLMS、FxRLS和FxKalman算法模塊,而Simulink自身提供的算法模塊與在輸入輸出參數(shù)以及濾波器權(quán)系數(shù)的迭代方法和本文所研究的三種算法有較大的差異,導(dǎo)致在仿真和實際應(yīng)用時不能使用已有模塊來實現(xiàn)。因此,本文嘗試采用S函數(shù)構(gòu)建三種算法模塊。
S函數(shù)按照所支持功能分類包括Level 1和Level 2。如,編寫簡單數(shù)學(xué)算法用來仿真時,只需要M語言編寫的Level 1 M S函數(shù);所編寫的算法需要傳遞多個輸入輸出端口且每個端口數(shù)據(jù)都是多維(矩陣)時,需要使用Level 2 M S函數(shù)。綜上所述,對有源控制算法模塊有以下幾點考慮:
(1) 有源控制算法為典型的多輸入多輸出算法,因此選擇Level-2 S函數(shù)。
(2) Level-2 S函數(shù)局域Dwork向量,可以將Dwork向量理解為Simulink中的緩存區(qū),可以對初始向量賦初值設(shè)定維度。在算法執(zhí)行循環(huán)調(diào)用時,可以利用這一向量存儲算法中的輸入輸出向量以及矩陣元素等,該緩存區(qū)的優(yōu)點為能避免數(shù)據(jù)在循環(huán)調(diào)用時被覆蓋。
(3) 在編寫完相應(yīng)的算法模塊后,需要編寫該算法的目標(biāo)語言編譯器(Target Language Compiler,TLC)文檔,TLC文檔也可稱為目標(biāo)語言編譯文檔,利用該文檔可以將搭建的模塊編譯生成目標(biāo)C代碼,在接下來的工作中將目標(biāo)代碼下載到micro-box以供后續(xù)使用。
Level-2 S函數(shù)使得使用用戶能夠用Matlab語言來編寫支持多輸入/多輸出端口的自定義模塊,且其提供了一系列應(yīng)用程序編程接口(Application Programming Interface,API)設(shè)置模塊屬性和定義各個子方法,其中Setup和Outputs兩個子方法是必不可少的,通過對有源算法的分析,在建立三種模塊時用到了以下幾種API:
(1) Setup函數(shù)體
實現(xiàn)對模塊的初始化,構(gòu)建三種算法模塊過程中,Setup 函數(shù)主要功能如下:
① 對模塊的輸入?yún)?shù)個數(shù)以及輸出參數(shù)個數(shù)進行了規(guī)定:本文中有3個輸入,分別為參考信號、濾波信號和誤差信號,2個輸出信號:控制信號和自適應(yīng)濾波器權(quán)系數(shù);
② 對輸入?yún)?shù)的維度、數(shù)據(jù)類型、復(fù)雜性以及數(shù)據(jù)的采樣頻率進行設(shè)定,本模塊中維度為1,數(shù)據(jù)類型為double類型,復(fù)雜度為實數(shù),采樣頻率默認為繼承方式;
③ 對模塊中的參數(shù)進行設(shè)置,在本文所使用的三個模塊中分別設(shè)置了3個不同的參數(shù),它們?yōu)椴介L、遺忘因子和干擾信號波動。
(2) CheckPrms函數(shù)體
該模塊是用來檢驗所輸入的參數(shù)是否合法,因為參數(shù)都有一定的取值范圍,當(dāng)參數(shù)超出給定的取值范圍時,系統(tǒng)就會報錯。
(3) DoPostPropSetup函數(shù)體
① 對于FxLMS算法建立3個Dwork向量,分別為“”變量(參考信號)、“”變量(濾波信號)、“”(自適應(yīng)濾波器系數(shù)),設(shè)置變量的初始屬性,用于數(shù)據(jù)更新。
② 對于FxRLS和Kalman濾波算法建立4個Dwork向量,分別為“”變量(參考信號迭代)、“”變量(濾波信號迭代)、“”(權(quán)值迭代)、“”(協(xié)方差矩陣迭代),設(shè)置變量的初始屬性,用于數(shù)據(jù)更新。
(4) Start函數(shù)體
將Dwork內(nèi)的多個初始向量賦值為0,將協(xié)方差矩陣賦值為單位矩陣。
(5) Outputs函數(shù)體
根據(jù)三種算法的原理設(shè)計相應(yīng)的程序,算法框圖如圖4所示,通過計算得到控制信號和相應(yīng)的自適應(yīng)濾波器權(quán)系數(shù),并將相應(yīng)結(jié)果傳遞至輸出端口。
為了驗證所編寫模塊的正確性,現(xiàn)將這三個模塊應(yīng)用在有源噪聲控制算例中進行仿真。初級信號是頻率為100 Hz、幅值為1的單頻噪聲,初級通路和次級通路均使用FIR濾波器進行模擬,自適應(yīng)濾波器的階數(shù)為32,可以通過點擊模塊設(shè)置模塊的參數(shù),例如FxLMS算法中的步長、FxRLS算法中的遺忘因子等。
初級通路的傳遞函數(shù)為[7]
次級通路的傳遞函數(shù)為
圖5為利用FxLMS算法模塊搭建的仿真模型,相應(yīng)的FxRLS和FxKalman算法的仿真模型也與之相似,只需將其中的FxLMS模塊換成相應(yīng)的FxRLS模塊和FxKalman模塊即可。
圖5 利用Simulink搭建的算法模型
圖6(a)~6(c)是三種編寫模塊的仿真結(jié)果,通過圖6可知,對于單頻信號三種算法的降噪性能相似,而在收斂速度方面,F(xiàn)xKalman算法略優(yōu)于FxLMS算法和FxRLS算法。后面又對窄帶及寬帶噪聲的性能進行觀察,驗證三種算法模塊的正確性,為后面自適應(yīng)控制器的實現(xiàn)奠定了基礎(chǔ)。
(a)FxLMS算法
(b)FxRLS算法
(c)FxKalman算法
將這三種算法模塊及Micro-box實時操作系統(tǒng),完成自適應(yīng)控制器的設(shè)計與實現(xiàn)??刂破鲗崿F(xiàn)的原理如圖7所示。
圖7 自適應(yīng)控制器的實現(xiàn)原理
實驗系統(tǒng)如圖8所示,由1個初級聲源、1個次級聲源和1個誤差傳感器構(gòu)成。將三者布放于同一水平高度,初級聲源距離誤差傳感器距離為2 m,次級聲源距離誤差傳感器為1 m,初級聲源距離次級聲源為1 m,自適應(yīng)濾波器長度為32,次級通路(次級聲源到誤差傳感器之間的通路)長度為200。實驗分別對100 Hz單頻噪聲,中心頻率為200 Hz、帶寬為50 Hz的窄帶噪聲以及中心頻率為350 Hz、帶寬為500 Hz的寬帶噪聲進行研究,檢驗算法的實際性能是否和仿真結(jié)果相一致。
圖8 封閉空間內(nèi)的實驗系統(tǒng)
圖9為對單頻信號進行有源噪聲控制過程中下位機采集到的實時數(shù)據(jù),通過觀察可以看出,圖片由四幅子圖構(gòu)成。左上為控制器所得參考輸入信號,左下為濾波-信號,右上為誤差傳感器采集的誤差信號,右下為次級聲源的驅(qū)動信號即控制器輸出的次級信號。由于下位機中無法對數(shù)據(jù)進行定量的分析,將下位機采集到的數(shù)據(jù)傳遞給上位機并在Matlab中完成數(shù)據(jù)分析。
圖9 下位機實驗中采得的實時數(shù)據(jù)
(1) 單頻信號
同仿真結(jié)果類似,由圖10(a)~10(c)可以看出,對于單頻信號,在收斂速度方面FxKalman算法有著最好的性能,而FxRLS算法和FxLMS算法的收斂速度大致相同。對于單頻信號的降噪性能,由圖11(圖中①表示FxLMS算法,②表示FxKalman算法,③表示FxRLS算法)可以看出,三種算法性能接近,平均降噪量都在17 dB左右。
(2) 窄帶信號
對于窄帶信號,由圖12(a)~12(c)可以看出,F(xiàn)xKalman算法需要800次迭代可達到收斂,F(xiàn)xRLS算法需要2 000次迭代才可收斂,而FxLMS算法則需要3 500次迭代。由圖13(圖中①表示FxLMS算法,②表示FxKalman算法,③表示FxRLS算法)可以看出,在降噪量方面,F(xiàn)xKalman算法有著較為明顯的優(yōu)勢,平均降噪量可以達到14.1 dB,F(xiàn)xRLS算法的平均降噪量為11.4 dB,而FxLMS算法的降噪量只有11.2 dB。
(a) FxLMS算法
(b) FxRLS算法
(c) FxKalman算法
圖11 三種算法降噪量比較(單頻信號)
(3) 寬帶信號
對于寬帶信號來說,由圖14(a)~14(c)可以看出,F(xiàn)xKalman算法需要500次迭代可達到收斂,F(xiàn)xRLS算法需要1 500次迭代即可收斂,而FxLMS 算法則需要3 000次迭代。由圖15(圖中①表示FxLMS,②表示FxKalman算法,③表示FxRLS算法)可以看出,在降噪量方面,F(xiàn)xKalman算法有著較為明顯的優(yōu)勢,平均降噪量可以達到15.3 dB,F(xiàn)xRLS算法的平均降噪量為12.4 dB,而FxLMS算法的降噪量只有10.7 dB。
(a) FxLMS算法
(b) FxRLS算法
(c) FxKalman算法
圖13 三種算法降噪量比較(窄帶信號)
(a)FxLMS算法
(b)FxRLS算法
(c) FxKalman算法
圖15 三種算法降噪量比較(寬帶信號)
通過實驗可得到以下幾個結(jié)論:
(1) FxKalman算法具有較快的收斂速度
和仿真所得結(jié)果類似,無論控制信號是單頻信號,還是窄帶噪聲或?qū)拵г肼?,F(xiàn)xKalman算法相較于FxLMS算法和FxRLS算法,在收斂速度方面都有較為明顯的提升。
(2) FxKalman算法降噪性能突出
對于單頻信號來說,三種算法的降噪性能相似。但是因為FxLMS算法對于帶寬噪聲性能并不突出,所以對于窄帶和寬帶噪聲來說,F(xiàn)xLMS算法的降噪量都要低于FxRLS算法和FxKalman算法。FxRLS算法雖然降噪性能相較于FxLMS有所提升,但還是略遜于FxKalman算法,具體的比較如表3所示。
表3 三個算法的平均降噪量(次級通路長度為200)
定義算法的性能代價比為穩(wěn)態(tài)誤差或平均誤差與運算量的比值,表4中加粗的數(shù)字表示該類型噪聲的最大性能代價比。由表4可以看出,在三種情況下,F(xiàn)xLMS算法的性能代價比仍然最高,這也是FxLMS算法在收斂速度較慢的情況下,仍是現(xiàn)在較為主流的自適應(yīng)算法的原因。FxRLS算法和卡爾曼濾波算法兩者的性能代價比很接近,而FxKalman算法在三種情況下平均降噪量都接近或者優(yōu)于FxRLS算法。所以在硬件條件滿足的前提下,F(xiàn)xKalman算法擁有較快的收斂速度、并且降噪性能最為優(yōu)秀,是最為合適的選擇。
表4 三個算法的性能代價比(次級通路長度為200)
注:加粗的數(shù)字表示該類型噪聲的最大性能代價比。
本文利用搭建的算法模塊和Micro-box實時仿真系統(tǒng),完成了一種新的自適應(yīng)有源控制器FxKalman的設(shè)計和實現(xiàn)。并在實驗室環(huán)境下進了實驗研究,驗證了FxKalman算法的降噪性能和收斂速度都要優(yōu)于FxLMS算法和FxRLS算法,在寬帶噪聲情況下其降噪性能約提高了3~5 dB。在實際應(yīng)用中,如果初級噪聲為單頻信號且對算法收斂速度要求不高,運算量不是很大,F(xiàn)xLMS算法是最經(jīng)濟穩(wěn)妥的選擇。當(dāng)需要控制帶寬噪聲或?qū)λ惴ㄊ諗克俣纫筝^高時,F(xiàn)xKalman算法則為更好的選擇。由于硬件條件的限制、本文中只實現(xiàn)了單通道的有源噪聲控制,如果硬件條件許可,后續(xù)工作可以考慮進行多通道的有源噪聲控制。
[1] Burgess J C. Active adaptive sound control in a duct, a computer simulation[J]. J. Acoust. Soc. Am., 1981, 70(3): 715-726.
[2] Kuo S M, Morgan D R. Active noise control: A tutorial review[J]. Proceedings of the IEEE, 1999, 87(6): 943-973.
[3] 盛美萍, 王敏慶, 孫進才. 噪聲與振動控制技術(shù)基礎(chǔ)[M]. 北京: 科學(xué)出版社, 2001. SHENG Meiping, WANG Minqing, SUN Jincai. Noise and vibration control technology[M]. Beijing: Science Press, 2001.
[4] 宮赤坤, 張從敏. 基于卡爾曼濾波的有源噪聲自適應(yīng)逆控制[J]. 噪聲與振動控制, 2008, 28(3): 96-99. GONG Chikun, ZHANG Congmin. Active noise based on kalman filter adaptive inverse control[J]. Journal of Noise and Vibration Control, 2008, 28(3): 96-99.
[5] Elliott S J. Signal processing for active control[M]. London: Academic Press, 2001.
[6] BAMBANG R T. EKF learning in recurrent neural networks for nonlinear active noise control[J]. Applied Soft Computing, 2008, 8(4): 1498-1504.
[7] PETERSEN C D, FRAANJE R, CAZZOLATO B S, et al. A Kalman filter approach to virtual sensing for active noise control[J]. Mechanical Systems and Signal Processing, 2008, 22(2): 490-508.
[8] 程佩青. 數(shù)字信號處理教程[M]. 北京: 清華大學(xué)出版社, 2001. CHENG Peiqing. Digital signal processing course[M]. Beijing: Tsinghua University Press, 2001.
Design and implementation of FxKalmanbased active noise controller
LIANG Qing, WANG Shi-chuang, WANG Xiao-lin
(Hangzhou Applied Acoustics Research Institute, Hangzhou 310012,Zhejiang,China)
In recent years, the researchers pay more attentions on the performance of active noise control (ANC) algorithms. Compared with the FxLMS and FxRLS algorithms, the Kalman filtering algorithm enjoys a faster convergence speed, a better tracking performance and a better noise reduction capability for broadband noise. In this paper, the FxKalman active controller is designed and simulated, and for single-frequency, narrowband and broadband signals, the active noise control performances of FxKalman algorithm, FxLMS algorithm and FxRLS algorithm are compared in the enclosed-space of the laboratory. Finally, the above-mentioned advantages of FxKalman active controller are proved. However, in the case that the primary noise is a single-frequency signal and the demand for convergence rate of the algorithm is not high, the FxLMS algorithm is the most economical and secure.The FxKalman algorithm is the best choice for broadband noise control or for high convergence speed demand.
active noise control; Kalman filtering;average noise reduction value; performance cost ratio
TB535
A
1000-3630(2017)-05-0491-08
10.16300/j.cnki.1000-3630.2017.05.016
2016-11-29;
2017-02-22
梁清(1991-), 女, 浙江諸暨人, 碩士研究生, 研究方向為噪聲控制, 信號檢測。
梁清, E-mail: snowy91@163.com