周武,徐飛洋,蔣絮,李玉曉
(江西理工大學 理學院,江西 贛州 341000)
電子系統健康狀態識別是視情維護的關鍵問題之一。電子系統健康狀態識別的本質在于研究故障信號的嚴重程度識別問題。在故障嚴重程度識別中,故障特征與故障嚴重程度存在正相關或負相關關系,可以通過特征來評估電子系統健康狀態水平[1,2]。但實際故障特征中存在不相關信息及冗余成分,使得識別算法復雜度增大、降低了識別準確度。同時,識別模型的好壞可以直接影響識別結果的準確率。因此故障嚴重程度識別的關鍵在于故障特征提取和識別模型的建立。
故障特征提取指通過變換域分析、數據處理等技術,得到原始數據中有效的特征。目前常用的故障信號特征提取方法有:時域分析方法,頻域分析方法和時頻分析方法[3]。故障嚴重程度在電子系統退化過程中具有累積效應,電子系統越老舊,發生故障的嚴重程度就越大。即故障信號的參數分布是隨時間變化的,屬于非平穩信號。時域分析方法和頻域分析方法很難準確識別非平穩信號。而時頻分析方法可以有效識別故障的時域和頻域成分,在故障分析中較為常用。
故障識別模型主要分為基于經驗模型的方法,基于物理模型的方法和基于數據驅動模型的方法[4]。相比于前兩種方法,基于數據驅動模型的方法是研究和應用的熱點,主要有基于統計分析的數據驅動模型方法和基于非統計分析的數據驅動模型方法。前者需要大量的訓練數據,才能通過統計分析捕捉故障的關鍵特征。后者具有自適應學習能力,理論上能以任意精度逼近高維非線性函數。目前,基于非統計分析的數據驅動模型方法是故障識別模型研究的主流方向之一,其中神經網絡是較成熟的故障識別工具。
針對故障特征提取和故障識別模型的問題,提出了基于VMD-GRU 的電子系統健康狀態識別方法。該方法能有效去除故障信號的冗余成分,并反映出故障信號的時頻特征,且模型結構較為簡單,計算復雜度低且故障識別準確率高。同時,基于Linux 系統設計了電子系統健康狀態識別平臺,該平臺可以為視情維護提供更多有效的信息,降低維護設備的經濟成本及避免發生故障帶來的安全影響。
在VMD 算法理論[5]中,固有模式函數(Intrinsic Mode Function, IMF)被重新定義為幅度調制和頻率調制信號,記為:

其中,uk(t)表示定義的IMF 分量,相位φk(t)是非遞減的時間函數,振幅Ak(t)≥0 是非負的時間函數。瞬時頻率wk(t)= (t)≥0,且Ak(t)和wk(t)變化φk(t)比慢得多。因此,在時間范圍內[t-δ,t+δ],δ≈2π/ (t),可被看為振幅和瞬時頻率不變的純諧波信號,即VMD 算法可以將信號分解為一系列中心頻率不同、帶寬有限的IMF。
基于維納濾波、希爾伯特變換與解析信號和混頻與外差解調原理,建立VMD 的模型。各IMF 之和應與原始信號相等,為VMD 模型的約束條件。最終構建的模型如下所示:

式中,x(t)表示目標信號,K表示VMD 將目標信號分解成IMF 的個數,δ(t)為狄利克雷函數,*為卷積符號。{uk}={u1,u2,……,uK}表示分解得到的各個IMF,{wk}={w1,w2,……,wK}表示各個IMF 的中心頻率。利用交替方向乘子法[5]通過迭代的方式求解上述模型結果,得到最優解。
獲得VMD 的最優參數后,可將故障信號準確地分解為一系列IMF。但在實際數據采集過程中,故障信號容易受到環境噪聲干擾,導致VMD 分解出的IMF 中包含冗余信息。提出利用相似度分析從信號分解出的一系列IMF 中篩選出與故障原始信號相似程度最大的分量,作為故障信號的主要成分,再從主要成分中構建電子系統健康狀態因子。同一水平的故障信號,其幅值大小略有不同。為避免信號幅值大小對故障主要成分篩選產生不利影響,不宜選用基于距離的相似度指標。采取余弦相似度指標來計算各IMF 與原始故障信號之間的相似程度。假定故障信號為x1=(x1(1),x1(2),……,x1(n))和該故障信號通過VMD 方法分解出來的一個IMF 為x2=(x2(1),x2(2),……,x2(n))。余弦相似度指標C計算公式如下所示:

C越接近于1,則表示二者之間越相似,選取C最大值對應的IMF 作為故障信號的主要成分。在得到故障信號的主要成分之后,利用微分增強型能量算子來提取主要成分的瞬時能量,以此構建電子系統健康狀態因子作為反映電子系統健康狀態水平的有效特征。電子系統健康狀態因子定義如下:

