基于NIOS的湿度传感器数据处理RBF神经网络实现
   来源:现代电子技术     2021年01月18日 04:02

李建龙+陈向东+倪进权+谢冰青

摘 要: RBF神经网络具有较强的拟合能力和稳定性,得到了广泛的应用。以FPGA芯片为核心器件,设计实现RBF神经网络。利用SOPC Builder设计硬件架构,通过添加指令,在NIOS环境下利用C语言进行设计,这样就解决了利用Verilog或VHDL设计消耗资源多和软件模拟耗时多的问题。最后以Altera公司的Cyclone IV系列芯片作为验证器件,结果表明该方法实现简单,可靠性强,消耗资源少。

关键词: SOPC; NIOS; RBF神经网络; 欧氏距离; 高斯函数

中图分类号: TN711?34; TP332 文献标识码: A 文章编号: 1004?373X(2014)14?0103?04

Implementation of NIOS based RBF neural network for

processing of humidity sensor data

LI Jian?long1, CHEN Xiang?dong1, NI Jin?quan1, XIE Bing?qing2

(1. School of Information Science and Technology, Southwest Jiaotong University, Chengdu 610031, China;

2. School of Mathematics and Computer Engineering, Xihua University, Chengdu 610039, China)

Abstract: RBF neural network with fitting ability and stability has been widely used. Based on the FPGA chip as a core device, the RBF neural network is designed in this paper. The hardware architecture was designed by means of SOPC Builder, the added instructions and C language in NIOS environment. In this way, the problems existing in the design were solved, because they consume too many resources by using Verilog or VHDL to carry out the design and take much more time in software simulation. The Cyclone IV series chip of Altera Company was taken to perform the verification. The result shows that the method is simple, and has high reliability and less consumption of resources.

Keywords: SOPC; NIOS; RBF neural network; Euclidean distance; Gaussian function

0 引 言

径向基神经网络相对于BP神经网络具有最佳逼近和全局最优的性能,已在图像识别和曲线拟合得到广泛应用,采用专门定制的神经网络芯片成本高、灵活性差[1]。Alteral 公司开发的SOPC Builder是基于SOC和IP的思想进行的设计,集成了许多参数化的IP核,使得硬件设计变得相对简单。同时它也提供了完备的C语言头文件,隐藏了很多硬件细节,软件开发难度就会降低,用户也可以把自己设计的IP集成到SOPC Builder中,以实现重用[2]。本文设计实现基于NIOS Ⅱ的RBF神经网络继承了NIOS Ⅱ嵌入式处理器面向用户、可灵活定制的通用RISC嵌入式处理器特性,使得产品成本低、易用性、适应性和不会过时等优势,使得实现产品满足现在和今后的要求[3]。

1 RBF神经网络原理

1988年Broomhead和Lowe将RBF应用于神经网络设计[4],构成了RBF神经网络。RBF神经网络由输入层、隐含层、输出层三层构成。第一层为输入层,由源节点组成,是网络输入矢量;第二层为隐含层,隐含层的节点数由实际问题决定;第三层为输出层,是对输入做出的响应。输入层到隐含层是非线性映射,其激活函数为径向基函数;隐含层到输出层为线性映射。如图1所示[5]。

隐含层的节点就是一个神经元,其结构如图2所示[5]。径向基函数采用高斯(Gaussian)函数,其表达式为:

[Rx=exp-x-c22σ2] (1)

高斯函数的变量为输入与中心的欧氏距离,当输入越靠近中心时,隐含节点将产生较大的输出。由此看出网络具有很强局部逼近能力。

图1 RBF神经网络结构图

图2 神经元结构图

由于高斯函数是非线性的,用描述语言实现很难,使用软件模拟需要花费时间比较长。所以,在高斯函数实现过程中采用分段线性化的方法进行拟合,这样利用描述语言就很容易实现,高斯函数曲线关于y轴对称,可以先对x取绝对值,这样只要拟合x正半轴即可。高斯函数线性化采用求导区间划分法,然后取平均值作为斜率,这样有利于划分,拟合精度也相对较高,通过仿真和实际值比较如表1所示。

表1 Gaussian函数各区间逼近函数及误差

输出层实现从隐含层到输出节点的线性输出,即:

[yk=i=1mωikRix] (2)

RBF神经网络训练需要得出以下几个参数:基函数中心、隐含层阈值、隐含层到输出层权值、输出层阈值。

(1) 基函数中心的选取

径向基函数中心的选取方法有随机选取中心法、自组织选取中心法、有监督选取中心法和正交最小二乘法等,采用不同的方法,网络的学习算法也就不同[6]。本文为了简化学习算法、减少选取中心的时间,以样本为每个基函数的中心。

(2) 隐含层阈值

隐含层阈值是调整神经元的灵敏度,当输入权值为±b1时,径向基输出为0.5,这就决定了每个神经元输入区间所响应的输出宽度。因此,b1应足够大,使得径向基神经元来激活径向基神经元的输入区间,以致每个神经元在任意点总有相当大的输出,这使网络函数平滑和更好的在设计中输入量之间产生新的输入量。然而,b1也不应该特别大,以致每个神经元在重叠的输入区间都能产生有效的响应[5]。通常b1取值0.832 6。

(3) 隐含层到输出层权值及输出层阈值

从隐含层到输出层可以通过最小二乘法直接计算[7],以得到最小平方和误差的权值及阈值,其计算公式为:

[ωb×A1;ones=T] (3)

[ωb=T/A1;ones] (4)

2 SOPC硬件平台设计

2.1 SOPC硬件平台的建立

根据设计需求需要添加CPU,JTAG,PIO,SDRAM,EPCS,UART等IP核[8],如图3所示。

图3 SOPC软核构建

