主要内容

cordicsin

基于cordic的正弦近似

描述

y= cordicsin (θ计算sinθ使用CORDIC算法逼近。

例子

y= cordicsin (θ硝酸钠计算sinθ使用指定迭代次数的CORDIC算法近似,硝酸钠

例子

全部折叠

方法产生的结果进行比较cordicsin算法对结果进行了双精度处理函数。

创建1024个点[0, 2 *π)

stepSize = pi/512;thRadDbl = 0:stepSize:(2*pi - stepSize);thRadFxp = sfi(thRadDbl,12);%符号,12位固定点sinThRef = sin(double(thRadFxp));%参考结果

将迭代次数设置为10。

硝石= 10;cdcSinTh = cordicsin(thRadFxp,niters);errCdcRef = sinThRef - double(cdcSinTh);

比较定点cordicsin函数结果达到了结果的双精度函数。

图保存轴([0 2*pi -1.25 1.25])“b”);情节(thRadFxp cdcSinTh,‘g’);情节(thRadFxp errCdcRef,“r”);ylabel (“sinθ(\)”);gca。XTick = 0:pi/2:2*pi; gca.XTickLabel = {' 0 'π/ 2的“π”“3 *π/ 2”“2 *π”};gca。YTick = -1:0.5:1; gca.YTickLabel = {“-1.0”“-0.5”' 0 '“0.5”“1.0”};ref_str =参考:罪(双(\θ));sprintf('12位CORDIC正弦;N = %d'、硝石);Err_str = sprintf('错误(max = %f)'马克斯(abs (errCdcRef)));传奇(ref_str cdc_str err_str);

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象表示Reference: sin(double(\Theta)), 12位CORDIC sin;N = 10,误差(最大= 0.005278)。

经过10次迭代,CORDIC算法已经将sin逼近到双精度sin结果的0.005492以内。

输入参数

全部折叠

输入角度(以弧度为单位),指定为有符号或无符号标量、矢量、矩阵或多维数组。的所有值θ必须为实数,范围为[-2π 2π)。

CORDIC算法执行的迭代次数,指定为正整数值标量。

如果您没有指定硝酸钠,或者如果指定的值太大,则算法使用最大值。对于定点运算,最大迭代次数小于的字长1θ.对于浮点运算,最大值为52 (double)或23 (single)。增加迭代次数可以产生更准确的结果,但也会增加计算费用并增加延迟。

输出参数

全部折叠

基于cordic的sin的近似θ,作为标量、向量、矩阵或多维数组返回。

当函数的输入为浮点数时,输出数据类型与输入数据类型相同。当输入为定点时,输出的字长与输入的字长相同,且分数长度等于- - - - - -2

算法

全部折叠

CORDIC

CORDIC是坐标旋转数字计算机的首字母缩写。基于Givens旋转的CORDIC算法是目前硬件效率最高的算法之一,因为它只需要迭代的shift-add操作(参见参考文献)。CORDIC算法消除了显式乘法器的需要。使用CORDIC,您可以计算各种函数,如正弦,余弦,弧正弦,弧余弦,弧正切和矢量大小。您还可以将此算法用于除函数、平方根函数、双曲函数和对数函数。

增加CORDIC迭代次数可以产生更准确的结果,但这样做会增加计算费用并增加延迟。

信号流图

CORDIC旋转内核

X表示sin,Y表示余弦,然后Z代表θ。CORDIC旋转核的准确性取决于对的初始值的选择XY,Z.该算法使用以下初始值:

z 0 初始化为 θ 输入参数值 x 0 初始化为 1 一个 N y 0 初始化为 0

fimath传播规则

CORDIC函数丢弃任何局部fimath连接到输入端。

CORDIC函数使用它们自己的内部fimath计算时:

  • OverflowAction- - - - - -包装

  • RoundingMethod- - - - - -地板上

输出没有附加fimath

扩展功能

版本历史

在R2010a中引入