基于FPGA硬件设备快速计算指数函数的方法及装置与流程

文档序号:16996621发布日期:2019-03-02 01:25阅读:903来源:国知局
基于FPGA硬件设备快速计算指数函数的方法及装置与流程

本发明涉及fpga开发技术领域,尤其涉及基于fpga硬件设备快速计算指数函数的方法及装置。



背景技术:

随着计算机网络的普及,互联网给人们的日常工作、学习和生活带来了极大的便利,但是计算机和设备随时会遭受到恶意入侵的威胁,严重影响了网络的安全性。入侵检测作为一种主动保护策略,受到了国内外越来越多人的关注。

入侵检测系统通过收集和分析网络数据,检测系统中的异常行为,通过积极响应,在网络系统受到危害之前进行入侵拦截并响应。由于支持向量机(supportvectormachine;简称svm)能够有效地处理非线性数据,对样本数量的依赖性较弱,基于svm的入侵检测系统成为一个研究热点。虽然支持向量机的软件实现具有较高的准确率,但是不能满足实时嵌入式系统的要求。在嵌入式入侵检测系统中,需要使用特殊的专用硬件结构来满足实时性、低功耗性的要求。

在对非线性数据进行处理时,基于svm的入侵检测系统采用高斯核函数(公式(1))把非线性数据映射到高维空间,从而找到对应的超平面,对网络中的异常行为进行识别。对整个入侵检测系统而言,高斯核函数的计算会占用大量的时间,入侵检测系统的实时性就会受到影响,有可能导致系统已经受到攻击,但是入侵检测系统还没有将异常行为识别出来,从而导致对设备等的保护失败的情况发生。高斯核函数的计算过程中很重要的一个部分就是指数函数的计算。因此,一种快速计算指数函数的方法在入侵检测系统中就显得尤为重要。

k(x,y)=exp(||x-y||2/(2σ2))(1)

目前,计算指数函数的方法主要有查表法,泰勒展开法,坐标旋转数字计算(coordinaterotationdigitalcomputer;简称cordic)法等。其中查表法在计算需要的精度较小时可以满足条件,但当需要的计算精度变大时,会需要大量的硬件资源存储指数函数的值;泰勒展开法需要很多乘法单元,计算较慢;cordic法(参考“volderj.e.,thecordictrigonometriccomputingtechnique,iretransactionsonelectroniccomputers,1959,330–334.”)是一种用于计算指数函数等硬件较难实现的复杂函数的方法。它的基本思想是在坐标系中不断地旋转迭代某些特殊的角度,逐渐逼近最终的结果。该方法的缺点在于:计算过程需要较多的迭代次数,在硬件实现时带来较大的时延。因此对于实时性要求比较高的场景而言,存在很大的局限性。