在添加以后还需进行地址分配和中断号分配,在这里构建的软核中以EPCS作为代码和变量存储器件,用SDRAM为代码运行存储器件。增加串口是为了方便手动修改和输入权值、阈值。

在顶层实体创建中还需要添加PLL、I/O,硬件使用的时钟为20 MHz,而CPU软核时钟设计为100 MHz,因此需要PLL进行倍频,并且也要为SDRAM产生相移的时钟信号。顶层实体如图4所示。

图4 顶层实体设计

2.2 定制指令的实现

本系统中对神经网络实现过程中的欧氏距离、乘累加和传输函数采用了定制指令的方法实现,用来减少用软件模拟实现过程中时间问题,定制指令需要在CPU核的custom instruction栏进行添加,添加后如图5所示。

图5 指令添加

操作指令的实现一个重点解决问题就是数的表示形式,本文采用了IEEE?754[9]浮点数运算标准,IEEE?754也被许多CPU和浮点运算器所采用。它定义了4种浮点数的表示形式,文中采用了32位单精度表示形式,包括1位符号位、8位指数位和23位小数位,其表示精度达到1.18×10-38,满足算法的设计要求,如图6所示。

图6 浮点数表示

欧氏距离[dist=x-w]实现过程中没有对其开根号,直接取他的平方值,即[dist2=x-w2],在传入传递函数时代入平方值,这样减少了欧氏距离的开根号和平方带来的复杂度和时间消耗,通过Modelsim仿真结果如图7所示,从数值输入到输出只需要6个时钟周期。

图7 径向基仿真

每个乘累加需要6个时钟周期,N个输入值在N*6个时钟周期后产生输出结果,仿真如图8所示。

激励函数是设计中另一个重点解决的问题,也是一个关键问题,激励函数的逼近能力关系到最终结果的误差大小。仿真结果如图9所示。

图8 乘累加仿真

图9 激励函数仿真

完成硬件设计以后在NIOS Ⅱ环境下建立软件工程[10],并对工程编译就会产生对应命令如下,这样就可以方便通过C语言调用。

#define ALT_CI_DISTANCE_INST_N 0x00000000

#define ALT_CI_DISTANCE_INST(A,B)

_builtin_custom_inii(ALT_CI_DISTANCE_INST_N,(A),(B))

#define ALT_CI_GAUSSIAN_INST_N 0x00000001

#define ALT_CI_GAUSSIAN_INST(A)

_builtin_custom_inii(ALT_CI_GAUSSIAN_INST_N,(A)

#define ALT_CI_MULT_ADD_INST_N 0x00000002

#define ALT_CI_ MULT_ADD_INST(A,B)

_builtin_custom_inii(ALT_CI_MULT_ADD_INST_N,(A),(B))

3 实验结果分析

该系统的验证使用了Altera公司的Cyclone IV系列的EP4CE30VE20C8 FPGA芯片,该芯片含有28 848个逻辑单元、329个引脚及其他丰富的专用硬核资源,并且在该芯片可以嵌入NIOS软核,进行FPGA嵌入式开发,完全满足系统设计硬件资源的需求。图10为系统设计占用资源情况。系统总共使用了6 855个逻辑单元,占总资源的24%。通过测试从数据输入到输出延时仅3 μs。

图10 系统资源使用情况

系统验证使用氧化石墨烯湿度传感器随温度漂移测得的24组温漂实验数据,选取其中6组数据作为系统验证值,其余18组数据作为网络训练样本,数据见表2。

表2 氧化石墨烯湿度传感器测量数据

通过在Matlab软件仿真和在FPGA开发板对RBF神经网络系统验证以后得到表3结果。

表3 Matlab仿真值和实验值及误差

通过表格分析可以看出,Matlab仿真可以得到误差较小的值,绝对误差小于0.3。而实验验证值绝对误差由于数值表示形式和位数的限制,以及激励函数逼近,致使误差结果变大。不过误差平均1%范围以内,满足设计需求。

4 结 语

本文介绍了一种在FPGA上实现RBF神经网络的方法。大多实现神经网络多采用Verilog或者VHDL语言编程,这相对难度较大,资源消耗量大,准确度低;或者采用软件模拟实现,这种方法实现难度相对简单,但每次输出耗时较多,并行性差。利用FPGA芯片在其上嵌入软核,构建硬件架构,通过Vorilog编写指令,添加到软核,在NIOS环境中利用C语言对其指令的调用和程序开发,这样软硬件结合实现的神经网络使得实现难度、资源消耗和速度达到一个均衡。

参考文献

[1] 谢真真,张肃宇.一种基于FPGA的硬件神经网络设计实现[J].科技广场,2011(4):6?9.

[2] 李兰英.NIOS Ⅱ嵌入式软核[M].北京:北京航空航天大学出版社,2006.

[3] 侯建军,郭勇.SoPC技术基础教程[M].北京:北京理工大学出版社,2008.

[4] 钟珞,饶文碧,邹承明.人工神经网络及其融合应用技术[M].北京:科学出版社,2007.

[5] MathWorks Corp. Radial basis functions [M]. [S.l.]: MathWorks, 2011.

[6] 李俊.硅压阻式智能压力传感器的温度补偿系统研究与实现[D].广州:华南理工大学,2011.

[7] 高隽.人工神经网络原理及仿真实例[M].北京:机械工业出版社,2003.

[8] Altera Corp. SOPC Builder user guide [M]. America: Altera Corp, 2010.

[9] ASNI/IEEE. Std 754?1985 IEEE standard for binary floating?point Arithmetie [S]. America: IEEE, 1985.

[10] Altera Corp. NIOS Ⅱ software developer's [M]. America: Altera Corp, 2011.

文章 神经网络 函数