一种三角函数的计算方法、模块及存储介质
文献发布时间:2024-05-31 01:29:11
技术领域
本发明涉及计算机技术领域,具体涉及一种三角函数的计算方法、模块及存储介质。
背景技术
三角函数的计算在工程运用十分频繁,如各种信号的解算。Cordic(CoordinateRotation Digital Computer)算法,即坐标旋转数字计算算法,可以将如三角函数的正余弦值等计算近似为一些列的加减法和移位运算的结果,便于直接在硬件电路上实现,应用广泛。
但由于有限的操作位数和迭代次数,Cordic算法在计算接近于0的小角度的正余弦值时,最大相对误差较大,可能超过10%。为提高计算精度,需要提出一种Cordic算法的优化算法,以解决Cordic算法在小角度的正余弦值,误差计算较大的技术问题。
发明内容
为了克服现有技术的不足,本发明的目的在于提供一种三角函数的计算方法,能够降低Cordic算法计算小角度的正余弦值的误差,将计算误差降低到期望值以下,提高计算精度。
为解决上述问题,本发明所采用的技术方案如下:一种三角函数的计算方法,包括如下步骤:
S1:将计算角度的值与多个预设的输入角度区间的端点值比较,判断计算角度落入哪一具体的输入角度区间;
S2:查询预设的参数表,获取计算角度在对应的输入角度区间下的初始迭代角和角度的数据格式;
S3:根据查询的初始迭代角和角度的数据格式,通过Cordic计算方法,对计算角度的三角函数值进行计算;
其中,所述参数表中,所述输入角度区间的端点值根据Cordic算法的绝对误差模型和期望相对误差计算获得,为当前参数对应的绝对误差的理论极值err_abs下,使相对误差不满足期望相对误差的最大输入角度,所述输入角度区间对应的数据格式和初始迭代角满足如下条件:(1)角度的数据格式的整数位数为满足对任意属于所述输入角度区间的计算角度,数据均不溢出的最小整数位数;(2)初始迭代角的值为满足使迭代角的累加和大于任一属于所述输入角度区间的计算角度的最小初始迭代角度;
所述Cordic算法的绝对误差模型的绝对误差的理论极值err_abs的计算公式如下所示:
err_abs=sin(A1+A2)+A3
A1=arctan(2
其中,n代表迭代次数,
相比现有技术,本发明的有益效果在于:由于Cordic算法的绝对误差受迭代次数,角度及向量坐标的存储位宽和n次迭代后的剩余角影响,本计算方法根据Cordic算法的绝对误差模型,对误差较大的小角度的区域进行分区,尽可能地减小计算小角度时的角度数据格式的整数位数,从而扩大角度数据格式的小数位宽度,提高角度量化存储过程中的存储精度,从而降低角度存储过程中累积的量化误差,降低绝对误差,从而降低相对误差。并且通过尽可能地减小计算小角度时的初始迭代角,从而降低迭代后的剩余角,进一步降低绝对误差,从而降低相对误差,提高计算精度。
上述的三角函数的计算方法,所述参数表的参数计算方法包括如下步骤:
A:将原始的数据格式和初始迭代角的值代入到Cordic算法的绝对误差模型中获得对应的绝对误差的理论极值,根据绝对误差的理论极值计算使相对误差大于等于期望相对误差的最大输入角度,该最大输入角度即为原始的数据格式和初始迭代角对应的输入角度区间的左端点;
B:计算最大输入角度对应的使数据不溢出的最小整数位数,该最小整数位数即为以该最大输入角度为右端点的输入角度区间所对应的数据格式的整数位数;
C:计算使迭代角的和的值大于该最大输入角度的最小初始迭代角度,该最小初始迭代角度即为以该最大输入角度为右端点的输入角度区间的初始迭代角;
D:将步骤B和步骤C中计算获得的新的数据格式和初始迭代角的值带入到Cordic算法的绝对误差模型中获得对应的新的绝对误差的理论极值,根据新的绝对误差的理论极值计算使相对误差大于等于期望相对误差的新的最大输入角度,该新的最大输入角度即为新的数据格式和初始迭代角对应的输入角度区间的左端点;
E:重复步骤B至D,直至角度的数据格式的整数位数无法再降低或者无法计算出新的最大输入角度。
上述的三角函数的计算方法,所述步骤A和D中,最大输入角度为arcsin(err_abs*100*Δ),其中err_abs为将最新的角度的数据格式和初始迭代角度带入到Cordic算法的绝对误差模型中计算获得的绝对误差的理论极值,Δ%为期望相对误差。
上述的三角函数的计算方法,所述步骤B中,最小整数位数为满足
上述的三角函数的计算方法,所述步骤C中,初始迭代角为arctan(2
上述的三角函数的计算方法,所述步骤S1中,若计算角度的值大于45°,则先通过三角函数变换,将计算角度变换至(0,45°]的范围内,再与多个预设的输入角度区间的端点值比较。
一种用于实施上述的三件函数的计算方法的三角函数计算模块,包括;存储介质,存储有预设的参数表、旋转伸缩系数的倒数及迭代旋转角度表;查询模块,用于根据输入的计算角度,查询所述存储介质中存储的所述参数表,获得输入的计算角度对应的角度的数据格式和初始迭代角;Cordic算法模块,用于根据所述查询模块查表获得的角度的数据格式和初始迭代角,对输入的计算角度进行Cordic计算,获得输入的计算角度所需的三角函数值。
一种存储介质,存储有计算机程序,所述计算机程序被设置为运行时,实现上述的三角函数的计算方法。
下面结合附图和具体实施方式对本发明作进一步详细说明。
附图说明
图1为Cordic算法的绝对误差模型的绝对误差的理论极值与实际绝对误差的比较图;
图2为本发明实施例的三角函数的计算方法的流程图;
图3为本发明实施例的参数表的计算方法的流程图;
图4为本发明实施例的计算方法与常规计算方法在相同条件下的误差仿真结果的比较图。
具体实施方式
下面详细描述本发明的实施例:
参照图2,本发明的实施例提供一种三角函数的计算方法,包括如下步骤:
S1:将计算角度的值与多个预设的输入角度区间的端点值比较,判断计算角度落入哪一具体的输入角度区间;
S2:查询预设的参数表,获取计算角度在对应的输入角度区间下的初始迭代角和角度的数据格式;
S3:根据查询的初始迭代角和角度的数据格式,通过Cordic计算方法,对计算角度的三角函数值进行计算;
其中,参数表中,输入角度区间的端点值根据Cordic算法的绝对误差模型和期望相对误差计算获得,为当前参数对应的绝对误差的理论极值err_abs下,使相对误差不满足期望相对误差的最大输入角度,输入角度区间对应的数据格式和初始迭代角满足如下条件:(1)角度的数据格式的整数位数为满足对任意属于所述输入角度区间的计算角度,数据均不溢出的最小整数位数;(2)初始迭代角的值为满足使迭代角的累加和大于任一属于所述输入角度区间的计算角度的最小初始迭代角度,以保证在对应的数据格式和初始迭代角下,Cordic算法可以正常实施。
该计算方法,根据输入的计算角度,根据查询的参数表来确定角度数据的存储数据格式,以及迭代的初始迭代角的度数。由于参数表的输入角度区间的端点值根据上述的绝对误差模型和期望相对误差计算获得,端点值左侧的区间的角度采用端点值右侧的角度数据格式和初始迭代角计算的误差会大于期望相对误差。通过为端点值左侧的计算满足条件(1)约束的最小整数位数和满足条件(2)约束的最小的初始迭代角度,并在计算端点值左侧区域的计算角度时采用对应的数据格式和初始迭代角,即可降低该输入角度区间内的角度计算的绝对误差,从而降低相对误差,实现在有限迭代次数及数据位宽下小角度计算时的计算精度的提高。
其中Cordic算法,为通过去除向量旋转过程中的cosθ,将向量的旋转简化为伪旋转,使得任一向量的角度θ都可以由另一向量经过几次伪旋转后近似获得,从而将向量的计算简化为多次的迭代移位和加减计算的一种公知算法。在n次的迭代过程中,变量的更新公式如下:
x(n)=x(n-1)-d(n-1)*y(n-1)*2
y(n)=y(n-1)+d(n-1)*x(n-1)*2
z(n)=z(n-1)-d(n-1)*cons(n-1)(3)
其中cons(n-1)=arctan(2
由于实际应用中,通常采用定点数计算,数据位宽有限,一般为16bits或24bits,以降低对硬件资源的消耗,然而这样也会引入量化误差,导致计算精度降低。在Cordic算法的误差分析方面,Y.H.Hu在"The quantization effects of the CORDIC algorithm",IEEE Trans.Signal Process.,vol.40,no.4,pp.834-844,Apr.1992.的文章中,以及SungT Y和Sung Y H在The Quantization Effects of CORDIC Arithmetic for DigitalSignal Processing Applications[C].The 21st Workshop on CombinatorialMathematics and Computation Theory,2004:16-25.的文章中均对Cordic算法的误差来源进行分析,Cordic算法的误差主要来源于三个方面:(1)有限的迭代次数导致z(n)的值不能精确为0,即在迭代次数迭代旋转下,最后一次旋转后的向量不能与目标向量完全重合,有剩余角度存在;(2)数据位宽有限,迭代过程中,角度数据定点存储量化产生的不可避免的量化误差的累积;(3)数据位宽有限,迭代过程中向量的横纵坐标的数据定点存储量化产生的不可避免的量化误差的累计。由此,在本发明实施例的三角函数的计算方法中,将Cordic算法的绝对误差来源分为剩余角度误差A1、角度误差A2和xy误差A3三个部分。其中A1是Cordic算法在有限次的迭代后,z(n)的值是趋近于0,而非精确为0所带来的不可避免的误差;A2是迭代过程中,由于固定的数据位宽而引起的旋转角度的累加值z(n),以及迭代旋转角度的值cons(n-1)在存储过程中的量化误差累积而形成的误差,A3则是由于固定的数据位宽而引起的向量的横纵坐标x(n)和y(n)在存储过程中的量化误差累积而形成的误差。在迭代次数、数据格式确定的情况下,可以计算出每次角度数据和坐标数据的存储的最大量化误差,以及多次迭代后的最大剩余角度,由此可以推算出出A1、A2和A3的理论极值,以及总的绝对误差的err_abs的理论极值,如下式所示:
err_abs=sin(A1+A2)+A3(4)
A1=arctan(2
其中
表1绝对误差模型仿真数据格式表
由上述Cordic算法的绝对误差模型可知,绝对误差主要来源于有限次的迭代次数导致z(n)不能精确为0,以及有限的数据位宽导致角度和坐标值存储时的量化误差的累积。在固定的迭代次数下,由于迭代旋转过程中,迭代旋转的角度会逐渐减小,只要减小第一个迭代角的值,那么最后一个迭代角的取值就会相应减小,最后迭代的z(n)的值就能更接近0,迭代计算的角度与实际要计算的角度之间的剩余角就会减小,从而降低误差A1。由于计算过程中,横纵坐标的值不会大于1,所以横纵坐标的整数位固定为1,在数据位宽固定的情况下,横纵坐标存储时的小数位数固定,没有优化空间。但计算小角度时,角度的量级较小,不需要那么多的整数位来保证数据不会溢出,计算小角度时可以根据输入的计算角度减小存储时的整数位数,从而提高存储时的小数位数,即可减小角度数据存储时的量化误差,从而提高算法计算小角度时的计算精度。根据上述的绝对误差模型,计算在当前角度数据格式和初始迭代角下的绝对误差极值,即可推算出在当前角度数据格式和初始迭代角下由于计算角度接近绝对误差极值而导致相对误差超过相对期望误差的最大输入角度,对最大输入角度以左的区间的角度数据存储的整数位数和初始迭代角以条件(1)和(2)为约束进行优化,即可保证Cordic算法可以实施的同时降低该区间内计算角度的绝对误差,从而降低相对误差。新的角度的数据格式和初始迭代角又可以计算出新的理论绝对误差的极值,从而推断出达不到期望相对误差的新的最大输入角度,重复不断对达不到期望相对误差的输入角度区间进行角度的整数位数和初始迭代角的优化,直至无法再进行优化为止,即可使大部分的计算角度的相对误差小于期望相对误差,甚至使所有计算角度的相对误差恒下雨期望相对误差,从而在有限资源下提高Cordic算法的精度。
参照图3,参数表中各个输入角度区间的端点值,以及各个输入角度区间对应的数据格式的整数位数和初始迭代角的具体计算方法步骤如下所示:
A:将原始的数据格式和初始迭代角的值代入到Cordic算法的绝对误差模型中获得对应的绝对误差的理论极值,根据绝对误差的极值计算使相对误差大于等于期望相对误差的最大输入角度,该最大输入角度即为原始的数据格式和初始迭代角对应的输入角度区间的左端点;
B:计算最大输入角度对应的使数据不溢出的最小整数位数,该最小整数位数即为以该最大输入角度为右端点的输入角度区间所对应的数据格式的整数位数;
C:计算使迭代角的和的值大于该最大输入角度的最小初始迭代角度,该最小初始迭代角度即为以该最大输入角度为右端点的输入角度区间的初始迭代角;
D:将步骤B和步骤C中计算获得的新的数据格式和初始迭代角的值带入到Cordic算法的绝对误差模型中获得对应的新的绝对误差的理论极值,计算使相对误差大于等于期望相对误差的新的最大输入角度,该新的最大输入角度即为新的数据格式和初始迭代角对应的输入角度区间的左端点;
E:重复步骤B至D,直至角度的数据格式的整数位数无法再降低或者无法计算出新的最大输入角度。
以迭代次数为10次,数据位宽16bits的情节为例子,由于对于任一第一象限外的角度,都会先经过三角函数变换至第一象限后再进行Cordic算法计算,所以实际计算角度的区间范围为(0,45°],角度的整数位最少需要为6位,才可保证数据不溢出,固初始的角度的数据格式为1位符号位、6位整数位和9位小数位,横纵坐标的数据格式固定为1位符号位、1位整数位和14位小数位,初始迭代角为45°。假设期望的相对误差err_rel<1%,则对应的,绝对误差需要满足err_abs<1%*sinθ,则当θ>arcsin(err_abs*100)时,相对误差才能符合期望,将初始的参数带入到上述的绝对误差模型中,可以求得绝对误差err_abs<2e-3,由此可以求的参数表的第一个端点值arcsin(2e-3*100)≈11°,对于该端点值右侧,即大于11°的角度,无需降低角度数据格式的整数位数和初始迭代角,也可以使相对误差基本小于1%,需要对小于等于11°的角度的计算角度确定新的整数位数和初始迭代角,以提高该区间内的计算角度的计算精度。
为保证Cordic算法的正常进行,角度存储过程中数据不能溢出,且初始迭代角经过连续的逆时针旋转后的角度值需要能大于需要计算角度,所以对于小于等于11°的计算角度而言,只要数据格式和初始迭代角能使该区间内最大的角度11°满足上述约束即可。对于11°的角度而言,为保证计算过程中数据不会溢出,需要
同时,为了使十次逆时针迭代旋转后的角度的值需要能大于任一小于等于11°的计算角度,即十次迭代旋转角度的和需要大于11°。设初始迭代角为arctan(2
表2十次迭代角的和与n0的关系表
在16bits的位宽,以及迭代次数10次的约束下,最后获得的参数表如表3所示。根据输入的计算角度落在的区间,按照对应的数据格式和初始迭代角去进行Cordic运算即可使绝大部分的小角度的计算结果的相对误差恒定小于期望的1%。
表3本发明实施例的参数表
图4为采用本发明实施例的三角函数的计算方法与常规Cordic算法,在相同的迭代次数与数据位宽下,计算(0,15°)区间的角度的误差仿真图,由图可以看出,本发明事实例的计算方法,相对于传统的方法,可以明显降低相对误差,在大于1°的角度范围内,相对误差始终小于1%以下,显著提升了对于接近0的小角度的计算精度。
可以理解的是,本发明实施例的三角函数的计算方法,也可以用于正切函数、反切函数、反正弦函数和反余弦函数的计算,具体的参数表的计算过程以及函数值的计算过程与正弦和余弦值的计算过程相似,在此不做赘述。
本发明的实施例还提供一种三角函数计算模块,包括存储介质、查询模块和Cordic算法模块。其中存储介质存储有预设的参数表、旋转伸缩系数的倒数及迭代旋转角度表,参数表包括由上述方法计算获得的输入角度区间及各输入角度区间对应的数据格式和初始迭代角。查询模块用于根据输入的计算角度,查询存储介质中存储的参数表,获得输入的计算角度对应的角度的数据格式和初始迭代角。Cord ic算法模块用于根据查询模块查表获得的角度的数据格式和初始迭代角,对输入的计算角度进行Cord ic计算,获得输入的计算角度的正弦值和余弦值。其中Cord ic算法模块,应该包括若干加法器,用于存储旋转迭代后的向量的横纵坐标以及迭代旋转角的累加值的移位寄存器,其具体实施为领域内的公知常识,在此不做赘述。迭代旋转角度表存储有各arctan(2
本发明的实施例还提供一种存储介质,存储有计算机程序,该计算机程序被调用运行时,可以实现上述的三角函数的计算方法。
需要注意的是,在本发明的描述中,如有涉及到方位描述,例如上、下、前、后、左、右等指示的方位或位置关系的,均为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造或操作,不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一或第二等的,只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
本发明的描述中,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。
- 一种主播相似度的计算方法、装置、设备和存储介质
- 一种文本相似度计算方法、装置、电子设备及存储介质
- 一种文本相似度计算方法、装置、电子设备及存储介质
- 一种功率自适应计算方法、系统及存储介质
- 一种光模块参数配置方法、装置、设备及存储介质
- 一种基于三角函数的风电机组尾流计算方法、装置及存储介质
- 三角函数计算方法、装置、设备及存储介质