式(3)中,x1(i)表示主要成分的第i個元素,Ei表示主要成分的第i個點的瞬時能量。式(4)中,S表示電子系統健康狀態因子,能有效反映出電子系統健康狀態水平(S首尾添加兩個0 是為了方便訓練GRU 模型)。
循環神經網絡(Recurrent Neural Network, RNN)是一種特殊的循環神經網絡模型,對時序信息有著記憶能力。從RNN 結構上來說,隱藏層的輸入包括輸入層的輸出和上一時刻隱藏層的輸出,節點之間存在連接關系,用以解決信息保存問題。從RNN 理論上來說,可以處理任意長度的序列數據。然而,面臨歷史信息與當前處理的信息之間距離較大時,RNN 存在梯度消失或梯度爆炸的問題。GRU 網絡是RNN 的另一良好變體,GRU 網絡的識別準確性和預測精度與LSTM 網絡相似,但其模型結構更為簡單,訓練收斂速度快,大大降低了計算復雜度[6,7]。GRU 有兩個門控結構:復位門zt、更新門rt,用于決定保留多少歷史信息和記憶多少輸入信息。從而使GRU 可以選擇輸入序列的有用信息進行學習。GRU 網絡的單元結構如圖1 所示。

圖1 GRU 網絡單元結構
圖中,ht-1表示t-1 時刻隱藏層的輸出數據,ht表示t時刻隱藏層的輸出數據,xt表示t時刻輸入數據,σ和tanh是激活函數,表示矩陣基本運算。GRU 網絡由多個此類單元結構堆疊而成,且每個單元結構的基本參數是相同的,其前向傳播計算公式為:

式(6)~(9)中,Wz,Wr,Wh,Uz,Ur,Uh表示權重矩陣,bz,br,bh表示偏置矩陣,表示選擇丟棄的無關歷史信息。
提出的電子系統健康狀態識別模型由三部分組成:輸入層,隱藏層和輸出層。模型結構如圖2 所示。

圖2 電子系統健康狀態識別模型結構
電子系統健康狀態識別平臺設計采用的是I.MX6ULL 開發板,用戶需借助PC 機對嵌入式設備進行開發。但嵌入式設備與PC 機體系結構不一樣,不同體系結構編譯出來的可執行文件不能互相使用,因此需要在PC 機上提前搭載好開發環境。開發環境搭建是一個復雜的工程,針對主要步驟進行簡單介紹。首先,安裝Linux 開發平臺。從開發的穩定性考慮,在PC 機上安裝了Ubuntu18.04 的虛擬機,Linux 內核版本為4.1.15。其次,安裝交叉編譯器。交叉編譯器的作用是在一個架構上編譯另一個架構的代碼。最后,搭建網絡環境。Linux 內核比較龐大,借助SD 卡燒寫代碼等方法調試代碼比較花費時間,在Linux 開發過程中常通過網絡功能做調試。同時,在開發過程中常需要不同系統間進行文件傳輸。因此,在虛擬機的終端模式下,用戶通過執行與網絡相關的指令來開啟TFTP、NFS 等相關服務。
平臺整體實現可劃分為兩部分:Linux 系統移植和Linux 驅動開發。Linux 系統移植是為了提供驅動開發的編程環境,Linux 系統是管理設備硬件和分配資源的軟件。而Linux 驅動開發是連接硬件設備和操作系統的橋梁。與裸機開發不同,程序不是直接運行在硬件之上的。操作系統提供了硬件開發接口,用戶只需編寫對應的驅動程序,即可對硬件設備進行操作。
2.2.1 BootLoader 移植
BootLoader 是一個引導程序,是系統上電或復位后執行的第一個程序。它的主要工作為初始化操作系統環境,再將Linux 內核加載到內存中并啟動Linux 內核。在嵌入式系統中BootLoader 種類繁多,本文選用了支持ARM 體系的U-boot。
U-boot 移植并不是說完全從零開始編寫代碼,本文對半導體廠商提供的U-boot 源碼進行修改,再移植到平臺上。移植U-boot 有以下幾點需要注意:
2.2.1.1 添加并修改文件
平臺選用的是I.MX6ULL 開發板,從NXP 官網下載芯片對應的U-boot 工程,向U-boot 工程中創建與電子系統健康狀態識別平臺的相關板級支持包。對官方原廠的配置文件作相應修改,同時添加頭文件。
如圖3 所示,工程文件僅對官方U-boot 做了簡單的復制和修改,由于代碼較為龐大,只展示了部分修改內容。接下來需要根據開發板電路進行一些配置修改。

