CN111666064A - 基于cordic的三角函数循环迭代求解方法和装置 - Google Patents
基于cordic的三角函数循环迭代求解方法和装置 Download PDFInfo
- Publication number
- CN111666064A CN111666064A CN202010494171.XA CN202010494171A CN111666064A CN 111666064 A CN111666064 A CN 111666064A CN 202010494171 A CN202010494171 A CN 202010494171A CN 111666064 A CN111666064 A CN 111666064A
- Authority
- CN
- China
- Prior art keywords
- angle
- iteration
- precision
- floating point
- rotation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000004364 calculation method Methods 0.000 claims description 19
- 230000003321 amplification Effects 0.000 claims description 9
- 238000003199 nucleic acid amplification method Methods 0.000 claims description 9
- 230000000295 complement effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/548—Trigonometric functions; Co-ordinate transformations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Abstract
本发明提出一种基于CORDIC的三角函数循环迭代求解方法,包括以下步骤:步骤S1:根据待求解的输入角θ所在象限确定当前角z0的角度和坐标值;步骤S2:将当前角z0向输入角θ通过多次迭代旋转,生成新角z1,迭代旋转直至新角z1与输入角θ重叠或新角z1满足精度要求;步骤S3:获取迭代后新角z1的余弦值和正弦值,并将余弦值和正弦值转化为高精度浮点数结果输出。本发明提出的精度可控三角函数求解方法,通过有效位数的判断选择继续迭代或直接输出,保证了预设浮点数的有效位宽能够用尽,极大地缩短了高精度运算的时间;同时对旋转角过程进行了优化和改进,解除了每次迭代必须旋转固定角的限制,从而使精度大大增加。
Description
技术领域
本发明涉及三角函数计算方法,尤其涉及一种基于CORDIC的三角函数循环迭代求解方法和装置。
背景技术
三角函数是基本初等函数之一,传统上计算三角函数和其它一些硬件不易实现的函数,一般使用查表法、多项式展开或近似的方法。这些方法不能兼顾速度、精度、简单性等方面的要求。Volder于1959年在美国航空控制系统的设计中提出CORDIC(CoordinateRotational Digital Computer,坐标旋转计算机)算法。其基本思想是用一系列与运算基数相关的角度的不断偏摆,从而逼近所需旋转的角度。
在电路实现中,CORDIC迭代方程从算法本身入手,将复杂的算法分解成一些在硬件中容易实现的基本算法,如加法、移位等,从而使得这些算法在硬件上可以得到较好的实现。由于该算法是一种规则化的算法,它满足了硬件对算法的模块化、规则化的要求,因此CORDIC算法可以充分发挥硬件的优势,利用硬件的资源,从而实现硬件与算法相结合的一种优化方案。因此,现阶段CORDIC算法的研究非常活跃,无非都在追求高速、准确以及灵活的极致。
在较低精度要求下,现阶段的CORDIC算法能够通过增加迭代次数增加输出结果精度,但无法确定输出结果的有效数字,即同样的输出数位宽中,在输出数越小的情况下,有效数字就越少。例如求接近于的角度的余弦值,或接近于0的角度的正弦值。在大批量的三角函数计算中,为少量特殊数需要增加所有数的迭代次数无疑是在时间和资源上的双重浪费。因此大批量的计算往往无法在高速和高精度上同时达到需要的目标。
综上,目前现有的CORDIC算法技术在工程应用中仍有一定的局限性,主要归结为以下几点不足:
第一,由于每次迭代必须旋转对应旋转角的限制,在有高精度要求的工程中可能无法达到需要的精度。
第二,对数值较小的输出数,有效数字较小,以浮点数形式输出时没有用尽有效数位,可能会对后续计算造成精度上的影响。
第三,在精度要求不高的情况下能增加迭代次数增大精度,但同时会增加资源消耗,在大批量计算中降低计算效率。高速和高精度无法同时满足。
发明内容
本发明提供了一种在工程计算中基于CORDIC算法,降低了迭代次数有效的提高了运算速度和精度的三角函数求解方法和装置。采用本发明的方法和装置,可以降低工程计算的硬件需要,降低运算消耗,提高精度。当在硬件电路或CPU等运算装置中,运算程序检测到运算单元(或者运算单元自身检测到)正在进行三角函数求解时,调用本发明方法或装置进行三角函数求解。这里的工程运算指的是需要通过FPGA、CPU等计算单元进行的运算,而非单纯数学运算。
具体而言本发明提供了一种在工程计算中基于CORDIC的三角函数循环迭代求解方法,其特征在于,所述三角函数求解方法包括以下步骤:
步骤S1:根据待求解的输入角θ所在象限确定当前角z0的角度和坐标值;
步骤S2:将所述当前角z0向所述输入角θ通过多次迭代旋转,生成新角z1,迭代旋转直至所述新角z1与所述输入角θ重叠或所述新角z1满足精度要求;
步骤S3:获取迭代后所述新角z1的余弦值和正弦值,并将所述余弦值和正弦值转化为高精度浮点数结果输出。
更进一步地,在步骤S1中,所述输入角θ位于第一象限时,所述当前角z0和坐标值(x0,y0)的值为:
所述输入角θ位于第二象限时,所述当前角z0和坐标值(x0,y0)的值为:
所述输入角θ位于第三象限时,所述当前角z0和坐标值(x0,y0)的值为:
所述输入角θ位于第四象限时,所述当前角z0和坐标值(x0,y0)的值为:
更进一步地,在步骤S2中,还包括以下步骤:
步骤S21:将所述当前角z0与所述输入角θ的大小进行比较,所述当前角z0<输入角θ时作逆时针旋转生成旋转角z',所述当前角z0>输入角θ时作顺时针旋转生成所述旋转角z';每次迭代旋转使迭代次数i数值加1,所述迭代次数i初始值为1;
步骤S22:将所述当前角z0和所述旋转角z'分别与所述输入角θ做差进行比较,若|z'-θ|<|z0-θ|,则所述当前角z0进行旋转,并计算旋转后生成所述新角z1及坐标(x1,y1);反之则所述当前角z0不作旋转,并计算未旋转的所述新角z1及坐标(x1,y1);
步骤S23:所述新角z1等于所述输入角θ时,即可停止迭代;
所述新角z1不等于所述输入角θ时,则通过设定所述迭代次数i在各数值时,所述新角坐标值x1、y1的大小进行判断精度要求,满足精度要求则可以停止迭代,不满足则将所述新角z1作为所述当前角z0再次进行迭代,重复步骤S21-S23,直到满足停止条件。
更进一步地,在步骤S21中,所述当前角z0作逆时针旋转生成所述旋转角z'的角度和坐标为:
所述当前角z0作顺时针旋转生成所述旋转角z'的角度和坐标为:
更进一步地,步骤S23中,所述精度要求包括单精度浮点数迭代上限、单精度浮点数精度要求、双精度浮点数迭代上限和双精度浮点数精度要求;
所述新角z1的迭代次数i和坐标值x1、y1满足所述单精度浮点数迭代上限和单精度浮点数精度要求的标准为:
(6)i=51;
所述新角z1的迭代次数i和坐标值x1、y1满足所述双精度浮点数迭代上限和双精度浮点数精度要求的标准为:
(6)i=80。
还提供了一种基于CORDIC的三角函数循环迭代求解装置,其特征在于,所述三角函数求解装置包括迭代控制模块和定转浮模块,迭代控制模块包括初始化单元、循环迭代单元和控制单元;
所述初始化单元用于根据待求解的输入角θ所在象限确定当前角z0的角度和坐标值,并记录所述循环迭代单元迭代次数i;
所述循环迭代单元用于将所述当前角z0向所述输入角θ通过多次迭代旋转生成新角z1;
所述循环迭代单元输入端分别与所述初始化单元的输出端和控制单元的输出端连接;
所述控制单元与所述循环迭代单元连接,用于判断所述新角z1是否与所述输入角θ重叠或所述新角z1是否满足精度要求;
所述控制单元判断所述新角z1不满足精度要求,则将其返回至循环迭代单元输入端以进行下一次循环迭代;
所述定转浮模块用于获取所述新角z1的余弦值和正弦值,并将所述余弦值和正弦值转化为高精度浮点数结果输出。
更进一步地,所述循环迭代单元将所述当前角z0与所述输入角θ的大小进行比较,所述当前角z0<输入角θ时作逆时针旋转生成旋转角z',所述当前角z0>输入角θ时作顺时针旋转生成所述旋转角z';
所述循环迭代单元将所述当前角z0和所述旋转角z'分别与所述输入角θ做差进行比较,若|z'-θ|<|z0-θ|,则所述当前角z0进行旋转,并计算旋转后生成所述新角z1及坐标(x1,y1);反之则所述当前角z0不作旋转,并计算未旋转后生成所述新角z1及坐标(x1,y1)。
更进一步地,所述循环迭代单元将所述当前角z0作逆时针旋转生成所述旋转角z'和坐标为:
所述循环迭代单元将所述当前角z0作顺时针旋转生成所述旋转角z'和坐标为:
更进一步地,所述精度要求包括单精度浮点数迭代上限、单精度浮点数精度要求、双精度浮点数迭代上限和双精度浮点数精度要求;
所述新角z1的迭代次数i和坐标值x1、y1满足所述单精度浮点数迭代上限和单精度浮点数精度要求的标准为:
(6)i=51;
所述新角z1的迭代次数i和坐标值x1、y1满足所述双精度浮点数迭代上限和双精度浮点数精度要求的标准为:
(6)i=80。
更进一步地,所述定转浮模块包括xn定转浮单元和yn定转浮单元;
所述xn定转浮单元和yn定转浮单元采用相同配置,均包括移位器、乘法器、余弦累乘结果FIFO、指数FIFO、数据FIFO、选择器、偏移量加法器、第一数位截取器、第二数位截取器和组合器。
所述移位器与所述迭代控制模块连接,用于获取xn,并输出无效位个数E_xn和xn放大结果;
所述余弦累乘结果FIFO与所述迭代控制模块连接,用于获取余弦值累乘因数cos_accumu;
所述指数FIFO与所述移位器连接,用于获取所述无效位个数E_xn;
所述数据FIFO与所述移位器连接,用于获取所述xn放大结果;
所述乘法器连接所述数据FIFO和余弦累乘结果FIFO,用于对所述xn放大结果xn1和cos_accumu1进行乘法运算获取xcos;
所述选择器连接乘法器和指数FIFO,用于获取矫正的指数E;
所述偏移量加法器与所述选择器连接,用于获取浮点数指数位Exp;
所述第一数位截取器与所述乘法器连接,用于根据所需浮点数格式截取所述xcos有效数位Fraction;
所述第二数位截取器与所述乘法器连接,用于截取所述xcos最高位作为符号位Sign;
所述组合器连接所述偏移量加法器、第一数位截取器和第二数位截取器,用于将所述符号位Sign、指数位Exp和有效数位Fraction拼接为浮点数结果并输出。
本发明的有益效果是:
本发明提出的精度可控三角函数求解方法,能够对不同输入角的迭代结果进行不同的处理过程,通过有效位数的判断选择继续迭代或直接输出,保证了预设浮点数的有效位宽能够用尽,同时也极大地缩短了大批量高精度运算的时间。
本发明提出的精度可控三角函数求解方法,在CORDIC算法原理的基础上,对旋转角过程进行了优化和改进,为了满足高精度结果要求,增加了旋转判断过程。解除了每次迭代角必须旋转的限制,从而使精度大大增加。
本发明提出的精度可控三角函数求解方法,在电路实现中,迭代运算过程只涉及到简单的移位和加法操作,避免了大量的乘法运算,极大地简化了运算过程。
本发明提出的精度可控三角函数求解方法,输出结果为IEEE754标准定义的浮点数形式,解决了定点数形式输出位宽的局限性,保证输出数值偏小的结果也有预设浮点数需要的有效数字个数。
附图说明
图1是本发明实施例提供的一种基于CORDIC的三角函数循环迭代求解方法的流程示意图;
图2是本发明实施例提供的一种基于CORDIC的三角函数循环迭代求解方法中当前角与新角关系示意图;
图3是本发明实施例提供的一种基于CORDIC的三角函数循环迭代求解方法中IEEE754标准定义浮点数表示格式示意图;
图4是本发明实施例提供的一种基于CORDIC的三角函数循环迭代求解装置结构示意图;
图5是本发明实施例提供的一种基于CORDIC的三角函数循环迭代求解装置采用电路方式实现的结构示意图;
图6是本发明实施例提供的一种基于CORDIC的三角函数循环迭代求解装置中定转浮模块的结构示意图。
具体实施方式
下面通过实施例,并结合附图1-6,对本发明的技术方案作进一步具体的说明。
如附图1所示,本发明的目的是提供了一种基于CORDIC的三角函数循环迭代求解方法,包括如下步骤:
步骤S1:根据待求解的输入角θ所在象限确定当前角z0的角度和坐标值;
步骤S2:将当前角z0向输入角θ通过多次迭代旋转,生成新角z1,迭代旋转直至新角z1与输入角θ重叠或新角z1满足精度要求;
步骤S3:获取迭代后新角z1的余弦值和正弦值,并将余弦值和正弦值转化为高精度浮点数结果输出。
在步骤S1中,输入角θ∈[-π,π),根据输入角θ所在象限得到当前角z0和坐标值(x0,y0),当输入角θ分别位于第一、第二、第三、第四象限时,当前角z0和坐标值(x0,y0)的值分别由式(1)至式(4)中给出。
在步骤S2中还包括以下步骤:
步骤S21:将当前角z0与输入角θ的大小进行比较,当前角z0<输入角θ时作逆时针旋转生成旋转角z',当前角z0>输入角θ时作顺时针旋转生成所述旋转角z'。逆时针旋转时利用式(5)计算,顺时针旋转时利用式(6)计算旋转角z';
如附图2所示,在一种实施例中,当前角z0与输入角θ的大小进行比较,z0<θ时作逆时针旋转,z0>θ时作顺时针旋转,z0所在的OA边向输入角所在的OF边逆时针旋转,到OB边位置,得到旋转后旋转角z'。
其中,i为当前迭代次数,初始数值为1,每经过一次旋转迭代数值加1。sita(i)由(7)式得到,为当前迭代中角转动的值。
步骤S22:对旋转角z'和当前角z0与输入角θ的差值大小进行比较,通过对旋转的可选择性控制,使其能够在足够的迭代次数后达到需要的高精度的要求。若|z'-θ|<|z0-θ|,则当前角z0进行旋转,按式(8)将旋转sita(i)后的旋转角z'及其坐标x'、y'赋值给旋转后的新角z1及坐标(x1,y1);反之当前角z0不进行旋转,新角z1按式(9)保持旋转前原值;
步骤S23:当旋转后的新角z1=θ,即当前角与输入角重叠,可停止迭代。若z1≠θ,则通过设定迭代旋转次数i在各数值时,对新角坐标值x1、y1的大小进行判断,满足精度要求则可以停止迭代。精度要求包括单精度浮点数迭代上限、单精度浮点数精度要求、双精度浮点数迭代上限和双精度浮点数精度要求。不满足精度要求则将新角z1作为当前角z0再次进行迭代旋转,如此循环反复计算,直到满足精度要求达成停止条件。
新角z1的迭代次数i和坐标值x1、y1满足单精度浮点数迭代上限和单精度浮点数精度要求的标准为:
(6)i=51;
新角z1的迭代次数i和坐标值x1、y1满足双精度浮点数迭代上限和双精度浮点数精度要求的标准为:
(6)i=80。
满足当前角与输入角重叠或根据所需浮点数形式满足其中任意一个条件,则停止迭代。
如附图3所示,在步骤S3中,对x1和y1进行处理,将两个数转化为二进制形式,并进行转换,使x1=1.a0a1a2…*2E_xn,y1=1.b0b1b2…*2E_yn。E_xn和E_yn分别为两个数的指数,有效数字则从小数点后开始根据需要的输出浮点数格式截取。对xn,单精度浮点数需要23位有效数字,则从a0开始向后取23位,Fraction=′a0a1a2…a22′;指数部分Exp=E_xn+127;xn≥0时,符号位Sign=0,反之Sign=1。双精度浮点数需要52位有效数字,则从a0开始向后取52位,Fraction=′a0a1a2…a51′;指数部分Exp=E_xn+1023;xn≥0时,符号位Sign=0,反之Sign=1。指数部分由数据指数加上浮点数偏移量得到,单精度浮点数偏移量为127,双精度浮点数偏移量为1023。yn同理,由上述方法得到yn的符号位Sign、指数部分Exp、尾数部分Fraction拼接起来则得到输入角正弦值和余弦值的浮点数输出结果。
如附图4所示,本发明还提供了一种基于CORDIC的三角函数循环迭代求解装置,包括迭代控制模块和定转浮模块,迭代控制模块包括初始化单元、循环迭代单元和控制单元。
其中,初始化单元用于根据待求解的输入角θ所在象限确定当前角z0的角度和坐标值,并记录循环迭代单元迭代次数i;
循环迭代单元输入端与初始化单元输出端和控制单元输出端连接,用于将当前角z0向输入角θ通过多次迭代旋转生成新角z1;
控制单元输入端与循环迭代单元输出端连接,用于判断新角z1是否与输入角θ重叠或新角z1是否满足精度要求,如不满足精度要求,则将其返回至循环迭代单元输入端以进行下一次循环迭代;
定转浮模块用于获取新角z1的余弦值和正弦值,并将余弦值和正弦值转化为高精度浮点数结果输出。
初始化单元用于接收待求解的输入角,根据待求解的输入角所在象限确定当前角z0的角度和坐标值。输入角θ∈[-π,π),根据输入角θ所在象限得到当前角z0和坐标值(x0,y0),当当前角z0分别位于第一、第二、第三、第四象限时,当前角z0和坐标值(x0,y0)的值分别由式(10)至式(13)中给出。
并将生成的当前角z0的角度和坐标值输入循环迭代单元。
循环迭代单元将当前角z0与输入角θ的大小进行比较,当前角z0<输入角θ时作逆时针旋转生成旋转角z',当前角z0>输入角θ时作顺时针旋转生成所述旋转角z'。逆时针旋转时利用式(14)计算,顺时针旋转时利用式(15)计算旋转角z';
其中,i为当前迭代次数,初始数值为1,每经过一次迭代数值加1。sita(i)由(16)式得到,为当前迭代中角转动的值。
循环迭代单元对旋转角z'和当前角z0与输入角θ的差值大小进行比较,通过对旋转的可选择性控制,使其能够在足够的迭代次数后达到需要的高精度的要求。若|z'-θ|<|z0-θ|,则当前角z0进行旋转,按式(17)将旋转sita(i)后的旋转角z'及其坐标x'、y'赋值给旋转后的新角z1及坐标(x1,y1);反之当前角z0不进行旋转,新角z1按式(18)保持旋转前原值;并将新角z1及坐标(x1,y1)输出至控制单元。
控制单元判断旋转后的新角z1=θ,即当前角与输入角重叠,可停止迭代。若z1≠θ,则通过设定迭代旋转次数i在各数值时,对新角坐标值x1、y1的大小进行判断,满足精度要求则可以停止迭代。精度要求包括单精度浮点数迭代上限、单精度浮点数精度要求、双精度浮点数迭代上限和双精度浮点数精度要求。不满足精度要求则将新角z1作为当前角z0再次进行迭代旋转,如此循环反复计算,直到满足精度要求达成停止条件。
在一种实施例中,基于CORDIC算法精度可控的三角函数求解装置能够通过电路的方式求已知输入角θ=1.570432011162291的正弦值和余弦值,输入角为其右移82位的补码:θ=85'h06481f5442225a31ad6a53。若当前输入循环迭代单元的当前角z0=85’h03243f6a8885a308d3131a,坐标为原值右移88位的补码:x0=90’h0b504f333f9de6484597d8a,y0=90’h0b504f333f9de6484597d8a,可判断出此时z0<θ,需要逆时针旋转,旋转角为i=1时对应的同样存为右移82位的补码即85'h01dac670561bb4f68adfc9。
为了降低电路实现的复杂度,将式(14)、(15)修改为式(19)、(20),使除法操作改为移位操作,常数cos(sita(i))取出,在迭代控制模块单独计算。根据式(19)用加法和移位操作计算旋转角z’=85’h04ff05dadea157ff5df2e3和坐标值x’=90’h05a827999fcef32422cbec5,y’=90’h10f876ccdf6cd96c6863c4f,而后根据旋转后的旋转角与当前角分别于输入角做差比较结果,|z'-θ|<|z0-θ|,旋转后角更靠近输入角θ,因此选择将x'、y'、z'的值赋给x1、y1、z1输出。
其输出通过迭代控制模块的控制可能会作为下一个循环的输入,每次旋转的角度由算出,随着迭代次数i的增加而减小。因其对于是否旋转的可选择性,所以能够通过增加足够多的迭代次数来达到需要的高精度的要求。由此,角度越来越接近准确值,其横纵坐标也越来越接近于去掉余弦累乘因数的余弦和正弦值。
新角z1的迭代次数i和坐标值x1、y1满足单精度浮点数迭代上限和单精度浮点数精度要求的标准为:
(6)i=51;
新角z1的迭代次数i和坐标值x1、y1满足双精度浮点数迭代上限和双精度浮点数精度要求的标准为:
(6)i=80。
满足当前角与输入角重叠或根据所需浮点数形式满足其中任意一个条件,则控制单元停止迭代,并将x1和y1输入定转浮模块。
如附图5所示,在电路实现中,通过式(19)、(20)计算出的x1、y1还缺少提出单独计算的余弦常数值。在每次循环过程中,循环迭代单元选择旋转的旋转角余弦值cos(sits(i))传输到迭代控制模块记录下来作累乘计算,该结果cos_accumu由式(21)给出。
cos_accumu=∏cos(sita(n)) (21)
n为循环迭代单元有旋转操作时对应的迭代周期i。然后对一定迭代次数后的输出结果进行判定。因为循环迭代结果x1、y1的值是实际值放大一定倍数的结果,因此判断小数点后的有效数字,可以根据两个数的最高位开始第一个有效数字的位置进行判断。在当前角未与输入角重叠的情况下,若x1、y1其中一个无效位个数超过预定值,且未达迭代上限,则需要将x1、y1、z1再次送入循环迭代单元;若已达迭代上限,或无效位个数都未超过预定值,即满足所需有效位,将此时得到的x1和y1分别赋值给去掉余弦累乘因数的余弦值xn和正弦值yn,并和判定出的无效位个数E_xn、E_yn,及余弦累乘结果cos_accumu一起输出到定转浮模块。无效位指从最高位符号位的下一位开始,到出现第一个与符号位异号的数之前的所有数,有效数字即该异号数及其之后的数字。需要的输出数据格式为单精度浮点数或双精度浮点数时,设定分别在26次、31次、36次、41次、46次或55次、60次、65次、70次、75次循环迭代后判断x1、y1中的无效位个数是否超过预定值2、8、13、18、23。设定单精度浮点数和双精度浮点数的迭代上限分别为51次和80次。
例如输入输入角θ=85'h06481f5442225a31ad6a53,该角处于第一象限,则初值应按式(1)计算,x0、y0为右移88位的补码形式,z0为右移82位的补码形式,得到x0=90'hb504f333f9de6484597d8a,y0=90'hb504f333f9de6484597d8a,z0=85'h3243f6a8885a308d3131a。由于需要双精度浮点数结果,将初值送入循环迭代单元进行迭代计算,并将输出结果再次送入该模块中,经过55次迭代后,得到结果x1=90’h0001bc984e19ebba2895602,y1=90’h129f046c27ca2e14ac161b5,y1有0位无效数字“0”,满足精度要求,但x1有12位无效数字“0”,不满足无效位低于2的精度要求,因此需要继续迭代计算;同理经过60次迭代也不满足精度要求,需要继续迭代;对于第65次迭代结果x1=90’h0001bc984e19ebbf52af9a2,y1=90’h129f046c27ca2e14ab9acd2,x1的12位无效位小于要求的13位,因此此时可以终止迭代循环,将输出x1、y1赋给xn、yn。同时,由于经过循环迭代单元计算的第1、2、3、4、6、9、10等周期有旋转角,因此将其对应的余弦值右移63位的数值作累乘计算得到余弦值累乘因数cos_accumu=cos(sita(1))*cos(sita(2))*cos(sita(3))*cos(sita(4))*cos(sita(6))*cos(sita(9))*cos(sita(10))*…,其右移63位的结果是64’h6dfb7e13cbc9859e。输出的xn和yn与该因数一起在定转浮模块进行处理。
定转浮模块对xn和yn进行处理,将两个数转化为二进制形式,并进行转换,使xn=1.a0a1a2…*2E_xn,yn=1.b0b1b2…*2E_yn。E_xn和E_yn分别为两个数的指数,有效数字则从小数点后开始根据需要的输出浮点数格式截取。对xn,单精度浮点数需要23位有效数字,则从a0开始向后取23位,Fraction=′a0a1a2…a22′;指数部分Exp=E_xn+127;xn≥0时,符号位Sign=0,反之Sign=1。双精度浮点数需要52位有效数字,则从a0开始向后取52位,Fraction=′a0a1a2…a51′;指数部分Exp=E_xn+1023;xn≥0时,符号位Sign=0,反之Sign=1。指数部分由数据指数加上浮点数偏移量得到,单精度浮点数偏移量为127,双精度浮点数偏移量为1023。yn同理,由上述方法得到yn的符号位Sign、指数部分Exp、尾数部分Fraction拼接起来则得到输入角正弦值和余弦值的浮点数输出结果。
如附图6所示,在一种实施例中,基于CORDIC算法精度可控的三角函数求解装置能够通过电路方式实现,通过将经过乘法操作、移位操作等将正弦值和余弦值转化为需要的浮点数形式输出。定转浮模块包括xn定转浮单元和yn定转浮单元;xn定转浮单元和yn定转浮单元采用相同配置,均包括移位器、乘法器、余弦累乘结果FIFO、指数FIFO、数据FIFO、选择器、偏移量加法器、第一数位截取器、第二数位截取器和组合器。以xn定转浮单元为例,移位器与迭代控制模块连接,用于获取xn和xn中的无效位个数E_xn;余弦累乘结果FIFO与迭代控制模块连接,用于获取余弦值累乘因数cos_accumu;指数FIFO与迭代控制模块连接,用于获取移位器输出的无效位个数E_xn;数据FIFO与移位器连接,用于获取移位器输出的xn放大结果;乘法器连接数据FIFO和余弦累乘结果FIFO,用于对xn放大结果xn1和cos_accumu1进行乘法运算获取xcos;选择器连接乘法器和指数FIFO,用于获取矫正的指数E,选择器在xcos次高位为0时选择连接指数FIFO与1的和,在xcos次高位为1时选择直接连接指数FIFO;偏移量加法器与选择器连接,用于根据所需浮点数格式获取浮点数指数位Exp;第一数位截取器与乘法器连接,用于根据所需浮点数格式截取xcos有效数位Fraction;第二数位截取器与乘法器连接,用于截取xcos最高位作为符号位Sign;组合器连接偏移量加法器、第一数位截取器和第二数位截取器,用于将符号位Sign、指数位Exp和有效数位Fraction拼接为浮点数结果并输出。
首先根据迭代控制模块中对xn的无效位个数E_xn的记录,进行对应位数的左移操作,并将该无效位个数和xn经左移放大结果分别存入指数FIFO和数据FIFO中。从数据FIFO取出的数xn1与从余弦累乘结果FIFO中取出的cos_accumu1同时进入乘法器作乘法运算,得到结果x。同理计算y。x、y计算方式即式(22)。找到x中最高位开始的第一位有效位,根据IEEE754浮点数的结构,从第一位有效位之后一位开始截取有效数字。单精度浮点数需要截取23位有效数字,双精度浮点数则需要52位,即浮点数的尾数部分Fraction。将x中的无效位与指数FIFO中取出的数字相加,再加上浮点数偏移量得到正弦值的指数位Exp。符号位Sign由x的符号位赋值得到。最后结合符号位、指数位、尾数位拼凑得到正弦和余弦的浮点数形式结果。
例如对于输入的xn=90’h0001bc984e19ebbf52af9a2以及无效位E_xn=12,将xn左移12位放大为90’h1bc984e19ebbf52af9a2000,将放大后的这个数、E_xn、以及输入的余弦累乘值cos_accumu=64’h6dfb7e13cbc9859e都分别放入FIFO中。而后使xn1与cos_accumu1相乘,得到结果x=64’h5f80cec57a39f527,因为x中没有无效位,因此截取从62位到11位为有效数字,Fraction=52’h7e033b15e8e7d,指数位Exp=11’d1023-11’d12-0=11’h3f3,符号位与x相同,Sign=0。由此得到拼接成的浮点数余弦结果float_x_out=64’h3F37E033B15E8E7D,转化为小数即0.0003643156245465,与标准余弦值结果一致,且有效数字用尽了双精度浮点数最大能达到的52位。
虽然本发明已经以较佳实施例公开如上,但实施例并不是用来限定本发明的。在不脱离本发明之精神和范围内,所做的任何等效变化或润饰,同样属于本发明之保护范围。因此本发明的保护范围应当以本申请的权利要求所界定的内容为标准。
Claims (10)
1.一种在工程计算中基于CORDIC的三角函数循环迭代求解方法,其特征在于,所述三角函数求解方法包括以下步骤:
步骤S1:根据待求解的输入角θ所在象限确定当前角z0的角度和坐标值;
步骤S2:将所述当前角z0向所述输入角θ通过多次迭代旋转,生成新角z1,迭代旋转直至所述新角z1与所述输入角θ重叠或所述新角z1满足精度要求;
步骤S3:获取迭代后所述新角z1的余弦值和正弦值,并将所述余弦值和正弦值转化为高精度浮点数结果输出。
3.根据权利要求1所述三角函数求解方法,其特征在于,在步骤S2中,还包括以下步骤:
步骤S21:将所述当前角z0与所述输入角θ的大小进行比较,所述当前角z0<输入角θ时作逆时针旋转生成旋转角z',所述当前角z0>输入角θ时作顺时针旋转生成所述旋转角z';每次迭代旋转使迭代次数i数值加1,所述迭代次数i初始值为1;
步骤S22:将所述当前角z0和所述旋转角z'分别与所述输入角θ做差进行比较,若|z'-θ|<|z0-θ|,则所述当前角z0进行旋转,并计算旋转后生成所述新角z1及坐标(x1,y1);反之则所述当前角z0不作旋转,并计算未旋转的所述新角z1及坐标(x1,y1);
步骤S23:所述新角z1等于所述输入角θ时,即可停止迭代;
所述新角z1不等于所述输入角θ时,则通过设定所述迭代次数i在各数值时,所述新角坐标值x1、y1的大小进行判断精度要求,满足精度要求则可以停止迭代,不满足则将所述新角z1作为所述当前角z0再次进行迭代,重复步骤S21-S23,直到满足停止条件。
6.一种基于CORDIC的三角函数循环迭代求解装置,其特征在于,所述三角函数求解装置包括迭代控制模块和定转浮模块,迭代控制模块包括初始化单元、循环迭代单元和控制单元;
所述初始化单元用于根据待求解的输入角θ所在象限确定当前角z0的角度和坐标值,并记录所述循环迭代单元迭代次数i;
所述循环迭代单元用于将所述当前角z0向所述输入角θ通过多次迭代旋转生成新角z1;
所述循环迭代单元输入端分别与所述初始化单元的输出端和控制单元的输出端连接;
所述控制单元与所述循环迭代单元连接,用于判断所述新角z1是否与所述输入角θ重叠或所述新角z1是否满足精度要求;
所述控制单元判断所述新角z1不满足精度要求,则将其返回至循环迭代单元输入端以进行下一次循环迭代;
所述定转浮模块用于获取所述新角z1的余弦值和正弦值,并将所述余弦值和正弦值转化为高精度浮点数结果输出。
7.根据权利要求6所述三角函数求解装置,其特征在于,所述循环迭代单元将所述当前角z0与所述输入角θ的大小进行比较,所述当前角z0<输入角θ时作逆时针旋转生成旋转角z',所述当前角z0>输入角θ时作顺时针旋转生成所述旋转角z';
所述循环迭代单元将所述当前角z0和所述旋转角z'分别与所述输入角θ做差进行比较,若|z'-θ|<|z0-θ|,则所述当前角z0进行旋转,并计算旋转后生成所述新角z1及坐标(x1,y1);反之则所述当前角z0不作旋转,并计算未旋转后生成所述新角z1及坐标(x1,y1)。
10.根据权利要求6所述三角函数求解装置,其特征在于,所述定转浮模块包括xn定转浮单元和yn定转浮单元;
所述xn定转浮单元和yn定转浮单元采用相同配置,均包括移位器、乘法器、余弦累乘结果FIFO、指数FIFO、数据FIFO、选择器、偏移量加法器、第一数位截取器、第二数位截取器和组合器。
所述移位器与所述迭代控制模块连接,用于获取xn,并输出无效位个数E_xn和xn放大结果;
所述余弦累乘结果FIFO与所述迭代控制模块连接,用于获取余弦值累乘因数cos_accumu;
所述指数FIFO与所述移位器连接,用于获取所述无效位个数E_xn;
所述数据FIFO与所述移位器连接,用于获取所述xn放大结果;
所述乘法器连接所述数据FIFO和余弦累乘结果FIFO,用于对所述xn放大结果xn1和cos_accumu1进行乘法运算获取xcos;
所述选择器连接乘法器和指数FIFO,用于获取矫正的指数E;
所述偏移量加法器与所述选择器连接,用于获取浮点数指数位Exp;
所述第一数位截取器与所述乘法器连接,用于根据所需浮点数格式截取所述xcos有效数位Fraction;
所述第二数位截取器与所述乘法器连接,用于截取所述xcos最高位作为符号位Sign;
所述组合器连接所述偏移量加法器、第一数位截取器和第二数位截取器,用于将所述符号位Sign、指数位Exp和有效数位Fraction拼接为浮点数结果并输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010494171.XA CN111666064B (zh) | 2020-06-03 | 2020-06-03 | 基于cordic的三角函数循环迭代求解方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010494171.XA CN111666064B (zh) | 2020-06-03 | 2020-06-03 | 基于cordic的三角函数循环迭代求解方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111666064A true CN111666064A (zh) | 2020-09-15 |
CN111666064B CN111666064B (zh) | 2023-01-10 |
Family
ID=72385579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010494171.XA Active CN111666064B (zh) | 2020-06-03 | 2020-06-03 | 基于cordic的三角函数循环迭代求解方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111666064B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113721885A (zh) * | 2021-09-06 | 2021-11-30 | 深圳智微电子科技有限公司 | 一种基于cordic算法的除法器 |
CN117573069A (zh) * | 2023-11-23 | 2024-02-20 | 北京国科天迅科技股份有限公司 | Cordic算法芯片 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030215030A1 (en) * | 2002-05-17 | 2003-11-20 | Samsung Electronics Co., Ltd. | RF receiver phase correction circuit using cordic and vector averaging functions and method of operation |
CN101082858A (zh) * | 2007-07-12 | 2007-12-05 | 北京航空航天大学 | 一种cordic算法的实现装置 |
CN104714773A (zh) * | 2015-03-04 | 2015-06-17 | 中国航天科技集团公司第九研究院第七七一研究所 | 基于plb总线的嵌入式旋转角计算ip软核及旋转角计算方法 |
JP2017123057A (ja) * | 2016-01-07 | 2017-07-13 | キヤノン株式会社 | 座標演算装置及び座標演算方法 |
-
2020
- 2020-06-03 CN CN202010494171.XA patent/CN111666064B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030215030A1 (en) * | 2002-05-17 | 2003-11-20 | Samsung Electronics Co., Ltd. | RF receiver phase correction circuit using cordic and vector averaging functions and method of operation |
CN101082858A (zh) * | 2007-07-12 | 2007-12-05 | 北京航空航天大学 | 一种cordic算法的实现装置 |
CN104714773A (zh) * | 2015-03-04 | 2015-06-17 | 中国航天科技集团公司第九研究院第七七一研究所 | 基于plb总线的嵌入式旋转角计算ip软核及旋转角计算方法 |
JP2017123057A (ja) * | 2016-01-07 | 2017-07-13 | キヤノン株式会社 | 座標演算装置及び座標演算方法 |
Non-Patent Citations (4)
Title |
---|
XIAOYUAN WANG: "Design and Implementation of CORDIC Algorithm Based on FPGA", 《2018 INTERNATIONAL CONFERENCE ON ROBOTS & INTELLIGENT SYSTEM (ICRIS)》 * |
姚亚峰等: "直接旋转CORDIC算法及其高效实现", 《华中科技大学学报(自然科学版)》 * |
李天立等: "高效单精度浮点三角函数计算电路结构与实现", 《微电子学与计算机》 * |
陆鹏威等: "基于CORDIC算法实现三角函数的运算", 《国外电子测量技术》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113721885A (zh) * | 2021-09-06 | 2021-11-30 | 深圳智微电子科技有限公司 | 一种基于cordic算法的除法器 |
CN113721885B (zh) * | 2021-09-06 | 2023-10-03 | 深圳智微电子科技有限公司 | 一种基于cordic算法的除法器 |
CN117573069A (zh) * | 2023-11-23 | 2024-02-20 | 北京国科天迅科技股份有限公司 | Cordic算法芯片 |
CN117573069B (zh) * | 2023-11-23 | 2024-04-19 | 北京国科天迅科技股份有限公司 | Cordic算法芯片 |
Also Published As
Publication number | Publication date |
---|---|
CN111666064B (zh) | 2023-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3790307B2 (ja) | データプロセッサ及びデータ処理システム | |
US20140317376A1 (en) | Digital Processor Having Instruction Set with Complex Angle Function | |
JPH02196328A (ja) | 浮動小数点演算装置 | |
US3917935A (en) | Reduction of look-up table capacity | |
CN107305484B (zh) | 一种非线性函数运算装置及方法 | |
CN101630243B (zh) | 超越函数装置以及用该装置实现超越函数的方法 | |
WO2022170809A1 (zh) | 一种适用于多精度计算的可重构浮点乘加运算单元及方法 | |
CN111666064B (zh) | 基于cordic的三角函数循环迭代求解方法和装置 | |
CN111666065B (zh) | 基于cordic的三角函数流水线迭代求解方法和装置 | |
CN108037906B (zh) | 基于tcordic算法的浮点基本函数实现方法及装置 | |
Hormigo et al. | Measuring improvement when using HUB formats to implement floating-point systems under round-to-nearest | |
US4747067A (en) | Apparatus and method for approximating the magnitude of a complex number | |
CN108733349B (zh) | 一种基于定点数的三角函数运算电路 | |
Linhardt et al. | Digit-by-digit transcendental-function computation | |
CN113138749A (zh) | 基于cordic算法的三角函数计算装置及方法 | |
CN107423026B (zh) | 一种正余弦函数计算的实现方法及装置 | |
JP2504102B2 (ja) | 逆三角関数演算装置 | |
US10216481B2 (en) | Digit recurrence division with scaling and digit selection using intermediate value | |
JP2822399B2 (ja) | 対数関数演算装置 | |
CN111984226A (zh) | 一种基于双曲cordic的立方根求解装置及求解方法 | |
CN107657078B (zh) | 基于fpga的超声相控阵浮点聚焦发射实现方法 | |
CN115658008A (zh) | 一种资源复用型超越函数运算实现方法 | |
JP2019101896A (ja) | 演算処理装置および演算処理装置の制御方法 | |
CN112783471A (zh) | 基于cordic算法的正余弦、反正切函数运算的装置及方法 | |
CN110147218B (zh) | 基于Cordic算法的运算电路与方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |