发明内容
本发明要解决的技术问题是如何节约三角函数值测算的硬件资源消耗和计算周期。
为了解决这一技术问题,本发明提供了一种基于FPGA的待测角三角函数值的测算方法,包括如下步骤:
S1:检测得到任意待测角度的弧度值,并确认所需三角函数的类型;
S2:将步骤S1得到的数值和类型应用到预设的转换关系表,得到转换后角度值及符号标识;
所述转换关系表用以:
将原待测角度的数值转换到预设的造表区间内,得到所述转换后角度值;
设定一个符号标识,该符号标识用以确定三角函数值的正负;
S3:仿真对应的三角函数曲线,依次在该三角函数曲线上取若干定点,依据这些定点依次得到若干连续的拟合曲线,从而获得若干拟合曲线各自的函数式;
S4:将所述转换后角度值定位于其中一个拟合曲线的范围内;
S5:将步骤S2中得到的所述转换后角度值代入到步骤S4中定位的拟合曲线的函数式中,得到三角函数的数值;
S6:依据所述符号标识确定该三角函数数值的正负,最终得到三角函数值。
所述造表区间为[0,π/2]。
在所述步骤S3中,在该曲线上取若干定点时,以以下规则进行定点的选择:
a、相邻定点间的角度值间隔固定;
b、在所述造表区间的范围内取定点;
c、沿角度值从小到大的取值方向依次取点;
在取若干定点和得到若干连续的拟合曲线的过程中:
对于每一个拟合曲线:
先自起点起在三角函数的曲线上取m个定点,据此m个定点绘制一个拟合曲线;
然后,继续在三角函数的曲线上取定点,且自第m+1个定点起,将所取定点的角度值代入该拟合曲线和原三角函数曲线中,得到两个函数值;
进行函数值的比较;
若对于第n个定点的角度值,两个函数值之间的误差等于一个预设的判定值,则取该点为本拟合曲线的终点,且将其作为下一个拟合曲线的起点;
若对于第n个定点的角度值,两个函数值之间的误差大于该预设的判定值,则取第n-1个点为本拟合曲线的终点,且将其作为下一个拟合曲线的起点;
若对于第n个定点的角度值,两个函数值之间的误差小于该预设的判定值,则继续取下一个顶点进行计算和比较。
对于第一个拟合曲线,其起点的角度值为0。
相邻两个拟合曲线之间通过一个拟合点实现连续;在所述步骤S4中,具体包括如下步骤:
先分别得到转换后角度值对应的阶码以及各拟合点对应的阶码;
比较转换后角度值对应的阶码和各拟合点对应的阶码:
若转换后角度值对应的阶码的数值处于某两个相邻的拟合点对应的阶码之间,则将所述转换后角度值定位于该两个拟合点确定的拟合曲线的范围内;
若转换后角度值对应的阶码的数值与其中一个拟合点对应的阶码相同,则确认该转换后角度值位于与该拟合点相邻的一个拟合曲线的范围内,然后,再比较两者的尾数大小,进而将所述转换后角度值定位于其中一个拟合曲线的范围内。
所述拟合曲线的函数式为f=ax2+bx+c,在将步骤S:5中,以如下公式f=(ax+b)x+c,通过两次乘法和两次加法进行计算。
本发明还提供了一种基于FPGA的待测角三角函数值的测算系统,包括预处理单元、查表定位单元、计算单元和后处理单元;
所述预处理单元,用以将检测得到的数值和类型应用到预设的转换关系表,得到转换后角度值及符号标识;
所述转换关系表用以:
将原待测角度的数值转换到预设的造表区间内,得到所述转换后角度值;
设定一个符号标识,该符号标识用以确定三角函数值的正负;
所述查表定位单元,用以仿真对应的三角函数曲线,依次在该三角函数曲线上取若干定点,依据这些定点依次得到若干连续的拟合曲线,从而获得若干拟合曲线各自的函数式;
然后,将所述转换后角度值定位于其中一个拟合曲线的范围内;
所述计算单元,用以将转换后角度值代入到所述查表定位单元定位的拟合曲线的函数式中,得到三角函数的数值,再依据所述符号标识确定该三角函数数值的正负,最终得到三角函数值。
所述查表定位单元被配置成:在该三角函数曲线上取若干定点时,以以下规则进行定点的选择:
a、相邻定点间的角度值间隔固定;
b、在所述造表区间的范围内取定点;
c、沿角度值从小到大的取值方向依次取点;
对于每一个拟合曲线:
先自起点起在三角函数的曲线上取m个定点,据此m个定点绘制一个拟合曲线;
然后,继续在三角函数的曲线上取定点,且自第m+1个定点起,将所取定点的角度值代入该拟合曲线和原三角函数曲线中,得到两个函数值;
进行函数值的比较;
若对于第n个定点的角度值,两个函数值之间的误差等于一个预设的判定值,则取该点为本拟合曲线的终点,且将其作为下一个拟合曲线的起点;
若对于第n个定点的角度值,两个函数值之间的误差大于该预设的判定值,则取第n-1个点为本拟合曲线的终点,且将其作为下一个拟合曲线的起点;
若对于第n个定点的角度值,两个函数值之间的误差小于该预设的判定值,则继续取下一个顶点进行计算和比较。
相邻两个拟合曲线之间通过一个拟合点实现连续;所述查表定位单元被配置实现以下步骤:
先分别得到转换后角度值对应的阶码以及各拟合点对应的阶码;
比较转换后角度值对应的阶码和各拟合点对应的阶码:
若转换后角度值对应的阶码的数值处于某两个相邻的拟合点对应的阶码之间,则将所述转换后角度值定位于该两个拟合点确定的拟合曲线的范围内;
若转换后角度值对应的阶码的数值与其中一个拟合点对应的阶码相同,则确认该转换后角度值位于与该拟合点相邻的一个拟合曲线的范围内,然后,再比较两者的尾数大小,进而将所述转换后角度值定位于其中一个拟合曲线的范围内。
所述拟合曲线的函数式为f=ax2+bx+c,在所述后处理单元配置成以如下公式f=(ax+b)x+c,通过两次乘法和两次加法进行计算。
本发明提出了一种结合二次拟合的查表法,采用分段二次函数拟合的数值逼近方式,在同等精度下有效地减小了查找所需要存储的点数,并且充分利用了浮点数的加减乘除基本运算单元完整地实现了任意角度的基本三角函数的运算(正弦函数sinx、余弦函数cosx、正切函数tanx、余切函数cotx),同时硬件资源消耗与时钟周期数的综合性能上优于现有技术。此外,这种硬件实现方法非常灵活通用,可以根据需求实现不同精度、不同复杂函数运算的硬件实现。
具体实施方式
以下将结合图1至图3通过一个实施例及其拓展解释对本发明提供的一种基于FPGA的待测角三角函数值的测算方法和系统进行详细的描述,其为本发明一可选的实施例,可以认为,本领域的技术人员在不改变本发明精神和内容的范围内,能够对其进行修改和润色。
本实施例中的描述中的拟合曲线以二次拟合曲线为例进行介绍,不过其实本发明并不限于此
本实施例提供了一种基于FPGA的待测角三角函数值的测算方法,包括如下步骤:
S1:检测得到任意待测角度的弧度值,并确认所需三角函数的类型;
输入角度为以IEEE754标准表示的任意角度的弧度值,IEEE754标准的单精度浮点数表示形式如附图2所示。
S2:将步骤S1得到的数值和类型应用到预设的转换关系表,得到转换后角度值及符号标识;
所述转换关系表用以:
将原待测角度的数值转换到预设的造表区间内,得到所述转换后角度值;
设定一个符号标识,该符号标识用以确定三角函数值的正负;
其中,所述造表区间为[0,π/2]。步骤S2主要由预处理单元来实现。预处理单元主要是利用计算单元中的浮点数基本运算,将任意输入角度的弧度值转换到符合有效输入范围内的等效值。以正弦函数为例,预处理单元首先调用浮点数计算单元将输入角度转换到[-2π,2π],再利用对称性和三角函数关系将所有输入角度转换到[0,π/2]的正弦函数运算,并且根据转换的类型标记相应的符号标识(符号标识为1表示最终输出结果需要将符号位取反),具体转换关系如表1~表3所示。
表1正弦函数角度转换关系表
表2余弦函数角度转换关系表
表3正切/余切函数角度转换关系表
S3:仿真对应的三角函数曲线,依次在该三角函数曲线上取若干定点,依据这些定点依次得到若干连续的拟合曲线,从而获得若干拟合曲线各自的函数式;步骤S3主要由计算单元来实现;
S4:将所述转换后角度值定位于其中一个拟合曲线的范围内;
以上两个步骤由查表定位单元来实现,查表定位单元主要是将预处理单元转换后的输入角度对应的等效弧度值快速定位到最接近的二次拟合函数段中。它是该技术方案的重要单元,其核心是查找表生成算法和定位算法,分别对应步骤S3和S4。
对于步骤S3:
在所述步骤S3中,在该曲线上取若干定点时,以以下规则进行定点的选择:
a、相邻定点间的角度值间隔固定;
b、在所述造表区间的范围内取定点;
c、沿角度值从小到大的取值方向依次取点;
在取若干定点和得到若干连续的拟合曲线的过程中:
对于每一个拟合曲线:
先自起点起在三角函数的曲线上取m个定点,据此m个定点绘制一个拟合曲线;
然后,继续在三角函数的曲线上取定点,且自第m+1个定点起,将所取定点的角度值代入该拟合曲线和原三角函数曲线中,得到两个函数值;
进行函数值的比较;
若对于第n个定点的角度值,两个函数值之间的误差等于一个预设的判定值,则取该点为本拟合曲线的终点,且将其作为下一个拟合曲线的起点;
若对于第n个定点的角度值,两个函数值之间的误差大于该预设的判定值,则取第n-1个点为本拟合曲线的终点,且将其作为下一个拟合曲线的起点;
若对于第n个定点的角度值,两个函数值之间的误差小于该预设的判定值,则继续取下一个顶点进行计算和比较。
这里所称的预设的判定值为同一个值。
对于第一个拟合曲线,其起点的角度值为0。
在本实施例中,以正弦函数为例来阐述步骤S3:
以正弦函数为例,有y=sinx,取造表区间为(0,π/2),拟合精度为千分之一。在造表区间内,以0.0001为间距进行等距离划分,则有x[1]=0,x[2]=0.0001,x[3]=0.0002……x[15781]=1.5708,取定点(x[1],y[1])为查找表中第1个点,查找表中其余的点是通过matlab工具仿真得到。以点(x[1],y[1])为起点,点(x[11],y[11])(曲线拟合时要保证点的个数大于曲线的阶次,这里取拟合的点数至少为11个)为终点,将这11个点进行二次曲线拟合,得到二次曲线f=ax2+bx+c。当x取x[1]、x[2]、……、x[11]时,判断正弦曲线和二次曲线的相对误差的最大值是否小于0.001,此即为预设的判定值,若11个点代入时相对误差均小于0.001则取点(x[12],y[12])为终点,将这12个点进行二次曲线拟合,同样判断相应的相对误差的最大值与0.001的大小。依此类推,当以点(x[n],y[n])为终点,相应的相对误差的最大值等于0.001时,点(x[n],y[n])为查找表中的第2个点;相应的相对误差的最大值大于0.001时,点(x[n-1],y[n-1])为查找表中的第2个点。然后以点(x[n],y[n])或(x[n-1],y[n-1])为起点,用同样的方法可以求得查找表中的第三个点,以此类推可以求得查找表剩下的点。本实施例中,得到的查找表中的点为6个,再把端点(1.5708,1)作为查找表中的第7个点,则最后得到的查找表有7个点,由此确定的拟合曲线为6条。拟合结果如图3所示,所得的拟合点如表4所示,所得的二次拟合曲线的系数如表5所示。
表4正弦函数(0,π/2)内拟合点表(1‰精度)
表5正弦函数(0,π/2)内拟合曲线系数表(1‰精度)
对于步骤S4:
相邻两个拟合曲线之间通过一个拟合点实现连续;在所述步骤S4中,具体包括如下步骤:
先分别得到转换后角度值对应的阶码以及各拟合点对应的阶码;
比较转换后角度值对应的阶码和各拟合点对应的阶码:
若转换后角度值对应的阶码的数值处于某两个相邻的拟合点对应的阶码之间,则将所述转换后角度值定位于该两个拟合点确定的拟合曲线的范围内;
若转换后角度值对应的阶码的数值与其中一个拟合点对应的阶码相同,则确认该转换后角度值位于与该拟合点相邻的一个拟合曲线的范围内,然后,再比较两者的尾数大小,进而将所述转换后角度值定位于其中一个拟合曲线的范围内。
结合到具体的实施例,以下以正弦函数为例进行进一步阐述:
当转换后的角度值对应的等效弧度值x输入查表定位单元时,可以充分利用IEEE754标准下单精度浮点数的阶码和尾数的关系快速定位对应的拟合曲线。比如在正弦函数(0,π/2)内千分之一精度的拟合时,根据拟合点表4可以看到第2-第7个点的阶码分别是(0x79、0x7c、0x7d、0x7e、0x7f、0x7f)。首先将x的阶码与拟合点的阶码进行比较,如果阶码小于0x79,则直接利用拟合曲线1进行运算;如果阶码位于0x79与0x7c之间,则直接利用拟合曲线2进行运算;当x的阶码与拟合点的阶码相同时,则再比较相应的尾数大小,从而快速定位所需采用的拟合曲线,并减小比较过程的硬件资源消耗。
S5:将步骤S2中得到的所述转换后角度值代入到步骤S4中定位的拟合曲线的函数式中,得到三角函数的数值;其主要通过计算单元来实现;
计算单元作为一个通用基础单元,主要是IEEE754标准下单精度浮点数的加减乘除基本运算单元,可被其它单元重复调用执行,这就在保证硬件三角函数完整实现的基础上大大减少了硬件资源消耗。以正弦函数的二次拟合为例,将输入角度的等效弧度值x代入查表定位单元所确定的f=(ax+b)x+c进行运算,共需要复用2次乘法和2次加法,正切函数和余切函数的运算过程需要额外增加一次基本拟合过程和一次除法运算。
S6:依据所述符号标识确定该三角函数数值的正负,最终得到三角函数值。主要由后处理单元来实现,后处理单元主要用于确定输出结果的符号位并输出对应的运算结果,它将计算单元的拟合运算结果的符号位与预处理单元的符号标识位进行异或操作作为最终输出结果的符号位,将计算单元的拟合预算结果的阶码和尾数作为最终输出结果的阶码和尾数。
结合以上内容可以看出,本实施例其实还提供了一种基于FPGA的待测角三角函数值的测算系统,包括预处理单元、查表定位单元、计算单元和后处理单元;
所述预处理单元,用以将检测得到的数值和类型应用到预设的转换关系表,得到转换后角度值及符号标识;
所述转换关系表用以:
将原待测角度的数值转换到预设的造表区间内,得到所述转换后角度值;
设定一个符号标识,该符号标识用以确定三角函数值的正负;
所述查表定位单元,用以仿真对应的三角函数曲线,依次在该三角函数曲线上取若干定点,依据这些定点依次得到若干连续的拟合曲线,从而获得若干拟合曲线各自的函数式;
然后,将所述转换后角度值定位于其中一个拟合曲线的范围内;
所述计算单元,用以将转换后角度值代入到所述查表定位单元定位的拟合曲线的函数式中,得到三角函数的数值,再依据所述符号标识确定该三角函数数值的正负,最终得到三角函数值。
所述查表定位单元被配置成:在该三角函数曲线上取若干定点时,以以下规则进行定点的选择:
a、相邻定点间的角度值间隔固定;
b、在所述造表区间的范围内取定点;
c、沿角度值从小到大的取值方向依次取点;
对于每一个拟合曲线:
先自起点起在三角函数的曲线上取m个定点,据此m个定点绘制一个拟合曲线;
然后,继续在三角函数的曲线上取定点,且自第m+1个定点起,将所取定点的角度值代入该拟合曲线和原三角函数曲线中,得到两个函数值;
进行函数值的比较;
若对于第n个定点的角度值,两个函数值之间的误差等于一个预设的判定值,则取该点为本拟合曲线的终点,且将其作为下一个拟合曲线的起点;
若对于第n个定点的角度值,两个函数值之间的误差大于该预设的判定值,则取第n-1个点为本拟合曲线的终点,且将其作为下一个拟合曲线的起点;
若对于第n个定点的角度值,两个函数值之间的误差小于该预设的判定值,则继续取下一个顶点进行计算和比较。
相邻两个拟合曲线之间通过一个拟合点实现连续;所述查表定位单元被配置实现以下步骤:
先分别得到转换后角度值对应的阶码以及各拟合点对应的阶码;
比较转换后角度值对应的阶码和各拟合点对应的阶码:
若转换后角度值对应的阶码的数值处于某两个相邻的拟合点对应的阶码之间,则将所述转换后角度值定位于该两个拟合点确定的拟合曲线的范围内;
若转换后角度值对应的阶码的数值与其中一个拟合点对应的阶码相同,则确认该转换后角度值位于与该拟合点相邻的一个拟合曲线的范围内,然后,再比较两者的尾数大小,进而将所述转换后角度值定位于其中一个拟合曲线的范围内。
所述拟合曲线为二次拟合曲线,其函数式为f=ax2+bx+c,在所述后处理单元配置成以如下公式f=(ax+b)x+c,通过两次乘法和两次加法进行计算。
综上可见,本发明能推广到其它复杂函数在硬件系统中的求值。能直接完整地实现所有基本三角函数的硬件运算(正弦函数sinx、余弦函数cosx、正切函数tanx和余切函数cotx),且支持任意角度的运算。能根据运算精度要求变换查找表存储值,从而简单实现不同精度要求下的硬件三角函数求值。它充分利用浮点数的基本运算,在相同要求下(完整实现任意角度的基本三角函数硬件运算和千分之一精度)能做到硬件资源消耗比其它方法少。
本发明的优点在于:在同等精度下有效地减小了查找表所需要存储的点数,并且在充分利用了浮点数的加减乘除基本运算单元的基础上完整地实现了任意角度的基本三角函数的运算,同时硬件资源消耗与时钟周期数的综合性能上优于现有技术。此外,这种硬件实现方法非常灵活通用,可以根据需求修改查找表数值,从而实现不同精度、不同复杂函数运算的硬件实现。
此外,还须知,基于浮点数基本运算的拟合方式不限于二次拟合,可以是一次拟合、三次拟合等常用的拟合函数。浮点数的表示形式不限于IEEE-754标准,也可以是IEEE-754_1、IEEE-754_2等32位单精度浮点数表示形式。拟合的精度不限于千分之一,也可以是千分之五、万分之一等。
为了能有助于理解本发明,本实施例还具体阐述如下一些资料:
①IEEE754标准下的单精度浮点数表示形式
目前通用的浮点数字信号处理器大多采用IEEE的32位单精度浮点数格式,其格式包括符号位、阶码位和尾数位。以IEEE754标准的单精度浮点数格式为例,它的表示形式为:符号(s)占1位;阶码(e)占8位,视作无符号数(0<e<255),e有127的偏移,因此小数点实际移动位数等于e-127;尾数(f)为23位,对应定点数的数值部分,但是隐藏了其最高位1,且小数点“.”在阶码(e)的右边,表示的定点数为1.f。按照IEEE754单精度浮点数格式标准,浮点数的数值=(-1)^s×1.f×2^(e-127)。
②本硬件三角函数运算器的接口说明
本硬件三角函数运算器作为自主研发的控制芯片中的一个控制算法库子模块,控制算法库与自主研发的协处理器相连接,并复用其AHB主接口。本硬件三角函数运算器的模块接口说明如表6所示:
表6硬件三角函数运算器模块接口说明