基于EP1C6Q240C8芯片的FPGA开发板实现神经网络恢复器的设计

可编程逻辑

1340人已加入

描述

引言

随着禽畜业的发展,为了有效地控制畜舍废气的排放,需要对场内几种主要的污染气体的浓度进行检测。在气体测量过程中,由于传感器可能出现故障,使得检测的数据出现一些偏差和错误。本文针对传感器因故障导致数据失效的问题,设计了一个神经网络数据恢复器,实现故障传感器真实数据的恢复,进而采取相应的措施控制废气的产生。

1. 基于神经网络的数据恢复原理

数据恢复基本原理是利用计算机对若干数据进行统计,从而将失去的部分数据估算出来的方法。本文结合神经网络对传感器的历史采样数据进行训练,建立合理的神经网络数据模型,将传感器的失效数据估算出来。在畜舍的气体浓度检测过程中,根据经验设置采样数据的上下限,当某一传感器采样得到的数据超过这个范围时,那么该传感器必然出现了故障。此时将该传感器在上一采样时刻的氨气浓度、相邻传感器在该时刻的氨气浓度、相邻传感器在上一时刻的氨气浓度、环境温度、相对湿度,风速等数据作为输入数据,利用BP神经网络估算出该时刻此传感器的氨气浓度替代原来采样所得数据,从而达到数据恢复的目的。

本文使用了6输入1输出的BP神经网络结构,其隐含层选择了8个神经元。当传感器出现故障时,系统就根据传感器的所在位置和失效数据产生的时刻,将该时刻前一段时间的24组相应的输入输出数据对神经网络进行训练,调整神经网络的权值,逐步建立合理的BP神经网络模型。训练结束后,用该神经网络估算出该时刻传感器的真实值替代采样值,实现数据恢复。从前馈阶段开始,其算法的计算公式分别为:

开发板

2. 神经网络恢复器的设计

2.1 系统整体结构

在本文中,我们使用了线性阵列结构构架硬件神经网络,实现失效数据的预测。当发生数据失效时,直接读取该硬件输出数据替代原有传感器的数据,从而实现数据恢复的功能。在设计过程中,我们使用了串级结构实现神经网络功能,其系统结构如图1所示。其优点是仅通过增减处理单元数目来达到改变整个神经网络结构的目的,不需要更改同步时序控制电路,同时将系统对数据带宽的要求最小化。

开发板

整个系统由隐含层和输出层组成,神经网络输入层的功能在隐含层内实现。该隐含层由8个处理单元PE组成(PE1至PE8),所有的处理单元串联在一起,每个PE的两侧提供三个数据总线(chan1,chan2,chan3)以及三个数据有效标志信号(valid1, valid2, valid3)。隐含层中每个PE具有类似于神经网络中隐含层神经元的作用,执行相同的功能(正向传播和反传误差及权值的调整)。输出层由PE9 组成,基本结构与隐含层PE类似,实现输出层功能。

系统运行过程分为三个阶段,配置阶段,前馈阶段和反传更新阶段。在配置阶段主要是初始化查找表和每个PE中临时存放数据的寄存器,同时将初始的权值读入各自的权值存储器中。当配置结束后,进入前馈阶段。

在前馈阶段,系统将隐含层的PE1左侧valid1置1,PE1从左侧依次接收一组数据中的每一个输入数据。PE1在接受数据后即开始进行内部运算,并依次将接收的输入数据从chan1总线输出。当PE1的chan1有数据输出时,系统将PE1右侧的valid1置1,并把该值传递到PE2左侧的valid1。当PE2左侧valid1为1时,PE2开始接收PE1 的数据。与此类似,系统依次启动PE3至PE8 ,将输入数据传输到整个隐含层里。当一组输入数据输入结束时,PE1将开始接收下一组输入数据,并将此时的运算结果由chan2输出到下一个PE,此结果就是该组数据对一个隐含层神经元的激活结果。Chan2数据的传输过程与chan1一样。当PE8开始输出运算结果时,本设计将该结果由 chan2输出,并通过三态门连接到chan1总线,进而输入到输出层的PE9里(如图1)。PE9接收到数据后,实现输出层前馈阶段的所有功能。当输出层PE9输出完第一组数据时,将PE9右侧valid3置1,系统进入反传更新阶段。

当进入反传更新阶段时,系统期望值tj即该时刻氨气浓度由chan3总线反向输入到输出层的PE9。输出层的PE9接收数据后,通过计算得出自身的权值误差,进行权值更新,同时通过chan3输出公式(4)的计算结果δj。隐含层PE8接收到PE9的输出数据后进行权值误差计算,更新自身的权值,同时通过chan3数据总线依次将接收的δj依次反向传播,直至PE1接收到该数据。当PE1完成一组权值更新时,对应的该组数据的神经网络训练过程结束。

