周 浩,段欣欣,閔康磊,蔣志勝,李 金
(上海航天電子技術(shù)研究所,上海201109)
在機(jī)械動(dòng)態(tài)分析、設(shè)備狀態(tài)檢測(cè)與故障診斷過(guò)程中,存在著大量的非平穩(wěn)信號(hào)。對(duì)于非平穩(wěn)、非線性信號(hào)比較直觀的分析方法是,使用具有局域性的基本量和基本函數(shù),經(jīng)驗(yàn)?zāi)B(tài)分解EMD 算法是由N.E.Huang 等人提出的一種將信號(hào)分解成特征模態(tài)的方法[1-2]。在結(jié)構(gòu)動(dòng)力分析、醫(yī)學(xué)檢測(cè)、地震檢測(cè)以及設(shè)備故障診斷等工程領(lǐng)域,EMD 算法具有重要的意義。
隨著FPGA 技術(shù)的成熟,越來(lái)越多的嵌入式設(shè)備選擇圍繞FPGA 為處理核心建立。在此,通過(guò)研究基于FPGA 平臺(tái)EMD 算法的實(shí)現(xiàn)方法,有利于EMD 算法以及HHT 算法的平臺(tái)移植,有利于故障檢測(cè)等儀器設(shè)備向小型化、便攜式方向發(fā)展。
EMD 算法的優(yōu)點(diǎn)是不會(huì)運(yùn)用任何已經(jīng)定義好的函數(shù)作為基底,而是根據(jù)所分析的信號(hào)來(lái)自適應(yīng)生成固有模態(tài)函數(shù),可以用于分析非線性、非平穩(wěn)的信號(hào)序列,具有很高的信噪比和良好的時(shí)頻聚焦性。因此基于EMD 方法的機(jī)械故障診斷方法廣泛應(yīng)用于各個(gè)工程領(lǐng)域。
EMD 信號(hào)分解方法是一種具備自適應(yīng)能力的信號(hào)時(shí)頻分析方法,能夠根據(jù)信號(hào)本身的特性,抽取被處理信號(hào)的固有模態(tài)函數(shù),是能夠應(yīng)用于非線性非平穩(wěn)信號(hào)的分析方法[3]。該方法將原始待處理信號(hào)分解為多個(gè)窄帶信號(hào)分量,該窄帶分量被稱為本征模態(tài)函數(shù)(IMF),本征模態(tài)函數(shù)為單分量信號(hào),該信號(hào)能夠描述具有實(shí)際物理意義的瞬時(shí)頻率。
IMF 函數(shù)必須符合2 個(gè)條件[4-5]:IMF 信號(hào)序列中,極值點(diǎn)的數(shù)量和零點(diǎn)數(shù)量相差不能大于1;整個(gè)信號(hào)函數(shù)任意點(diǎn)上,上下包絡(luò)的均值必須為0。
對(duì)此,EMD 算法實(shí)現(xiàn)必須滿足3 個(gè)條件[6]:①原始信號(hào)函數(shù)中至少需要包含2 個(gè)極值點(diǎn)(1 個(gè)最大值和1 個(gè)最小值);②信號(hào)序列的局部時(shí)域特性必須僅受極值點(diǎn)的時(shí)間尺度影響;③當(dāng)信號(hào)序列只包含拐點(diǎn)時(shí),可通過(guò)微分獲得極值。
EMD 方法分解流程如圖1所示。
圖1 EMD 分解流程Fig.1 EMD decomposition flow chart
步驟1確定原始信號(hào)序列x0(t)中的極大值與極小值;
步驟2利用三次樣條插值方法,計(jì)算獲得原信號(hào)函數(shù)包絡(luò)線函數(shù)ysup(t),yinf(t),并計(jì)算上下包絡(luò)線函數(shù)的均值y0(t)。即
式中:ysup(t)為上包絡(luò)線;yinf(t)為下包絡(luò)線。
步驟3由于信號(hào)序列中,上下包絡(luò)線的均值為信號(hào)中的低頻分量,利用原始信號(hào)序列減去上下包絡(luò)線的均值序列,構(gòu)建新的待分解信號(hào)序列。即
步驟4重復(fù)以上步驟,直至新的信號(hào)序列滿足IMF 函數(shù)條件,獲得IMF 函數(shù),即為當(dāng)前信號(hào)序列的最高頻率分量:
步驟5原信號(hào)函數(shù)x0(t)減去IMF 函數(shù),得到新的信號(hào)函數(shù)x0(t),重復(fù)以上步驟,直至新的函數(shù)x0(t)不可分解為止。
現(xiàn)場(chǎng)可編程門(mén)陣列FPGA 使用預(yù)建的邏輯塊和可重新編程布線資源,用戶無(wú)需再使用電路試驗(yàn)板或烙鐵,就能配置這些芯片來(lái)實(shí)現(xiàn)自定義硬件功能。用戶在軟件中開(kāi)發(fā)數(shù)字計(jì)算任務(wù),并將其編譯成配置文件或比特流,其中包含元器件相互連接的信息。此外,F(xiàn)PGA 可完全可重配置,當(dāng)用戶在重新編譯不同的電路配置時(shí),能夠當(dāng)即呈現(xiàn)全新的特性。FPGA 運(yùn)行處理快,同時(shí)具有豐富的邏輯資源以及專業(yè)IP 資源,基于FPGA 的嵌入式系統(tǒng)開(kāi)發(fā),便于功能拓展和設(shè)備模塊自定義處理。
通過(guò)分析EMD 算法原理,在FPGA 實(shí)現(xiàn)過(guò)程中,包括極值點(diǎn)計(jì)算和上下包絡(luò)線序列計(jì)算,2 個(gè)核心步驟。
在此,選擇三彎矩算法求解上下包絡(luò)線。根據(jù)定義,設(shè)待插值序列為
設(shè)三次樣條函數(shù)S(x)為
設(shè)S(x)的二階導(dǎo)數(shù)為
根據(jù)拉格朗日插值定理,可知
利用2 個(gè)定點(diǎn)xi和xi+1,可求得
經(jīng)過(guò)數(shù)學(xué)化解,并記作
將方程(10)簡(jiǎn)化為
補(bǔ)充邊界條件,令
得到矩陣:
由式(11)可知,μ 和λ0的值均<1,故矩陣滿足:
矩陣(14)能夠采用TDMA(the tridiagonal matrix algorithm)進(jìn)行求解。具體如下:
其一,通過(guò)前向消元,將原矩陣轉(zhuǎn)換為上三角矩陣。即
其中
其二,逆向求解。即
其三,求解參數(shù)。即
EMD 信號(hào)FPGA 實(shí)現(xiàn)流程如圖2所示。FPGA進(jìn)行EMD 分解時(shí),首先FPGA 器件將需要處理的數(shù)據(jù)由數(shù)據(jù)存儲(chǔ)芯片讀取到DDR2 芯片中,用于數(shù)據(jù)緩存。然后,將RAM 中的數(shù)據(jù)采用只讀的方式讀取到原始信號(hào)暫存模塊。
極值求解模塊實(shí)現(xiàn)流程 ①通過(guò)FPGA 將接收到的待處理原始信號(hào)序列放入RAM 中;②依次讀取原始信號(hào)序列中的值,分別放入寄存器ABC 中;③數(shù)值比較模塊讀取寄存器中的值并進(jìn)行比較,經(jīng)過(guò)比對(duì)確定寄存器B 是否為極值,如果是則觸發(fā)極值步進(jìn)計(jì)數(shù),并寫(xiě)入極值FIFO,識(shí)別極值屬于極大值或極小值分別寫(xiě)入相應(yīng)的緩存FIFO 中,在極值狀態(tài)寄存器中標(biāo)識(shí)極值類(lèi)型,對(duì)寄存器B 的值進(jìn)行零點(diǎn)判決,對(duì)零點(diǎn)進(jìn)行識(shí)別并緩存標(biāo)識(shí);④一次數(shù)據(jù)比較完成(1 個(gè)時(shí)鐘周期)后,寄存器中的值由寄存器C 傳遞至寄存器A,寄存器C 從原始信號(hào)緩存區(qū)(RAM)讀取下一個(gè)值。
當(dāng)原始信號(hào)序列緩存FIFO 變?yōu)椤翱铡睜顟B(tài)時(shí),完成一次極值序列求解過(guò)程。極值序列求解完成后進(jìn)入上下包絡(luò)求解模塊,開(kāi)始進(jìn)行執(zhí)行三次樣條插值程序。
三次樣條插值模塊 考慮到上下包絡(luò)線序列計(jì)算方法相同,利用FPGA 器件并行處理的特性,同時(shí)執(zhí)行上下包絡(luò)線序列計(jì)算。由于上下包絡(luò)線求解過(guò)程一致,同步進(jìn)行上下包絡(luò)線函數(shù)求解。三次樣條插值模塊遵循著盡量使用加法器進(jìn)行運(yùn)算,減少乘法器使用的規(guī)則。
該模塊包括函數(shù)因子計(jì)算和插值點(diǎn)值計(jì)算兩部分。函數(shù)因子計(jì)算部分 ①根據(jù)式(7)(8)(11),計(jì)算hi,li,μi,λi,di;②計(jì)算矩陣,獲得二階倒數(shù)因子Mi;③根據(jù)式(18),求解每個(gè)插值點(diǎn)的值。插值點(diǎn)值計(jì)算部分 求解插值點(diǎn)的過(guò)程中讀取極值初始寄存器的值,如果寄存器值為高電平(第1 個(gè)極值為極大值),則讀取步進(jìn)FIFO 中數(shù)據(jù)偶數(shù)位(0,2,…)為極大值步進(jìn),奇數(shù)位(1,3,…)為極小值步進(jìn),反之,交換讀取方式。
采用倒序讀取的方式,設(shè)置步進(jìn)計(jì)數(shù)器,獲得2個(gè)極值點(diǎn)件插值點(diǎn)的數(shù)量,在上下包絡(luò)FIFO 中寫(xiě)入極值點(diǎn)和插值點(diǎn)的數(shù)量。將單次使用的計(jì)算因子寫(xiě)入到FIFO 中,需要重復(fù)使用的因子寫(xiě)入FPGA例化的RAM 模塊中。
將計(jì)算得到的函數(shù)序列進(jìn)行IMF 函數(shù)條件驗(yàn)證。該過(guò)程有2 個(gè)步驟:①分別讀取極值計(jì)數(shù)寄存器的值和零點(diǎn)計(jì)數(shù)寄存器中的值,判斷是否滿足IMF 函數(shù)條件1;②計(jì)算相對(duì)應(yīng)極大值與極小值的差值,判斷上下包絡(luò)線均值是否為0,函數(shù)序列是否滿足IMF 函數(shù)條件2。根據(jù)驗(yàn)證結(jié)果,如果生成序列滿足IMF 條件,則輸入到下一級(jí),用于后期信號(hào)處理;否則,用原始函數(shù)序列減去相應(yīng)值,重復(fù)執(zhí)行之前的操作。
圖2 EMD 信號(hào)FPGA 實(shí)現(xiàn)框圖Fig.2 Block diagram of FPGA implementation of EMD signal
在此,利用FPGA 平臺(tái)對(duì)高速列車(chē)行駛過(guò)程中車(chē)體前部橫向加速度進(jìn)行EMD 分解,以便于數(shù)據(jù)的后期分析,判斷高速列車(chē)減震器的工作狀態(tài)。
simpack 軟件是一款用于機(jī)械/機(jī)電系統(tǒng)運(yùn)動(dòng)學(xué)/動(dòng)力學(xué)仿真分析的多體動(dòng)力學(xué)分析軟件。利用該軟件建立仿真模型,模擬高速列車(chē)運(yùn)行過(guò)程中車(chē)體前部橫向加速度。所用原始數(shù)據(jù)源于simpack 軟件。
基于Xilinx FPGA 開(kāi)發(fā)平臺(tái)ISE 進(jìn)行軟件開(kāi)發(fā),并通過(guò)Modesim 仿真軟件進(jìn)行程序的仿真測(cè)試。Modesim 仿真結(jié)果的截圖如圖3所示。圖中自上而下分別為IMF1—IMF8。分析仿真結(jié)果可知,隨著IMF_cnt 由1 變?yōu)?,IMF 值變化頻率逐漸變小,同時(shí)對(duì)比IMF_Y 的幅值可以清楚地判斷出IMF4 和IMF5 的幅值最大,即信號(hào)能量最為集中。比對(duì)零點(diǎn)個(gè)數(shù)與極值點(diǎn)個(gè)數(shù),符合EMD 分解原理。
在微型化、高速化發(fā)展的大背景下,將EMD 方法移植到FPGA 平臺(tái),有利于分析檢測(cè)設(shè)備小型化、通用化發(fā)展。同時(shí),由于FPGA 器件的結(jié)構(gòu)特點(diǎn),通過(guò)并行化的處理方式能夠提升EMD 算法的處理速度,可編程的特性能夠增加系統(tǒng)開(kāi)發(fā)的靈活性。將EMD 方法與希爾伯特變換結(jié)合,EMD 方法的應(yīng)用領(lǐng)域?qū)⑦M(jìn)一步擴(kuò)大。
圖3 IMF 仿真截圖Fig.3 Screenshot of IMF simulation