引言
隨著禽畜業(yè)的發(fā)展,為了有效地控制畜舍廢氣的排放,需要對場內(nèi)幾種主要的污染氣體的濃度進行檢測。在氣體測量過程中,由于傳感器可能出現(xiàn)故障,使得檢測的數(shù)據(jù)出現(xiàn)一些偏差和錯誤。本文針對傳感器因故障導致數(shù)據(jù)失效的問題,設計了一個神經(jīng)網(wǎng)絡數(shù)據(jù)恢復器,實現(xiàn)故障傳感器真實數(shù)據(jù)的恢復,進而采取相應的措施控制廢氣的產(chǎn)生。
1. 基于神經(jīng)網(wǎng)絡的數(shù)據(jù)恢復原理
數(shù)據(jù)恢復基本原理是利用計算機對若干數(shù)據(jù)進行統(tǒng)計,從而將失去的部分數(shù)據(jù)估算出來的方法。本文結(jié)合神經(jīng)網(wǎng)絡對傳感器的歷史采樣數(shù)據(jù)進行訓練,建立合理的神經(jīng)網(wǎng)絡數(shù)據(jù)模型,將傳感器的失效數(shù)據(jù)估算出來。在畜舍的氣體濃度檢測過程中,根據(jù)經(jīng)驗設置采樣數(shù)據(jù)的上下限,當某一傳感器采樣得到的數(shù)據(jù)超過這個范圍時,那么該傳感器必然出現(xiàn)了故障。此時將該傳感器在上一采樣時刻的氨氣濃度、相鄰傳感器在該時刻的氨氣濃度、相鄰傳感器在上一時刻的氨氣濃度、環(huán)境溫度、相對濕度,風速等數(shù)據(jù)作為輸入數(shù)據(jù),利用BP神經(jīng)網(wǎng)絡估算出該時刻此傳感器的氨氣濃度替代原來采樣所得數(shù)據(jù),從而達到數(shù)據(jù)恢復的目的。
本文使用了6輸入1輸出的BP神經(jīng)網(wǎng)絡結(jié)構(gòu),其隱含層選擇了8個神經(jīng)元。當傳感器出現(xiàn)故障時,系統(tǒng)就根據(jù)傳感器的所在位置和失效數(shù)據(jù)產(chǎn)生的時刻,將該時刻前一段時間的24組相應的輸入輸出數(shù)據(jù)對神經(jīng)網(wǎng)絡進行訓練,調(diào)整神經(jīng)網(wǎng)絡的權(quán)值,逐步建立合理的BP神經(jīng)網(wǎng)絡模型。訓練結(jié)束后,用該神經(jīng)網(wǎng)絡估算出該時刻傳感器的真實值替代采樣值,實現(xiàn)數(shù)據(jù)恢復。從前饋階段開始,其算法的計算公式分別為:
2. 神經(jīng)網(wǎng)絡恢復器的設計
2.1 系統(tǒng)整體結(jié)構(gòu)
在本文中,我們使用了線性陣列結(jié)構(gòu)構(gòu)架硬件神經(jīng)網(wǎng)絡,實現(xiàn)失效數(shù)據(jù)的預測。當發(fā)生數(shù)據(jù)失效時,直接讀取該硬件輸出數(shù)據(jù)替代原有傳感器的數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)恢復的功能。在設計過程中,我們使用了串級結(jié)構(gòu)實現(xiàn)神經(jīng)網(wǎng)絡功能,其系統(tǒng)結(jié)構(gòu)如圖1所示。其優(yōu)點是僅通過增減處理單元數(shù)目來達到改變整個神經(jīng)網(wǎng)絡結(jié)構(gòu)的目的,不需要更改同步時序控制電路,同時將系統(tǒng)對數(shù)據(jù)帶寬的要求最小化。
整個系統(tǒng)由隱含層和輸出層組成,神經(jīng)網(wǎng)絡輸入層的功能在隱含層內(nèi)實現(xiàn)。該隱含層由8個處理單元PE組成(PE1至PE8),所有的處理單元串聯(lián)在一起,每個PE的兩側(cè)提供三個數(shù)據(jù)總線(chan1,chan2,chan3)以及三個數(shù)據(jù)有效標志信號(valid1, valid2, valid3)。隱含層中每個PE具有類似于神經(jīng)網(wǎng)絡中隱含層神經(jīng)元的作用,執(zhí)行相同的功能(正向傳播和反傳誤差及權(quán)值的調(diào)整)。輸出層由PE9 組成,基本結(jié)構(gòu)與隱含層PE類似,實現(xiàn)輸出層功能。
系統(tǒng)運行過程分為三個階段,配置階段,前饋階段和反傳更新階段。在配置階段主要是初始化查找表和每個PE中臨時存放數(shù)據(jù)的寄存器,同時將初始的權(quán)值讀入各自的權(quán)值存儲器中。當配置結(jié)束后,進入前饋階段。
在前饋階段,系統(tǒng)將隱含層的PE1左側(cè)valid1置1,PE1從左側(cè)依次接收一組數(shù)據(jù)中的每一個輸入數(shù)據(jù)。PE1在接受數(shù)據(jù)后即開始進行內(nèi)部運算,并依次將接收的輸入數(shù)據(jù)從chan1總線輸出。當PE1的chan1有數(shù)據(jù)輸出時,系統(tǒng)將PE1右側(cè)的valid1置1,并把該值傳遞到PE2左側(cè)的valid1。當PE2左側(cè)valid1為1時,PE2開始接收PE1 的數(shù)據(jù)。與此類似,系統(tǒng)依次啟動PE3至PE8 ,將輸入數(shù)據(jù)傳輸?shù)秸麄€隱含層里。當一組輸入數(shù)據(jù)輸入結(jié)束時,PE1將開始接收下一組輸入數(shù)據(jù),并將此時的運算結(jié)果由chan2輸出到下一個PE,此結(jié)果就是該組數(shù)據(jù)對一個隱含層神經(jīng)元的激活結(jié)果。Chan2數(shù)據(jù)的傳輸過程與chan1一樣。當PE8開始輸出運算結(jié)果時,本設計將該結(jié)果由 chan2輸出,并通過三態(tài)門連接到chan1總線,進而輸入到輸出層的PE9里(如圖1)。PE9接收到數(shù)據(jù)后,實現(xiàn)輸出層前饋階段的所有功能。當輸出層PE9輸出完第一組數(shù)據(jù)時,將PE9右側(cè)valid3置1,系統(tǒng)進入反傳更新階段。
當進入反傳更新階段時,系統(tǒng)期望值tj即該時刻氨氣濃度由chan3總線反向輸入到輸出層的PE9。輸出層的PE9接收數(shù)據(jù)后,通過計算得出自身的權(quán)值誤差,進行權(quán)值更新,同時通過chan3輸出公式(4)的計算結(jié)果δj。隱含層PE8接收到PE9的輸出數(shù)據(jù)后進行權(quán)值誤差計算,更新自身的權(quán)值,同時通過chan3數(shù)據(jù)總線依次將接收的δj依次反向傳播,直至PE1接收到該數(shù)據(jù)。當PE1完成一組權(quán)值更新時,對應的該組數(shù)據(jù)的神經(jīng)網(wǎng)絡訓練過程結(jié)束。
2.2 基本處理單元的設計
在本設計中,所有的運算都是通過基本處理單元PE實現(xiàn),處在不同層的PE具有類似的結(jié)構(gòu),執(zhí)行不同的功能。每個PE由基本運算單元PEA,查找表LUT,權(quán)值寄存器WT及臨時寄存器REG組成?,F(xiàn)以結(jié)構(gòu)較復雜的隱含層PE的設計為例,其整體結(jié)構(gòu)如圖2所示,由前饋部分(FORWARD部分)和反傳更新(BACKWARD部分)兩個部分組成。其中PEA1和PEA2為計算單元,LUT1和LUT2為函數(shù)激活單元,MUX為數(shù)據(jù)選擇單元,SHIFT為數(shù)據(jù)移位單元。
在本設計中,PEA1,PEA2單元主要實現(xiàn)輸入數(shù)據(jù)與權(quán)值的乘積累加功能,由乘法器,累加器組成。計數(shù)器的數(shù)值為一組輸入數(shù)據(jù)的個數(shù)。為了確保輸入數(shù)據(jù)與對應的權(quán)值相乘,從寄存器里的讀取緩存的輸入數(shù)據(jù)和權(quán)值的過程均由計數(shù)器控制。累加器在每次進行累加后,將計數(shù)器的數(shù)值加1。當計數(shù)器復位時,累加器會將累加結(jié)果輸出,然后對內(nèi)部寄存器復位并重新開始累加。由于該單元中輸入數(shù)及權(quán)值均為8位數(shù),因此我們使用了8*8的布斯編碼乘法器以及16位超前進位加法器和數(shù)據(jù)累加器。
本設計中的LUT單元為查找表單元,由ROM,移位寄存器,計數(shù)器及減法器組成,其中LUT1主要實現(xiàn)激活函數(shù)?(Si),LUT2主要實現(xiàn)激活函數(shù)?ˊ(Si)。查找表的數(shù)據(jù)通過C語言編程產(chǎn)生數(shù)據(jù)文件,其數(shù)據(jù)的寬度為8位數(shù),該數(shù)據(jù)文件在配置階段被預存入對應的ROM里查找。本設計為了減小規(guī)模,僅選取了S函數(shù)曲線第一象限上的16個點的數(shù)值作為查找表數(shù)據(jù)。根據(jù)S函數(shù)的曲線特點,我們將16個點的坐標分別取X=2i-1,i=1,2,3…16。此16個點的查找表中對應數(shù)值為公式?(s)=255/(1+е-s/8)的整數(shù)部分。在使用查找表時,先根據(jù)輸入數(shù)據(jù)的符號位判斷數(shù)據(jù)的正負性。若為正,該數(shù)值即對應第一象限的點,通過移位計數(shù),求出該輸入對應的i的值,即數(shù)據(jù)在查找表ROM中的地址值,找到相應的數(shù)據(jù);若為負,則為第二象限的點,必須先通過查找表找出該點在第一象限對稱點的數(shù)值,然后根據(jù)S函數(shù)的對稱性公式?(s)=255-?(–s)。由8位的減法器計算出該點的真實數(shù)值。MUX模塊為一個多位數(shù)據(jù)選擇器,它與臨時寄存器共同實現(xiàn)數(shù)據(jù)的選擇。臨時寄存器由一個RAM組成,用來存儲不能及時處理的數(shù)據(jù)。在使用MUX選擇數(shù)據(jù)時,需先將所有輸出的數(shù)據(jù)存入臨時寄存器中,然后根據(jù)設定好的選擇原則選擇輸出。SHIFT模塊由移位寄存器構(gòu)成,通過右移一位可以達到乘以一個λ的效果,從而實現(xiàn)神經(jīng)網(wǎng)絡學習率的控制。
本設計使用了Altera公司的QUARTUSII集成開發(fā)軟件設計所有的硬件,選擇了CYCLONE系列的EP1C6Q240C8芯片的開發(fā)板進行測試仿真,仿真結(jié)果如圖3所示。需要說明的是,在設計中將輸入數(shù)據(jù)放大了100倍,因此不需要進行浮點操作。Chan1為輸入數(shù)據(jù),chan2為隱層輸出數(shù)據(jù),chan3為反傳數(shù)據(jù),valid為總線有效信號。
3. 實驗測試與結(jié)論
本文針對禽畜養(yǎng)殖場廢氣濃度檢測中傳感器的數(shù)據(jù)失效問題,在FPGA開發(fā)板上設計了一個基于BP神經(jīng)網(wǎng)絡的數(shù)據(jù)恢復器。該恢復器的最大工作頻率為171.7MHZ,在調(diào)試階段,使用了開發(fā)板的最高時鐘頻率40MHZ為其工作頻率。為了評估恢復器的性能,我們以氨氣(NH3)濃度檢測過程中某一傳感器的數(shù)據(jù)處理為例,采集了某畜舍三天的NH3的濃度數(shù)據(jù)及環(huán)境溫度、相對濕度,風速等數(shù)據(jù),通過三天采集的72組數(shù)據(jù),對第三天的24組采樣數(shù)據(jù)分別進行估算。實驗結(jié)果表明,24組數(shù)據(jù)測量值與估算值的最大相對誤差為7.83%,最小相對誤差為0.09%,平均相對誤差為3.13%(如圖4所示,曲線為測量值,星號為估算值),證明了該設計基本滿足實際應用的要求。
本文的創(chuàng)新點主要在三個方面:一是在對故障傳感器進行數(shù)據(jù)預測時,引進了神經(jīng)網(wǎng)絡,并使用了FPGA硬件對該恢復器進行了實現(xiàn)。二是在設計神經(jīng)網(wǎng)絡恢復器時,使用了特殊的串級結(jié)構(gòu),減少了系統(tǒng)對帶寬的要求,增加了該設計的可維護性。三是在實現(xiàn)查找表功能時,使用了函數(shù)對稱性,減少了查找表的數(shù)據(jù)規(guī)模。使用了移位寄存器和計數(shù)器直接將輸入數(shù)據(jù)轉(zhuǎn)化為查找表地址,避免了占Cyclone芯片大量資源的基本數(shù)學運算。
責任編輯:gt
評論