鄧文舫,郭來(lái)功
(安徽理工大學(xué) 電氣與信息工程學(xué)院,安徽 淮南 232001)
在采集的各種監(jiān)測(cè)信號(hào)時(shí),傳感器在進(jìn)行信號(hào)提取以及信號(hào)的傳輸過程中,往往會(huì)受到一些信號(hào)干擾或者傳輸設(shè)備自身固有的干擾,從而影響信號(hào)傳輸?shù)馁|(zhì)量。窄帶強(qiáng)干擾是最常見的干擾信號(hào)之一,由于我國(guó)交流電的頻率為50Hz,因此在信號(hào)采集過程中,容易受到這種工頻信號(hào)的干擾[1]。一般當(dāng)干擾帶寬小于傳輸信號(hào)的1%,且強(qiáng)度大足夠時(shí),極可能會(huì)使有用信號(hào)完全失真。為抑制信號(hào)受到的窄帶干擾,同時(shí)為追求實(shí)際應(yīng)用價(jià)值,國(guó)內(nèi)外許多學(xué)者都相繼提出了大量針對(duì)窄帶強(qiáng)干擾信號(hào)的濾除算法。包括采用模擬濾波器搭建相應(yīng)的濾波電路來(lái)實(shí)現(xiàn)信號(hào)的降噪,以及根據(jù)實(shí)際信號(hào)的幅度大小進(jìn)行自適應(yīng)噪聲濾波。但這些算法由于存在計(jì)算量大,收斂速度慢等原因,不利于硬件的實(shí)現(xiàn)。在FPGA硬件實(shí)現(xiàn)的數(shù)字濾波器能很好解決并行性和速度問題,且由于FPGA的可編程特性,可以節(jié)省資源實(shí)現(xiàn)其他功能[2],即可實(shí)現(xiàn)更快地運(yùn)行速度和更強(qiáng)地可擴(kuò)展性[3-5]。
設(shè)計(jì)了以LMS算法作為自適應(yīng)算法的自適應(yīng)頻率陷波器,可以針對(duì)已知頻率但不知幅度以及相位的干擾信號(hào)進(jìn)行濾除。并在Altera公司的Cyclone系列芯片上成功實(shí)現(xiàn)了這一算法,將本例待處理信號(hào)中疊加的兩個(gè)強(qiáng)窄帶干擾信號(hào)濾除,同時(shí)為了便于硬件實(shí)現(xiàn),還與Matlab進(jìn)行了聯(lián)合仿真,首先使用產(chǎn)生一段有用信號(hào),再將這個(gè)有用信號(hào)與多個(gè)窄帶干擾信號(hào)進(jìn)行疊加,作為待處理信號(hào)即整個(gè)陷波濾波處理系統(tǒng)的輸入信號(hào),對(duì)待處理信號(hào)使用Matlab進(jìn)行陷波算法仿真,再將這個(gè)待處理信號(hào)加載到FPGA上進(jìn)行算法的硬件實(shí)現(xiàn)。
陷波系統(tǒng)基本結(jié)構(gòu)如圖1所示,由自適應(yīng)算法和濾波器兩部分組成[6]。為考慮實(shí)際運(yùn)用需求和濾除效果,采用最小均方誤差算法(LMS)作為自適應(yīng)算法和有限脈沖相應(yīng)濾波結(jié)構(gòu)(FIR)的濾波結(jié)構(gòu)在保證有用信號(hào)不被損失的條件下,對(duì)兩個(gè)頻率的干擾信號(hào)進(jìn)行濾除。信號(hào)x(t)是有用信號(hào)s(t)疊加窄帶干擾后的待處理信號(hào),將其作為輸入信號(hào)從系統(tǒng)的期望信號(hào)端輸入。干擾信號(hào)的幅度大小是未知的,頻率是已知的。為了實(shí)現(xiàn)對(duì)干擾信號(hào)的估計(jì)和復(fù)現(xiàn),需要引入?yún)⒖夹盘?hào)r(t),并調(diào)整權(quán)值w,以合成與干擾信號(hào)相同信號(hào),即得出陷波器的估計(jì)值y(t)。信號(hào)y(t)與待處理信號(hào)的差值e(t)就是所需要得到的有用信號(hào),也是LMS算法的誤差信號(hào)。
其中,對(duì)權(quán)值w的調(diào)整過程需要采用LMS算法,陷波結(jié)構(gòu)對(duì)干擾信號(hào)的估計(jì)和原干擾信號(hào)之間差值不斷減小,并快速收斂至差值為0的程度。對(duì)于某一頻率的信號(hào)干擾,需要添加該頻率的正弦和余弦兩路信號(hào)進(jìn)行加權(quán)運(yùn)算和疊加。因此在評(píng)價(jià)這個(gè)陷波系統(tǒng)性能的重要指標(biāo)即為收斂的速度、有用信號(hào)和待處理信號(hào)之間的差值與實(shí)際誤差值的大小對(duì)比。所以在最后仿真結(jié)束時(shí),要使用Matlab計(jì)算信號(hào)處理前后的干性比大小。
圖1 自適應(yīng)陷波器結(jié)構(gòu)
自適應(yīng)陷波器作為一種濾波器,一般采用的是有限脈沖相應(yīng)(FIR)濾波器結(jié)構(gòu),其前向路徑更受青睞,它可以細(xì)分為直接型、轉(zhuǎn)置型、網(wǎng)格型和脈動(dòng)陣列型[7]。
其濾波器結(jié)構(gòu)的方程可用公式(1)表示。
(1)
公式(1)中的各項(xiàng)參數(shù)代表著濾波器的基本結(jié)構(gòu),x(n)為輸入序列,y(n)為輸出序列,a(k)為濾波器系數(shù),N是濾波器的階數(shù)。為了更方便地對(duì)公式(1)中的離散信號(hào)進(jìn)行處理,需要對(duì)公式(1)進(jìn)行Z變換,整理可得FIR濾波器的傳遞函數(shù)如公式(2)所示。
(2)
公式(2)是經(jīng)過Z變換后得到的FIR濾波器的傳遞函數(shù)關(guān)系式,H(z)表示輸入和輸出間的傳遞關(guān)系,X(z)和Y(z)分別表示輸入、輸出序列的Z變換結(jié)果,a(k)z-k為系數(shù)a(k)的Z變換結(jié)果。設(shè)計(jì)的基于FIR基本結(jié)構(gòu)的參數(shù)可調(diào)的數(shù)字濾波器,在實(shí)現(xiàn)對(duì)輸入數(shù)據(jù)的處理過程中,當(dāng)遇到數(shù)據(jù)的某一特性是未知量時(shí)可進(jìn)行跟蹤,對(duì)公式(2)中濾波器結(jié)構(gòu)的各參數(shù)進(jìn)行調(diào)節(jié),使之能夠?qū)崿F(xiàn)相應(yīng)的濾波功能,同時(shí)具有一定的自適應(yīng)特性。
最小均方誤差(LMS)算法,最早由wirdow和Hoff提出[8]。是基于最小均方誤差準(zhǔn)則,算法簡(jiǎn)單實(shí)用,已成為一種廣泛使用的自適應(yīng)濾波算法[9]。它改進(jìn)了均方誤差梯度的估值計(jì)算方法,同時(shí)取用每一時(shí)刻誤差的平方e2(n)來(lái)進(jìn)行估計(jì)。LMS算法通過計(jì)算參考信號(hào)與輸出信號(hào)的差值來(lái)自動(dòng)選定自適應(yīng)改進(jìn)濾波器的權(quán)值系數(shù),使下一次迭代輸出的結(jié)果更加精確[10]。
LMS算法可以用一組遞推公式表示。
y(n)=WH(n)X(n)
(3)
e(n)=d(n)-y(n)
(4)
W(n+1)=W(n)+2μX(n)e2(n)
(5)
可以分為以下幾個(gè)步驟:首先對(duì)LMS進(jìn)行步長(zhǎng)的確定,需要滿足收斂條件,根據(jù)相應(yīng)的環(huán)境選擇適應(yīng)的步長(zhǎng)因子μ;再初始化權(quán)值ω(0)=0,進(jìn)行LMS迭代計(jì)算時(shí)還要將對(duì)這一部分進(jìn)行賦值并更新。LMS算法完全由加減法和乘法組成,這便于在FPGA上對(duì)這個(gè)算法進(jìn)行的硬件實(shí)現(xiàn)。
FPGA作為一種可編程的高效數(shù)字信號(hào)處理器件,適合在系統(tǒng)對(duì)算法的實(shí)時(shí)性以及大規(guī)模的數(shù)值處理的場(chǎng)景中使用。數(shù)據(jù)處理選用的是ALTERA公司的CycloneI VE系列芯片。
系統(tǒng)流程圖如圖2所示,其中虛線框內(nèi)為陷波算法部分。設(shè)計(jì)的FPGA程序框圖包含了三個(gè)模塊分別為陷波器頂層模塊、時(shí)序控制模塊、DDS數(shù)據(jù)產(chǎn)生成模塊,關(guān)鍵的陷波算法實(shí)現(xiàn)部分,采用了6級(jí)權(quán)值更新。輸入的信號(hào)為待處理信號(hào),對(duì)這一信號(hào)進(jìn)行AD數(shù)模轉(zhuǎn)換后將所得到的數(shù)據(jù)儲(chǔ)存到實(shí)例化后命名為ROM1的IP核中,再與加權(quán)過后的參考信號(hào)進(jìn)行差值運(yùn)算將結(jié)果輸出。
圖2 系統(tǒng)流程圖
建立工程文件并進(jìn)行Verilog語(yǔ)言的硬件編程和綜合分析后得到如圖3所示的RTL硬件原理圖。從圖3中可以看出是需要使用的各邏輯器件的種類和數(shù)量,同時(shí)完成了它們之間的邏輯連線。
圖3 RTL結(jié)構(gòu)示意圖
數(shù)據(jù)生成模塊中的模塊框圖如圖4所示,采用的AD、DA通道均為8bit,AD通道的采樣頻率設(shè)定為200Hz,而陷波器的輸入數(shù)據(jù)為16bit,因此還需對(duì)AD通道的輸入數(shù)據(jù)進(jìn)行補(bǔ)零操作將位寬擴(kuò)展到16bit。
產(chǎn)生長(zhǎng)度為4096點(diǎn)的待處理信號(hào)采集后,將信號(hào)儲(chǔ)存為mif文件加載到ROM核中,數(shù)據(jù)生成模塊實(shí)例化ROM核以產(chǎn)生待處理信號(hào),同時(shí)使用同樣的方法將50Hz和100Hz的參考信號(hào)加載到QuartusII13.1的ROM核中,然后在頂層模塊中引用該信號(hào)發(fā)生模塊,并將待處理信號(hào)加載到陷波器的輸入端。
圖4 數(shù)據(jù)生成模塊框圖
進(jìn)行FPGA的硬件實(shí)現(xiàn)過程中首先需要將輸入信號(hào)儲(chǔ)存在rom核中,并實(shí)例化rom核后的數(shù)字式頻率合成器模塊產(chǎn)生輸入信號(hào)。所以我們需要對(duì)每個(gè)過程設(shè)定相應(yīng)的周期,以產(chǎn)生不同需要的采樣頻率。產(chǎn)生不同時(shí)鐘的方式一般有兩種,一種是采用IP核對(duì)FPGA的時(shí)鐘信號(hào)進(jìn)行任意分頻和倍頻以得到所需的時(shí)鐘頻率,另一種是直接使用Verilog語(yǔ)言進(jìn)行設(shè)計(jì)來(lái)描述分頻器。這兩種方法都可以得到所需的時(shí)鐘頻率,并進(jìn)行使用,但使用IP核的方法可以有效提高FPGA的開發(fā)效率,同時(shí)減少設(shè)計(jì)以及調(diào)試的時(shí)間。
為了便于使用簡(jiǎn)化步驟通過分頻時(shí)序生成模塊產(chǎn)生的驅(qū)動(dòng)時(shí)鐘,調(diào)用了QuartusII13.1中的ALTPLL核分別產(chǎn)生頻率為2.048MHz的時(shí)鐘信號(hào)、24kHz的待處理時(shí)鐘信號(hào),以及4kHz的采樣時(shí)鐘信號(hào)。并對(duì)整個(gè)系統(tǒng)的時(shí)序進(jìn)行控制,保證其正常運(yùn)行。
頻率陷波處理的模塊框圖如圖5所示。輸入端為設(shè)置的系統(tǒng)時(shí)鐘以及復(fù)位信號(hào)和16bit的輸入數(shù)據(jù),輸出端為經(jīng)過濾波處理后得到的16bit輸出信號(hào)。由于LMS算法的六個(gè)步驟在FPGA實(shí)現(xiàn)過程中,共需要占用6個(gè)時(shí)鐘周期,所以FPGA的處理頻率24kHz為數(shù)據(jù)抽樣頻率4kHz的6倍。陷波運(yùn)算采用的算法即前文中對(duì)LMS自適應(yīng)算法,在硬件的實(shí)現(xiàn)過程中,需要使用Verilog語(yǔ)言進(jìn)行相應(yīng)的編程以實(shí)現(xiàn)這一算法,然后將這一模塊實(shí)例化放入工程的頂層文件中。
圖5 陷波器結(jié)構(gòu)框圖
為展現(xiàn)前文所述的陷波算法性能及其硬件實(shí)現(xiàn)效果,使用Matlab和FPGA進(jìn)行聯(lián)合仿真實(shí)驗(yàn),使用Matalb產(chǎn)生一段達(dá)到需求的信號(hào)作為原始有用信號(hào)用以表示監(jiān)測(cè)信號(hào),然后將這一信號(hào)與模擬的干擾信號(hào)相互疊加產(chǎn)生待處理信號(hào)。最后對(duì)待處理信號(hào)分別進(jìn)行軟件處理和硬件實(shí)現(xiàn)以及Modelsim仿真,以便于將處理的波形結(jié)果進(jìn)行對(duì)比,以此來(lái)反映處理信號(hào)濾波處理的軟件和硬件實(shí)現(xiàn)效果,并使用Matlab計(jì)算處理過后的信號(hào)干性比和信號(hào)強(qiáng)度。
首先使用Matlab軟件對(duì)該LMS算法進(jìn)行仿真。使用simulink產(chǎn)生一段持續(xù)時(shí)間為10ms的測(cè)試信號(hào),將其視作有用信號(hào)。然后對(duì)所產(chǎn)生信號(hào)以抽樣頻率為4000Hz進(jìn)行采集,共采集了一段時(shí)間內(nèi)的4096個(gè)數(shù)據(jù)點(diǎn),得到如圖6所示的信號(hào)時(shí)域波形圖。
然后將50Hz工頻干擾信號(hào)和100Hz干擾信號(hào)和它進(jìn)行混疊,并設(shè)定待處理信號(hào)的干信比為10db得到如圖7所示的信號(hào)波形,作為待處理信號(hào)添加到LMS算法的輸入端在Matlab上實(shí)現(xiàn)該算。對(duì)待處理信號(hào)進(jìn)行幅頻變換可得如圖8所示的幅頻信號(hào)波形圖。
從圖8可以看出,當(dāng)有用信號(hào)疊加窄帶干擾信號(hào)之后,在干擾信號(hào)的頻率附近疊加信號(hào)的幅度會(huì)顯著變大。如圖7中所示,當(dāng)窄帶干擾的個(gè)數(shù)和強(qiáng)度達(dá)到一定程度時(shí)可將輸入的有用信號(hào)完全覆蓋掉,幾乎無(wú)法分辨出原有用信號(hào)。由此可見,強(qiáng)窄帶干擾對(duì)監(jiān)測(cè)信號(hào)的正常采集影響極大,說(shuō)明了對(duì)這一信號(hào)進(jìn)行處理的必要性。
使用陷波算法對(duì)這一疊加的信號(hào)進(jìn)行干擾濾除處理之后即可得到如圖9所示的信號(hào)即為所得的結(jié)果。由濾除后的圖形和待處理信號(hào)的時(shí)域波形可知,在經(jīng)過LMS算法的逐步逼近過程之后,輸出信號(hào)與原有用信號(hào)的誤差開始逐步變小,最終將有用信號(hào)從混疊的待處理信號(hào)中分離出來(lái)。
經(jīng)過計(jì)算可得,待處理信號(hào)的,干性比為-3.6db,即顯著降低了13.6db,有用信號(hào)為15.07db,即損失了0.05db,實(shí)現(xiàn)了對(duì)原有用信號(hào)的成功識(shí)別。
圖6 有用信號(hào)時(shí)域圖
圖7 待處理信號(hào)時(shí)域圖
圖8 待處理信號(hào)頻域圖
圖9 MATLAB濾波處理后的信號(hào)
將Matlab產(chǎn)生的待處理信號(hào)數(shù)據(jù)導(dǎo)入到QuartusII13.1的rom核之中,再將這個(gè)rom核進(jìn)行實(shí)例化引用待處理信號(hào),并接入到處理板中進(jìn)行頻域陷波算法處理,處理結(jié)束后得到如圖10所示的資源占用圖。再編寫tb仿真程序在Modelsim平臺(tái)上進(jìn)行仿真處理,得到如圖11所示的仿真圖像波形,待處理信號(hào)為din,輸出信號(hào)為dout,其波形與Matlab處理后的波形相同,表明在FPGA上實(shí)現(xiàn)了這一算法。將處理過后的波形數(shù)據(jù)導(dǎo)出并保存為txt文件,使用Matlab軟件對(duì)該波形數(shù)據(jù)進(jìn)行計(jì)算。結(jié)果表明,經(jīng)過FPGA硬件處理后得到結(jié)果與Matlab軟件處理的效果接近,干擾信號(hào)被有效地抑制。最后,使用Matlab計(jì)算其平均功率可得進(jìn)行抑制后干性比為-3.3db。
圖10 資源占用圖
圖11 Modelsim仿真波形
隨著各種電氣和機(jī)械自動(dòng)化設(shè)備的飛速發(fā)展,對(duì)這些設(shè)備運(yùn)行狀態(tài)的監(jiān)測(cè)也越發(fā)受人關(guān)注[11-12],針對(duì)監(jiān)測(cè)過程中各種工頻以及諧波電流的強(qiáng)窄帶干擾,采用了基于LMS的自適應(yīng)算法的頻率陷波處理,對(duì)有用信號(hào)和窄帶強(qiáng)干擾信號(hào)混疊的待處理信號(hào)進(jìn)行頻率陷波時(shí),由Matalb和FPGA的聯(lián)合仿真結(jié)果分析可知:
(1)FPGA對(duì)待處理信號(hào)的仿真指標(biāo)略低于Matlab上的仿真運(yùn)算結(jié)果,這可能是由于數(shù)據(jù)在處理過程中的約分引起的,不影響對(duì)有用信號(hào)的提取。
(2)強(qiáng)窄帶干擾信號(hào)對(duì)信號(hào)的影響十分強(qiáng)烈,在多個(gè)頻率的信號(hào)干擾下,有用信號(hào)的提取會(huì)受到嚴(yán)重影響。
(3)采用自適應(yīng)頻率陷波器在信號(hào)收到單個(gè)或多個(gè)頻率信號(hào)的干擾,具有良好的抑制效果,還可以根據(jù)輸入干擾信號(hào)的幅度和相位調(diào)節(jié)其濾波參數(shù),實(shí)現(xiàn)自適應(yīng)特性。
基于LMS作為自適應(yīng)算法的自適應(yīng)陷波器的采集信號(hào)窄帶干擾過濾,針對(duì)一個(gè)或多個(gè)頻率的窄帶干擾信號(hào)的處理進(jìn)行有效濾除,消除工頻和諧波干擾,處理過后的數(shù)據(jù)可以更加明顯地反映出系統(tǒng)的運(yùn)行狀態(tài)。