针对cordic算法的一些改进算法包括:anguita提出了一种基于cordic算法的免乘法的计算方式(参考“anguitad,pischiuttas,ridellas,etal.feed-forwardsupportvectormachinewithoutmultipliers[j].ieeetransactionsonneuralnetworks,2006,17(5):1328-1331.”),以及sarciada对这个算法进行硬件实现(参考“sarciadajg,riverahl,jiménezm.cordicalgorithmsforsvmfpgaimplementation[c]//independentcomponentanalyses,wavelets,neuralnetworks,biosystems,andnanoengineeringviii.internationalsocietyforopticsandphotonics,2010,7703:77030g.”),他们对原方法进行简化,将二阶范数改成一阶范数,将e改为2,但迭代的策略没有改变。

唐文明等人采用区间压缩的方法(参考“唐文明,刘桂雄.指数函数cordic算法的fpga定点化技术[j].华南理工大学学报(自然科学版),2016,44(7):9-14.”),实现收敛域的扩张,可以将cordic算法计算指数函数的输入值扩展到任意输入值。但是只是对输入值的取对数化简,并没有减少对数运算环境中的迭代次数和迭代方法。

moroz等人提出了一种单迭代等式的方式(参考“morozl,samotyyv.thecordicmethodofcalculatingtheexponentialfunction[j].czasopismotechniczne,2018,2018(volume4):119-126”),对原有的计算方法进行简化,减少计算所产生的能耗,主要是将输入数据分为三个部分,分别进行处理,但是针对cordic算法的部分基本与原来的方法一致。



技术实现要素:

现有技术中采用cordic算法计算指数函数时,因计算过程需要较多的迭代次数,而在fpga上,迭代操作是无法并行实现的,必须逐步完成,较多的迭代操作在硬件实现时带来较大时延的问题,对于入侵检测系统而言,则需要较高的实时性和较短的延时,因此需要使用较少的周期完成指数函数的计算。鉴于此,本发明提供一种基于fpga硬件设备快速计算指数函数的方法及装置。

一方面,本发明提供一种基于fpga硬件设备快速计算指数函数的方法,该方法包括:

步骤1、初始化双曲线坐标系下cordic算法中迭代运算的x值和校模因子k值;并根据输入的待计算指数函数确定迭代运算的z值;

步骤2、初始化查找表,所述查找表包括检索值i,以及与所述检索值i对应的反双曲正切值、比较值和校模因子k值;

步骤3、将z的绝对值与查找表中的所有比较值进行并行比较,得到掩码,根据所述掩码得到检索值i;

步骤4、在查找表中获取与所述检索值i对应的反双曲正切值;根据上一次迭代运算的计算结果x、z和k值,以及对应的反双曲正切值进行迭代运算,更新x、z和k值;

步骤5、若|z|>0.001,则重复执行步骤3至步骤4;若|z|≤0.001,则执行步骤6;

步骤6、根据更新后的x、z和k值计算得到ez的值。

进一步地,所述步骤2具体为:

根据式(7)计算得到初始反双曲正切值atanhi,并对初始反双曲正切值进行线性组合,使得组合后的相邻两反双曲正切值之间的差值小于预设阈值,得到最终反双曲正切值,所述最终反双曲正切值包括初始反双曲正切值atanhi和线性组合双曲正切值

根据式(8)计算得到比较值:

其中,atanhn表示查找表中的第n项反双曲正切值。

根据式(9)计算得到校模因子的值:

其中,in表示检索值i中的迭代索引值。

进一步地,所述步骤3具体为:

将z的绝对值与查找表中的所有比较值进行并行比较;

若比较值小于z的绝对值,则将与所述比较值对应的比特位的掩码置1;若比较值大于z的绝对值,则将与所述比较值对应的比特位的掩码置0;

根据反双曲正切值的线性组合值对得到的掩码进行编码,得到检索值i。

进一步地,所述步骤4中的根据上一次迭代运算的计算结果x、z和k值,以及对应的反双曲正切值进行迭代运算,更新x、z和k值具体为:

按照式(10)更新x值:

按照式(11)更新z和k值:

其中,m、n和l分别表示检索值i中所含有的迭代索引值i1、i2和i3,当迭代索引值不为0时,公式中含有对应项;当迭代索引值为0时,公式中不包含对应项。

进一步地,所述步骤6具体为:

将更新后的x、z和k值作为xend、zend和kend值,按照公式(12)计算得到指数函数ez的值:

ez=kend(xend+zend*xend)(12)。

另一方面,本发明提供一种基于fpga硬件设备快速计算指数的装置,该装置包括:

第一初始化模块,用于初始化双曲线坐标系下cordic算法中迭代运算的x值和校模因子k值;并根据输入的待计算指数函数确定迭代运算的z值;

第二初始化模块,用于初始化查找表,所述查找表包括检索值i,以及与所述检索值i对应的反双曲正切值、比较值和校模因子k值;

第一比较模块,用于将z的绝对值与查找表中所有的比较值进行并行比较,得到掩码,根据所述掩码得到检索值i;

迭代运算模块,用于在查找表中获取与所述检索值i对应的反双曲正切值;根据x、z和k值,以及对应的反双曲正切值进行迭代运算,更新x、z和k值;

第二比较模块,若|z|>0.001,则将z值输入至第一比较模块;若|z|≤0.001,则将更新后的x、z和k值输入至计算模块;

计算模块,用于根据更新后的x、z和k值计算得到ez的值。

进一步地,所述第二初始化模块具体用于:

根据式(7)计算得到初始反双曲正切值atanhi,并对初始反双曲正切值进行线性组合,使得组合后的相邻两反双曲正切值之间的差值小于预设阈值,得到最终反双曲正切值,所述最终反双曲正切值包括初始反双曲正切值atanhi和线性组合双曲正切值

根据式(8)计算得到比较值:

其中,atanhn表示查找表中的第n项反双曲正切值。

根据式(9)计算得到校模因子的值:

其中,in表示检索值i中的迭代索引值。

进一步地,所述第一比较模块具体用于:

将z的绝对值与查找表中的所有比较值进行并行比较;

若比较值小于z的绝对值,则将与所述比较值对应的比特位的掩码置1;若比较值大于z的绝对值,则将与所述比较值对应的比特位的掩码置0;

根据反双曲正切值的线性组合值对得到的掩码进行编码,得到检索值i。

进一步地,所述迭代运算模块具体用于:

按照式(10)更新x值:

按照式(11)更新z和k值:

其中,m、n和l分别表示检索值i中所含有的迭代索引值i1、i2和i3,当迭代索引值不为0时,公式中含有对应项;当迭代索引值为0时,公式中不包含对应项。

进一步地,所述计算模块具体用于:

将更新后的x、z和k值作为xend、zend和kend值,按照公式(12)计算得到指数函数ez的值:

ez=kend(xend+zend*xend)(12)。

本发明的有益效果:

本发明提供的基于fpga硬件设备快速计算指数函数的方法及装置,不采用按照固定顺序的方法,而是按照“贪心”原则,将比较值的间隔缩短到预设阈值以下,同时每次最大程度地选择最大的旋转角度,有效减少算法的迭代次数。然后使用近似等式,把|z|≤0.001作为迭代的结束条件,并使用此时的z值作为最后一次迭代的旋转角度值,在保证计算精度的前提下极大地减少了迭代的次数,减少资源消耗,有利于减少指数函数的计算的时间,使高斯核函数的计算更快,满足入侵检测系统实时性的要求。

附图说明

图1为本发明实施例提供的基于fpga硬件设备快速计算指数函数的方法的流程示意图;

图2为本发明实施例提供的基于fpga硬件设备快速计算指数函数的装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的基于fpga硬件设备快速计算指数函数的方法的流程示意图。如图1所示,该方法包括以下步骤:

s101、初始化双曲线坐标系下cordic算法中迭代运算的x值和校模因子k值;并根据输入的待计算指数函数确定迭代运算的z值;

s102、初始化查找表,所述查找表包括检索值i,以及与所述检索值i对应的反双曲正切值、比较值和校模因子k值;

s103、将z的绝对值与查找表中的所有比较值进行并行比较,得到掩码,根据所述掩码得到检索值i;

s104、在查找表中获取与所述检索值i对应的反双曲正切值;根据x、z和k值,以及对应的反双曲正切值进行迭代运算,更新x、z和k值;

s105、若|z|>0.001,则重复执行步骤s103至步骤s104;若|z|≤0.001,则执行步骤s106;

s106、根据更新后的x、z和k值计算得到ez的值。

由上述实施例可以看出,本发明主要基于以下基本原理:

第一,本发明提出的改进算法按照贪心的原则,即每次选择的查表项能够让z以最快的方式趋近于0,最大限度地减少迭代次数。

第二,将计算过程分为两个部分:迭代部分和输出部分。迭代部分的计算方法与原算法(cordic算法)的计算方法相同;输出部分直接将迭代过程的z作为最后一次的旋转角度,计算并输出最终的x的迭代值,使用这种方式,一方面可以在保证精度的情况下减少迭代的次数,另一方面减少硬件资源的消耗,从而更加适合于嵌入式系统。

在上述实施例的基础上,本发明的又一实施例具体包括以下步骤:

s201、初始化迭代运算中的参数值x值;

具体地,原cordic算法的计算过程为:第一步:将输入的z值分解为多个值相加的形式,即z=∑ξi。根据双曲正弦函数与双曲余弦函数的和的展开公式(公式(2)),每次旋转一个角度,将双曲正弦函数和双曲余弦函数的计算化简为从某个固定的值逐步逼近到待计算的结果。

θ表示基值,ξ表示需要旋转的角度,(θ+ξ)表示经过旋转迭代之后的结果。将其作为下一次旋转的基值。因此可以对双曲正弦函数和双曲余弦函数提出公因式,得到基值与旋转角度的关系式,如公式(3)所示。

为方便硬件的计算,将旋转角度设置为特殊的角度,即ξ=tanh-1(2-i),这样就可以把乘法操作转化为移位操作。在旋转过程中,令x=coshθ,y=sinhθ,k=coshξ,其中k为校模因子,是一个仅与旋转角度有关的常数,因此可以作为最后的修正值,最终得到迭代公式,如公式(4)所示。

其中zi表示当前的角度值与待求的值z的差值,di表示旋转角度的旋转方向。每次的迭代将常量k提出,最后使用k对计算结果进行修正。因此上述迭代公式可以进一步化简得到公式(5)。

第二步:根据cordic在双曲坐标系下的计算公式,为满足迭代序列收敛的要求,迭代序列i的取值从第4项开始,即当i=sn(sn=3sn-1+1,s1=4,n∈z+)时,需要重复迭代,即i=1,2,3,4,4,…,13,13,..40,40…。迭代后的最终结果如公式(6)所示:

根据公式(6),当x=1,y=0时,可以得到最终的xend和yend是与双曲正弦函数和双曲余弦函数直接相关的函数。

本步骤参考双曲线坐标系下原cordic算法中迭代运算公式(式(6))对参数的初始化值进行改进。根据式(6)可知:

当x=1,y=1时,得到最终的xend和yend是双曲正弦函数和双曲余弦函数的和。并且由于迭代过程中x和y的值一直相同,这样最后的迭代结果就可以化简为k*xend=(x*cosh(z)+x*sinh(z)),k为校模因子的迭代值。因此可以去掉变量y,只保留一个输入x,并初始化x0=1。

s202、由于需要根据检索值对校模因子k进行迭代相乘,因此初始化k0=1;

s203、初始化查找表。根据式(7)计算得到初始反双曲正切值atanhi,并对初始反双曲正切值进行线性组合(例如atanh1+2+3的值为atanh1+atanh2+atanh3=0.549306+0.255413+0.125657=0.930376),使得组合后的相邻两反双曲正切值之间的差值小于预设阈值(可设为0.1),得到最终反双曲正切值,所述最终反双曲正切值包括初始反双曲正切值atanhi和线性组合双曲正切值根据式(8)计算得到比较值;根据式(9)计算得到校模因子的值:

其中,atanhn表示查找表中的第n项反双曲正切值,in表示检索值i中的迭代索引值。

最终得到的查找表如表1所示。

表1反双曲正切值、比较值和校模因子k值的查找表

s204、将z的绝对值与查找表中的所有比较值进行并行比较;若比较值小于z的绝对值,则将与所述比较值对应的比特位的掩码置1;若比较值大于z的绝对值,则将与所述比较值对应的比特位的掩码置0;根据反双曲正切值的线性组合值对得到的掩码进行编码,得到检索值i。

具体地,可以预先生成对应上述查找表的编码表,如表2所示。

表2编码表

s205、根据s204得到的检索值i,以及上一次迭代运算的计算结果xi,按照式(10),得到更新后的xi+1;根据上一次迭代运算的计算结果zi、ki和对应的反双曲正切值,按照式(11),得到更新后的zi+1和ki+1;其中,x0=1,z0=输入的待计算指数函数的自变量z值:

其中,m、n和l分别表示检索值i中所含有的迭代索引值i1、i2和i3,当迭代索引值不为0的时候,公式中含有对应项;当迭代索引值为0时,公式中不包含对应项。

s206、根据近似等式当z较小时,可以把z直接当作旋转的角度,而不需要计算反双曲正切值。因此当|z|≤0.001时,将z作为最后一次计算的旋转角度进入s207进行计算;否则把s205计算得到的x、z和k作为新的输入,代替上一次计算所使用的x、z以及k的值,并返回s204和s205重新进行计算。

s207、将更新后的x、z和k值作为xend,zend和kend值,按照公式(12)计算得到ez的值:

ez=kend(xend+zend*xend)(12)

最后,可以根据检测系统的不同需求,以及不同的应用环境,对整个系统的数据位宽、迭代结束条件、比较表中线性组合的内容进行修改,从而实现对计算精度、系统延时、资源消耗的灵活修改,使整个计算方式应用于多种不同的场景之中。

由上述实施例可知,本发明实施例提供的基于fpga硬件设备快速计算指数函数的方法,不采用按照固定顺序的方法,而是按照“贪心”原则,将相邻比较值之间的间隔缩短到0.1以下,同时每次最大程度地选择最大的旋转角度,有效减少算法的迭代次数。然后使用近似等式,把|z|≤0.001作为迭代的结束条件,并使用此时的z值作为最后一次迭代的旋转角度值,在保证计算精度的前提下极大地减少了迭代的次数,减少资源消耗,有利于减少指数函数的计算时间,更快得到高斯核函数的计算结果,满足入侵检测系统实时性的要求。

下面以计算e0.5的值为例,本发明的计算过程如下所示:

s301、根据公式(6)可得,初始化x0=1,z0=0.5。

s302、根据初始化条件,初始化k0=1。

s303、根据反双曲正切函数,双曲余弦函数以及公式(7)初始化得到查找表。

s304、把z=0.5与查找表中的compare值进行比较,计算得到的掩码为0_0000_0011_1111_1111_1111,并根据反双曲正切值的线性组合值对掩码进行编码,得到编码为0x220,对应迭代索引值i1=2,i2=2,i3=0。

s305、使用i1=2,i2=2,i3=0进行计算,查表得到对应的反双曲正切值=0.510826,输入x和z的值,按照式(10)、(11)计算得到新的x和z的值,其中z计算后的结果为-0.010826。

s306、使用i1=2,i2=2,i3=0进行计算,查表得到对应项k为1.066650,根据公式(11)计算得到k的迭代值为1*1.066650=1.066650。

s307、判断z的绝对值大于0.001,使用x、z和k值作为新的输入值返回s304,重新进行计算。

s308、经过四次迭代计算后,得到z的值为0.000895,判断z的绝对值小于0.001,进入s309。

s309、根据迭代结束得到的值,即x=1.5382,z=0.000895,k=1.0709。使用公式(12)计算得到e0.5=1.64873。准确值为1.64872,误差为0.0006%。

本发明指数函数的的迭代过程的计算方式与原算法计算指数函数的迭代计算过程相同,但是在每次的迭代过程中,迭代索引值并不是按照既定的规则进行递增,而是通过与查找表中的所有比较值进行比较,查找最近的比较值项,将比较值之间的差值缩小到0.1,进一步降低迭代次数。

分析上述计算过程可知,本发明算法需要迭代4次就可以结束,而原始算法需要迭代15次。由此可以看出,采用本发明的迭代方式和迭代结束条件,可以减少73%的迭代次数。本发明在不增加计算复杂度的情况下,极大地减少了迭代的次数,缩短了指数函数的计算时间,使整个系统满足低延时、高实时性的要求。

图2为本发明实施例提供的基于fpga硬件设备快速计算指数函数的装置的结构示意图,该装置包括:第一初始化模块201、第二初始化模块202、第一比较模块203、迭代运算模块204、第二比较模块205和计算模块206。

其中,第一初始化模块201用于初始化双曲线坐标系下cordic算法中迭代运算的x值和校模因子k值;并根据输入的待计算指数函数确定迭代运算的z值;第二初始化模块202用于初始化查找表,所述查找表包括检索值i,以及与所述检索值i对应的反双曲正切值、比较值和校模因子k值;第一比较模块203用于将z的绝对值与查找表中所有的比较值进行并行比较,得到掩码,根据所述掩码得到检索值i;迭代运算模块204用于在查找表中获取与所述检索值i对应的反双曲正切值;根据x、z和k值,以及对应的反双曲正切值进行迭代运算,更新x、z和k值;第二比较模块205用于判断z值大小,若|z|>0.001,则将z值输入至第一比较模块203;若|z|≤0.001,则将更新后的x、z和k值输入至计算模块206;计算模块206用于根据更新后的x、z和k值计算得到ez的值。

本发明提供的基于fpga硬件设备快速计算指数函数的装置,不采用按照固定顺序的方法,而是按照“贪心”原则,将比较值的间隔缩短到预设阈值以下,同时每次最大程度地选择最大的旋转角度,有效减少算法的迭代次数。然后使用近似等式,把|z|≤0.001作为迭代的结束条件,并使用此时的z值作为最后一次迭代的旋转角度值,在保证计算精度的前提下极大地减少了迭代的次数,减少资源消耗,有利于减少指数函数的计算的时间,使高斯核函数的计算更快,满足入侵检测系统实时性的要求。

在上述实施例的基础上,所述第二初始化模块具体用于:

根据式(7)计算得到初始反双曲正切值atanhi,并对初始反双曲正切值进行线性组合,使得组合后的相邻两反双曲正切值之间的差值小于预设阈值,得到最终反双曲正切值,所述最终反双曲正切值包括初始反双曲正切值atanhi和线性组合双曲正切值

根据式(8)计算得到比较值:

根据式(9)计算得到校模因子的值:

其中,atanhn表示查找表中的第n项反双曲正切值,in表示检索值i中的迭代索引值。

在上述各实施例的基础上,所述第一比较模块具体用于:

将z的绝对值与查找表中的所有比较值进行并行比较;

若比较值小于z的绝对值,则将与所述比较值对应的比特位的掩码置1;若比较值大于z的绝对值,则将与所述比较值对应的比特位的掩码置0;

根据反双曲正切值的线性组合值对得到的掩码进行编码,得到检索值i。

在上述各实施例的基础上,所述迭代运算模块具体用于:

根据上一次迭代运算的计算结果xi,按照式(10),得到更新后的xi+1:

根据上一次迭代运算的计算结果zi、ki和对应的反双曲正切值,按照式(11),得到更新后的zi+1和ki+1:

其中,m、n和l分别表示检索值i中所含有的迭代索引值i1、i2和i3,当迭代索引值不为0时,公式中含有对应项;当迭代索引值为0时,公式中不包含对应项。

在上述各实施例的基础上,所述计算模块具体用于:

将更新后的x、y、z和k值作为xend,yend,zend和kend值,按照公式(12)计算得到指数函数ez的值:

ez=kend(xend+zend*xend)(12)。

需要说明的是,本发明各实施例提供的装置是为了实现上述方法实施例的,其功能具体可参考上述方法实施例,此处不再赘述。

由上述各实施例可以看出,本发明主要基于以下基本原理:

第一,本发明提出的改进算法按照贪心的原则,即每次选择的查表项能够让z以最快的方式趋近于0,最大限度地减少迭代次数。

第二,将计算过程分为两个部分:迭代部分和输出部分。迭代部分的计算方法与原算法(cordic算法)的计算方法相同,但是把x=1,y=1作为原算法的初始值,由于x和y迭代过程中数值相同,因此对删除y的计算结构,仅仅保留x这一个输入;输出部分直接将迭代过程的z作为最后一次的旋转角度,计算并输出最终的x的迭代值,使用这种方式,一方面可以在保证精度的情况下减少迭代的次数,另一方面减少硬件资源的消耗,从而更加适合于嵌入式系统。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1