2.2 基本处理单元的设计

在本设计中,所有的运算都是通过基本处理单元PE实现,处在不同层的PE具有类似的结构,执行不同的功能。每个PE由基本运算单元PEA,查找表LUT,权值寄存器WT及临时寄存器REG组成。现以结构较复杂的隐含层PE的设计为例,其整体结构如图2所示,由前馈部分(FORWARD部分)和反传更新(BACKWARD部分)两个部分组成。其中PEA1和PEA2为计算单元,LUT1和LUT2为函数激活单元,MUX为数据选择单元,SHIFT为数据移位单元。

开发板

在本设计中,PEA1,PEA2单元主要实现输入数据与权值的乘积累加功能,由乘法器,累加器组成。计数器的数值为一组输入数据的个数。为了确保输入数据与对应的权值相乘,从寄存器里的读取缓存的输入数据和权值的过程均由计数器控制。累加器在每次进行累加后,将计数器的数值加1。当计数器复位时,累加器会将累加结果输出,然后对内部寄存器复位并重新开始累加。由于该单元中输入数及权值均为8位数,因此我们使用了8*8的布斯编码乘法器以及16位超前进位加法器和数据累加器。

本设计中的LUT单元为查找表单元,由ROM,移位寄存器,计数器及减法器组成,其中LUT1主要实现激活函数ƒ(Si),LUT2主要实现激活函数ƒˊ(Si)。查找表的数据通过C语言编程产生数据文件,其数据的宽度为8位数,该数据文件在配置阶段被预存入对应的ROM里查找。本设计为了减小规模,仅选取了S函数曲线第一象限上的16个点的数值作为查找表数据。根据S函数的曲线特点,我们将16个点的坐标分别取X=2i-1,i=1,2,3…16。此16个点的查找表中对应数值为公式ƒ(s)=255/(1+е-s/8)的整数部分。在使用查找表时,先根据输入数据的符号位判断数据的正负性。若为正,该数值即对应第一象限的点,通过移位计数,求出该输入对应的i的值,即数据在查找表ROM中的地址值,找到相应的数据;若为负,则为第二象限的点,必须先通过查找表找出该点在第一象限对称点的数值,然后根据S函数的对称性公式ƒ(s)=255-ƒ(–s)。由8位的减法器计算出该点的真实数值。MUX模块为一个多位数据选择器,它与临时寄存器共同实现数据的选择。临时寄存器由一个RAM组成,用来存储不能及时处理的数据。在使用MUX选择数据时,需先将所有输出的数据存入临时寄存器中,然后根据设定好的选择原则选择输出。SHIFT模块由移位寄存器构成,通过右移一位可以达到乘以一个λ的效果,从而实现神经网络学习率的控制。

本设计使用了Altera公司的QUARTUSII集成开发软件设计所有的硬件,选择了CYCLONE系列的EP1C6Q240C8芯片的开发板进行测试仿真,仿真结果如图3所示。需要说明的是,在设计中将输入数据放大了100倍,因此不需要进行浮点操作。Chan1为输入数据,chan2为隐层输出数据,chan3为反传数据,valid为总线有效信号。

开发板

3. 实验测试与结论

本文针对禽畜养殖场废气浓度检测中传感器的数据失效问题,在FPGA开发板上设计了一个基于BP神经网络的数据恢复器。该恢复器的最大工作频率为171.7MHZ,在调试阶段,使用了开发板的最高时钟频率40MHZ为其工作频率。为了评估恢复器的性能,我们以氨气(NH3)浓度检测过程中某一传感器的数据处理为例,采集了某畜舍三天的NH3的浓度数据及环境温度、相对湿度,风速等数据,通过三天采集的72组数据,对第三天的24组采样数据分别进行估算。实验结果表明,24组数据测量值与估算值的最大相对误差为7.83%,最小相对误差为0.09%,平均相对误差为3.13%(如图4所示,曲线为测量值,星号为估算值),证明了该设计基本满足实际应用的要求。

开发板

本文的创新点主要在三个方面:一是在对故障传感器进行数据预测时,引进了神经网络,并使用了FPGA硬件对该恢复器进行了实现。二是在设计神经网络恢复器时,使用了特殊的串级结构,减少了系统对带宽的要求,增加了该设计的可维护性。三是在实现查找表功能时,使用了函数对称性,减少了查找表的数据规模。使用了移位寄存器和计数器直接将输入数据转化为查找表地址,避免了占Cyclone芯片大量资源的基本数学运算。

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分