圖3 U-boot 移植主要修改的文件
2.2.1.2 LCD 及網絡驅動修改
U-boot 的驅動信息基本都在xxx.h 和xxx.c 文件中(xxx是名稱),本文用的是mx6ull_test_nand.h 和mx6ull_test_nand.c。修改LCD 驅動的主要步驟如下:
(1)根據開發板硬件原理圖,查看LCD 所使用的引腳數目并核對U-boot 中的IO 配置是否設置正確。
(2)修改LCD 背光引腳的配置,有些LCD 沒有使用到背光引腳,可在U-boot 中刪除或注釋掉相關代碼。
(3)修改LCD 參數配置,例如行同步脈寬、垂直同步脈寬、像素時鐘等,確保LCD 正常工作。
開發板上有兩個網絡接口ENET1 和ENET2,通過網絡芯片LAN8720A 進行控制。這里使用ENET1 接口進行網絡通信,修改網絡驅動的主要步驟如下:
(1)根據開發板硬件原理圖,查看ENET1 機構使用的引腳并在U-boot 中進行初始化配置。
(2)修改LAN8720A 器件地址。
(3)修改LAN8720A 驅動代碼,由于開發板使用的網絡芯片與官方的不同,需要將對應代碼進行修改。
2.2.1.3 編譯工程
對修改好的工程進行編譯,得到二進制鏡像文件,用于嵌入式設備啟動U-boot。為方便編譯工程,創建一個shell腳本文件,通過執行shell腳本編譯U-boot工程得到.bin文件,將.bin 文件燒寫進開發板中,即可啟動U-boot。
2.2.2 Linux 內核移植
Linux內核是操作系統代碼,用于管理應用、內存和設備等。Linux 系統結構如圖4 所示。如圖4 所示,Linux 內核主要分為:進程管理、內存管理、網絡接口、虛擬文件系統和進程通信。進程管理用于控制進程對CPU 的訪問,通過調度算法合理分配CPU 資源。內存管理用于管理內存資源,讓多個進程安全訪問共享資源。網絡接口用于實現系統的網絡通信,管理系統的網絡設備。虛擬文件系統將硬件設備抽象成文件,提供了文件操作接口來訪問、配置設備。進程通信為進程之間提供多種通信機制,協助多進程和多資源之間的消息傳遞。

圖4 Linux 系統結構
Linux 驅動主要分為:字符設備驅動、塊設備驅動和網絡設備驅動三大類。LCD 驅動屬于字符設備驅動,USB 驅動屬于塊設備驅動。
2.3.1 LCD 驅動電路
如圖5 所示,為一個通用RGB-LCD 模塊的電路原理圖,主要用于反饋識別結果。LCD 接口驅動程序NXP 官方已經寫好,只需按照平臺設計需求,修改設備樹中LCD 的信息,主要步驟如下。

圖5 LCD 電路原理圖
2.3.1.1 LCD 屏幕IO 接口配置
子節點pinctrl_lcdif_dat,為LCD 的24 根數據線配置;子節點pinctrl_lcdif_ctrl,為LCD 的4 根控制線配置;子節點pinctrl_pwm1,LCD 背光PWM 引腳配置項。對子節點各項配置,實際上就是配置對應的寄存器,Linux 內核會自動鏈接這一過程。
2.3.1.2 LCD 屏幕參數節點信息配置
不同型號的LCD 屏幕參數是不同的,需要參考芯片手冊進行配置。
2.3.1.3 LCD 背光節點信息配置
根據電路原理圖LCD 背光控制IO 連接到了GPIO1_IO08上,通過修改設備樹用PWM 信號來控制LCD 屏幕背光亮度。
通過上述設置,LCD 屏可以正常工作。
2.3.2 USB 驅動電路
開發板使用GL850G 芯片擴展了三路HOST 接口,因此可支持鍵盤和U 盤同時工作,通過鍵盤輸入指令讀取U盤中的數據。NXP 官方提供的內核已默認啟用了USB 驅動。
整個電子系統健康識別平臺搭建完畢后,利用第2 節的測試集數據測試平臺識別性能。測試具體操作如下:
(1)通過USB 驅動連接U 盤和鍵盤,利用鍵盤輸入指令“mount /dev/sda1 /mnt/usb_disk/ -t vfat”將U 盤掛載在/mnt/usb_disk 目錄下。輸入ls 命令查看U 盤文件,如圖6所示。

圖6 讀取U 盤故障數據文件
圖中,白色字體代表第2 節采集的訓練集和測試集數據,以.txt 文件保存。data2_123.txt 表示故障嚴重程度為2的第123 個樣本,data 后面數字代表故障嚴重程度等級,“_”后面數字代表第幾個樣本,數字1 ~100 為訓練集,101 ~150 位測試集。
(2)基于提出的算法編寫C 程序,各故障等級識別結果如圖7 所示。

圖7 平臺識別結果
圖中,利用各故障的第123 個樣本進行測試,對應故障等級的識別結果都正確。
(3)統計各故障測試集的識別結果,即各故障的第101 個樣本到第150 個樣本。統計結果如表1 所示。
由表1 的實驗結果可知,電子系統健康狀態識別平臺設計成功,識別結果具有較高的準確率,本文所設計的平臺能有效進行電子系統的健康狀態識別,能為視情維護提供重要決策信息。

表1 統計的識別結果
以電子系統關鍵電路的不同嚴重程度的故障信號作為研究對象,提出了基于VMD 方法從時頻域來表征故障信息,基于GRU 網絡構建了故障識別模型,并設計實現了電子系統健康狀態識別平臺。通過實驗分析和硬件測試,具有較高的識別準確率和可靠性。提出的方法能有效評估電子系統的健康狀態水平,設計的平臺可以為視情維修提供重要的決策信息,降低電子系統維修難度及費用,避免電子系統帶隱患工作造成的安全事故。