摘要: 提出了模糊CMAC网络的一种基于FPGA的硬件实现方法。首先,分析了模糊CMAC网络的结构与算法,并以MATLAB仿真为依据,得到模糊CMAC网络的FPGA实现所需的参数;在此基础上,对模糊CMAC网络进行硬件模块划分,基于VHDL实现了各硬件模块的功能描述,并对模块结构进行了优化;最后,在特定的FPGA器件上实现了模糊CMAC网络。测试结果表明:该模糊CMAC网络硬件实现具有速度快、精度高的特点,且占用较少的硬件资源,是SOPC中实现模糊CMAC网络模块的一种有效方法。 关键字:模糊CMAC网络; FPGA; VHDL; 函数辨识
1 引言
在非线性动态系统的在线辨识中,由于实时性的要求,常规的递推辨识算法和卡尔曼滤波等串行算法难以达到预期效果。自从Albus提出一种模拟小脑学习机构的小脑模型关节控制器CMAC (Cerebellar Model Articulation Controllers)以来[1][2] ,CMAC以其局部泛化和收敛速度的优势得到广泛关注[3][4],迄今已广泛用于函数逼近、模式识别与机器人控制等领域。但随着CMAC维数的增加,其权存储空间将呈几何级数增加,这给该算法的硬件实现增加了难度,在一定程度上也阻碍了其实际应用。
模糊CMAC(Fuzzy CMAC)将模糊逻辑引入CMAC网络,它结合了神经网络具有学习能力和模糊逻辑长于表达近似与定性知识的优点,不仅具有CMAC的优点,而且存储空间小、学习精度高、可以连续量输入、无需量化、避免了CMAC网络的哈稀映射对权值收敛的影响。近年来,关于模糊CMAC网络已有一定的研究[5][6][7],但仅停留在软件仿真,基于硬件实现尚无报道,这成为了模糊CMAC网络发展的瓶颈。由此,本文基于FPGA完成了模糊CMAC网络的硬件实现。步骤如下:基于MATLAB软件仿真,得到硬件实现和测试所需要的参数;对模糊CMAC网络进行硬件模块划分和优化;基于VHDL语言描述、FPGA硬件实现模糊CMAC网络;测试基于FPGA实现的模糊CMAC网络。
2模糊CMAC网络的结构、学习算法及其仿真
2.1 模糊CMAC[1]网络的结构
模糊CMAC网络的结构如图1所示,分为五层:输入层、模糊化层、模糊相联层、模糊后相联层、输出层。
(1)输入层: 该层的各节点与输入向量的各分量xj相连,将输入值x=(x1,x2,…,xn)T传递到下一层。
(2)模糊化层:模糊化层的每个节点对应着一个语言变量,它完成输入的隶属度函数计算,常用的隶属度函数有铃型函数、三角形函数、梯形函数、Z型函数等。
(3)模糊相联层:该层与模糊化层相连,各个节点进行模糊运算,如模糊与、模糊乘等,以得到相应的点火强度。本文采用模糊乘运算。
(4)模糊后相联层:此层完成点火强度的归一化计算,具有与模糊相联层一样的节点数。如式(1)所示。
(1)
(5)输出层:对于单输出情况,该层完成归一化点火强度与网络权值的加权线性和,直接得出清晰化输出值。如式(2)所示。
(2)

图1 模糊CMAC神经网络结构图
2.2 模糊CMAC网络的学习算法
根据2.1节的模糊CMAC网络结构,本文采用改进的LMS算法,如式(3)所示。此学习算法简单,易于硬件实现。
(3)
其中yd为期望输出,y为实际输出,β为学习率,m为点火强度不为零的个数。
2.3 模糊CMAC网络用于函数学习的MATLAB仿真
本文选择一维函数y=sin(x) x∈[0,6]作为函数逼近对象,输入样本在[0,6]内取25个点 ,每个点的间距为0.25,和与之对应的一维函数y=sin(x)的输出组合成为25对学习样本。为了便于硬件实现,网络的隶属度函数采用三角形函数,对应于12个语言变量,如图2所示。

图2 三角形隶属度函数

图3 模糊CMAC逼近y=sin(x)

图4 累加误差收敛图
根据2.1和2.2节提出的模糊CMAC网络结构及学习算法,经MATLAB仿真,得到以下学习结果:模糊CMAC网络训练11次后达到收敛,累加误差为0.1616,平均误差为0.0065。图3、图4分别为相应的模糊CMAC的函数逼近曲线和相应的误差收敛曲线。对学习结果作泛化能力测试:在x∈[0,6]内取76个点(每个点的间距为0.08),得到的平均泛化误差为0.0066,说明此模糊CMAC网络学习精度高,收敛速度快,且有很好的泛化能力。
3模糊CMAC网络的硬件实现及优化
模糊CMAC网络经MATLAB仿真后,一方面得到了FPGA实现该网络时所需要的参数,另一方面为FPGA实现后的测试提供了依据。
3.1模糊CMAC网络硬件模块划分
本文提出的基于VHDL语言描述、FPGA实现的模糊CMAC网络,可以划分为以下几个模块:模糊化层模块、模糊相联层模块、模糊后相联层模块、权学习算法及权输出模块、输出层模块。为了便于在QuartusⅡ平台上进行测试,还需附加样本模块和误差模块。
模糊化层模块:每个输入对应两个非零值输出,即隶属度值中不为零的个数为2,它们的和为1。这样,模糊相联层、模糊后相联层就可以省去,因为模糊化层的输出就是归一化点火强度。
权学习算法及权输出模块是重点也是研究的难点,它的时钟为主时钟的2倍频,这样在主时钟的一个周期下,完成权值更新和权值输出2个过程。此模块由用户自定义完成,没有涉及到QuartusⅡ自带模块。
输出模块:此模块的作用为完成式(2)的工作,y为模糊CMAC网络的实际输出。
误差模块:此模块执行的功能为每次循环(每次共25个样本)结束后获得累加误差,用于与MATLAB仿真时得到的误差相比较,用于验证此模糊CMAC网络实现的正确性。
另外,各模块在运算时,由于要用到乘法等,所以各模块的字长并不相同,在各模块组合成系统时,需添加截位模块(文中截位模块没有列出)。图5为模糊CMAC网络系统模块电路图。

图5 模糊CMAC网络系统硬件模块电路图
3.2模糊CMAC网络硬件模块结构优化
神经网络执行方式是并行的,而并行处理数据也是FPGA的一大优点,两者相结合,将能发挥各自的优势,即可以大大提高硬件化神经网络的执行速度。由于本文采用的模糊子集为12个,为了保证并行性,一般情况下,权学习算法及权输出模块需分成12个子模块同时执行(如图6(a)所示),这样一来,将会消耗很大的LEs资源。但是,如果12个子模块串行执行的话,又会降低系统的速度与性能。考虑到每次隶属度值只有2个为非零值,即针对每个样本,只有2个权需要学习,所以,本文提出通过增加一个判断部分和一个地址变量(包含在图5的模糊化层中),使12个权学习算法及权输出子模块压缩成为只有2个(如图6(b)所示),而这2个子模块对于每个样本来说,都要进行数据处理。而原本12个子模块的情况下,对于某个样本,有10个处于“空闲”状态,这也就是器件资源浪费的主要原因。压缩为2个子模块后,它们每次更新与输出的权所对应的权数组的位置就各不相同了。经过优化,此结构既保持了FPGA执行数据并行性的优点,又没有降低神经网络的速度,但节省了FPGA器件资源。

图6(a) 权学习算法及权输出子模块图(12个) 图6(b)权学习算法及权输出子模块图(2个)
3.3模糊CMAC网络硬件实现测试
模糊CMAC网络的FPGA实现测试以MATLAB仿真为指导。由2.3节MATLAB仿真的结果,模糊CMAC网络在第11次时收敛,累加误差为0.1616。而在QuartusⅡ 4.2版本下的测试结果为第12次时收敛(图7所示),累加误差为2621,由于此值代表的是2整 14小,所以实际值为2621/2^14=0.1600,与MATLAB仿真结果基本相符,证明了此FPGA实现的模糊CMAC网络算法是正确的,效果也是理想的。
在硬件模块结构优化前后,器件资源的使用情况如下(器件为Stratix系列的EP1S10F780C6):
优化前:Total logic element:1900/10570 (18%) 优化后:Total logic element:1589/10570 (15%)
Total memory bits:448/920448(<1%) Total memory bits:448/920448(<1%)
DSP block 9-bit elements :48/48(100%) DSP block 9-bit elements: 8/48(16%)
由此可见,优化效果很明显,器件的LEs和DSP block都有了很大的下降,尤其是后者,这使器件集成进更多的逻辑功能成为可能。


图7 基于FPGA的模糊CMAC 在Quartus Ⅱ下的测试结果
4 结论
本文提出了基于FPGA硬件实现的模糊CMAC网络。它以MATLAB仿真为依据,得到FPGA实现与测试时所需要的参数,然后对网络进行模糊划分与优化,进而基于VHDL语言描述、FPGA硬件实现了模糊CMAC网络,最后对其进行测试,验证了此硬件实现方法的可行性与准确性。
在硬件模块划分时,在功能不变的情况下对模块结构进行了优化,从而降低了FPGA器件资源的利用率。当把本文提出的模糊CMAC作为用户自定义模块、用于SOPC实现系统时,文中提出的模块优化方案就显得尤为重要,因为在构建SOPC时就需要占用一定的器件资源,而为了能在SOPC中集成进更多的用户功能模块,在不改变各模块的功能情况下,尽量压缩各模块所占用的资源是十分重要的。
参考文献:
[1] Albus J.S.,A new approadh to manipulator control:The cerebellar model articulation controller (CMAC),ASME J.Dynamic Systems,Measurement,Control,pp. 1975,220-227.
[2] Albus J.S.,Data storage in cerebellar model articulation controller(CMAC), ASME J.Dynamic Systems,Measurement,Control,pp. 1975,228-233.
[3] Wong Y.F. and Sideris A.,Learning convergence in cerebellar model articulation controller,IEEE Trans.Neural Networks , vol.3, pp. 1992,115-121.
[4] Lin C.S. and Chiang C.T.,Learning convergence of CMAC technique, IEEE Trans. Neural Networks , vol.8 , no.6 , pp1281-1292, 1997.
[5] 邓志东,孙增圻,张再兴.一种模糊CMAC神经网络.自动化学报.1995,21 (3):288-294.
[6] 周旭东,王国栋. 模糊小脑模型神经网络.自动化学报.1998,28(2):173-178.
[7] 俞洪,俞金寿. 一种新型的模糊CMAC网络的研究及应用.化工自动化及仪表.2003,30 (3):28~32.
本课题得到国家自然科学基金项目(60474030)的资助。
|