发明名称 一种覆盖全圆周角度的单精度浮点三角函数的实现方法
摘要 本发明公开了一种覆盖全圆周角度的单精度浮点三角函数的实现方法,本发明属于数字信号处理领域。包括如下步骤:一、预处理模块CORDIC_PRE接收输入的单精度浮点数据,记录原始数据的象限信息,将单精度浮点数据转换到设定角度范围内,并转换为高精度定点数据,将得到的高精度定点数据输入至迭代运算模块CORDIC_CORE;二、CORDIC_CORE对输入其中的数据采用高精度定点运算完成CORDIC算法迭代运算;将结果输入至后处理模块CORDIC_POST;三、CORDIC_POST针对对输入其中的数据,依据CORDIC_PRE中记录的象限信息,对所要求计算的正余弦函数值或者角度值进行象限恢复;将恢复后的数据转换成精度浮点数据并输出。本发明适用于CORDIC算法的实际运算。
申请公布号 CN103150137A 申请公布日期 2013.06.12
申请号 CN201310065877.4 申请日期 2013.03.01
申请人 北京理工大学 发明人 陈禾;陈冬;于文月;谢宜壮;曾涛;龙腾
分类号 G06F7/544(2006.01)I 主分类号 G06F7/544(2006.01)I
代理机构 北京理工大学专利中心 11120 代理人 付雷杰;高燕燕
主权项 一种覆盖全圆周角度的单精度浮点三角函数的实现方法,其特征在于,包括如下步骤:步骤一、预处理模块CORDIC_PRE接收输入的单精度浮点数据,采用如下方法将单精度浮点数据转换到[‑π/4,π/4]范围内,并转换为高精度定点数据,将得到的高精度定点数据输入至迭代运算模块CORDIC_CORE;若输入数据为任意范围的单精度浮点数据格式的角度值θ,分如下两种情况进行角度范围转换,并将转换后的θ通过将单精度浮点数据的指数部分指定为127实现单精度浮点数据到高精度定点数据的转换;若θ处于[‑2π,2π]的范围内,将θ以π/2或π为单位进行旋转,旋转至[‑π/4,π/4]范围内,记录所旋转的角度;若θ处于(2π,∞)∪(‑∞,‑2π)范围内,则将θ加上或者减去2nπ,n为整数,使θ转换至[‑2π,2π]范围之内,将转换后的θ再次以π/2或π为单位进行旋转,旋转至[‑π/4,π/4]范围内,记录所旋转的角度;若输入数据为任意范围的向量(x,y),将(x,y)变换到半径为1的圆周内,获得向量(x',y'),然后将向量(x',y')旋转至[‑π/4,π/4]圆周范围内,记录所旋转的角度;将单精度浮点数据转换为高精度定点数据;步骤二、CORDIC_CORE对输入其中的数据采用高精度定点运算完成CORDIC算法迭代运算;将结果输入至后处理模块CORDIC_POST;步骤三、CORDIC_POST针对对输入其中的数据,按照不同情况进行处理:若需要计算正余弦函数值,则输入至CORDIC_POST中的为同一个角度的正弦值和余弦值,则在CORDIC_POST中依据CORDIC_PRE中记录的所旋转的角度,按照正余弦函数值的变换关系进行数据恢复;所述数据恢复的方法如下:若所记录的旋转角度为‑π/2,则根据正余弦函数变换关系s <mrow> <mfenced open='' close=''> <mtable> <mtr> <mtd> <mi>sin</mi> <mrow> <mo>(</mo> <mi>&theta;</mi> <mo>-</mo> <mi>&pi;</mi> <mo>/</mo> <mn>2</mn> <mo>)</mo> </mrow> <mo>=</mo> <mo>-</mo> <mi>cos</mi> <mi>&theta;</mi> </mtd> </mtr> <mtr> <mtd> <mi>cos</mi> <mrow> <mo>(</mo> <mi>&theta;</mi> <mo>-</mo> <mi>&pi;</mi> <mo>/</mo> <mn>2</mn> <mo>)</mo> </mrow> <mo>=</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> </mtr> </mtable> </mfenced> <mo>,</mo> </mrow>即输入至CORDIC_POST中的正弦函数值的负数形式为原角度值的余弦函数值,输入至CORDIC_POST中的余弦函数值为原角度的正弦函数值;若所记录的旋转角度为π/2,则根据正余弦函数变换关系s <mrow> <mfenced open='' close=''> <mtable> <mtr> <mtd> <mi>sin</mi> <mrow> <mo>(</mo> <mi>&theta;</mi> <mo>+</mo> <mi>&pi;</mi> <mo>/</mo> <mn>2</mn> <mo>)</mo> </mrow> <mo>=</mo> <mi>cos</mi> <mi>&theta;</mi> </mtd> </mtr> <mtr> <mtd> <mi>cos</mi> <mrow> <mo>(</mo> <mi>&theta;</mi> <mo>+</mo> <mi>&pi;</mi> <mo>/</mo> <mn>2</mn> <mo>)</mo> </mrow> <mo>=</mo> <mo>-</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> </mtr> </mtable> </mfenced> <mo>,</mo> </mrow>即输入至CORDIC_POST中的正弦函数值为原角度值的余弦函数值,输入至CORDIC_POST中的余弦函数值的负数形式为原角度的正弦函数值;若所记录的旋转角度为±π,则根据正余弦函数变换关系 <mrow> <mfenced open='' close=''> <mtable> <mtr> <mtd> <mi>sin</mi> <mrow> <mo>(</mo> <mi>&theta;</mi> <mo>&PlusMinus;</mo> <mi>&pi;</mi> <mo>)</mo> </mrow> <mo>=</mo> <mo>-</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> </mtr> <mtr> <mtd> <mi>cos</mi> <mrow> <mo>(</mo> <mi>&theta;</mi> <mo>&PlusMinus;</mo> <mi>&pi;</mi> <mo>)</mo> </mrow> <mo>=</mo> <mo>-</mo> <mi>cos</mi> <mi>&theta;</mi> </mtd> </mtr> </mtable> </mfenced> <mo>,</mo> </mrow>即输入至CORDIC_POST中的正弦函数值的负数形式为原角度值的正弦函数值,输入至CORDIC_POST中的余弦函数值的负数形式为原角度的余弦函数值;若需要计算角度值,则依据CORDIC_PRE中记录的所旋转的角度,对输入到CORDIC_POST中的角度值进行恢复;将恢复后的数据转换成精度浮点数据并输出。
地址 100081 北京市海淀区中关村南大街5号