在现今DSP 软件工程设计中,广泛采用高级语言(如C 语言)直接调用三角函数进行计算。然而,汇编语言的稳定性、可读性和执行效率均优于高级语言,因缺少可供直接调用的三角函数库,其开发周期长,且计算精度难以保证,在工程中推广较少。本文就基于DSP 汇编语言,提出一种高精度三角函数算法。
随着现代科技的高速发展, 带三角函数的大型DSP 复杂算法被广泛应用于各个领域,高级语言(如C语言)编程实现时, 其稳定性、可读性、执行效率均不及汇编语言。然而,汇编算法没有标准的三角函数库,需软件开发人员自己编写,这就延长了软件的开发周期,同时,其计算精度难以得到保证。本文就基于DSP 汇编语言, 提出一种占用资源低且精度较高的线性查表法,实现三角函数,并通过MATLAB仿真与传统查表法进行对比分析。
二、查找表建模
假设以等步长step 定义了点数为N 的三角函数查找表,表中地址n 处的值为( x0,y0),若要计算某x 处的三角函数值y,用传统查找表实现, 即近似于地址n 处的查表值y0。其查找生成方式为: TAB_X(n)=Fx( n*step),n=0,1,2.N-1。其中TAB_X 为三角函数表, Fx 代表相应的标准三角函数。
而用线性查找表实现,即近似于( x0,y0)点切线上x处所对应的值y’。设切线的斜率为C,则用公式可表示为:y≈y’=y0+C ×=y0+C* (x-x0 )
由公式可知,线性查找表需要包含x0 处的三角函数值y0 和切线斜率C,因此,采取y0 值与C 值交替存放方式,即为:TAB_X(n)=Fx( n*step),n=0,2,4.。 N-2;TAB_X(n)=Fc( n*step),n=1,3,5.。 N-1 。其中Fc 代表斜率函数,其对应关系见表1。
三、工程实现方法
对正弦和余弦函数,其函数本身与切线斜率正好互补,因此可共用一张查找表。此外,因正弦和余弦函数互余,可通过或将其定义域映射到0~ /4。对反三角函数,其计算的值域范围为0~ /2,随着x0 值的增加,其斜率值单调递增,这将会导致图1 中的y’值逐渐偏离y 值,增大误差。因此,采取将反三角函数/4~/2 的值域映射到/4~0 的值域中进行计算。其中,反正弦、反余弦、反正切函数分别通过、、进行映射,这样,反正弦和反余弦函数的定义域范围为0~0.707,反正切函数的定义域范围为0~1。以正弦函数查找表为列,其实现算法如下:
从表2 中看出,相同点数时的线性查表法计算精度要比传统查表法高出2 个数量级以上。随着查找表点数的增加,线性查表法的计算精度将会越来越优于非线性查表法。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !