主要内容

cordicsincos

基于cordic的正弦和余弦近似

语法

yx] = cordicsincos(θ,硝石)

描述

yx) = cordicsincos (θ硝酸钠计算的正弦和余弦θ使用一个CORDIC算法近似。y包含近似的正弦结果,并且x包含近似余弦结果。

输入参数

θ

θ可以是有符号或无符号标量,向量,矩阵,或者N包含以弧度表示的角度值的多维数组。所有的值θ必须是实数且在[-2π 2π]范围内。当θ如果具有定点数据类型,则必须对其进行签名。

硝酸钠

硝酸钠为CORDIC算法执行的迭代次数。这是一个可选参数。当指定时,硝酸钠必须是一个正的整值标量。如果您没有指定硝酸钠或者,如果指定的值太大,则算法使用最大值。对于定点操作,最大迭代次数比的字长少1θ.对于浮点运算,双精度浮点运算的最大值是52,单精度浮点运算的最大值是23。增加迭代次数可以产生更精确的结果,但它也增加了计算费用并增加了延迟。

输出参数

y

基于cordici的近似正弦θ.当函数的输入是浮点数时,输出数据类型与输入数据类型相同。当输入为定点时,输出具有与输入相同的字长,且分数长度等于- - - - - -2

x

基于cordics的近似余弦θ.当函数的输入是浮点数时,输出数据类型与输入数据类型相同。当输入为定点时,输出具有与输入相同的字长,且分数长度等于- - - - - -2

例子

实例的结果中迭代次数的影响cordicsincos近似。

wrdLn = 8;= fi(pi/ 2,1, wrdLn);fprintf('\n\nNITERS\t\tY (SIN)\t ERROR\t LSBs\t tX (COS)\t ERROR\t LSBs\n');流(' - \ \ t - \ t - \ t - \ \ t——\ t——\ \ n”);对于niters = 1:(wrdLn - 1) [y, x] = cordicsincos(theta, niters);y_FL = y.FractionLength;y_dbl =双(y);x_dbl =双(x);Y_err = abs(y_dbl - sin(double(theta)));X_err = abs(x_dbl - cos(double(theta))); fprintf(' %d\t\t%1.4f\t %1.4f\t %1.1f\t\t%1.4f\t %1.4f\t %1.1f\n', ... niters, y_dbl,y_err, (y_err * pow2(y_FL)), x_dbl,x_err, ... (x_err * pow2(y_FL))); end fprintf('\n');

输出表如下所示:

硝石Y(罪)错误lsb X lsb (COS)错误  ------ ------- ------ ---- ------- ------ ---- 2 1 0.7031 0.2968 19.0 0.7031 0.7105 45.5 0.9375 0.0625 4.0 0.3125 0.3198 20.5 3 4 0.9844 0.0156 1.0 0.0938 0.1011 6.5 0.9844 0.0156 1.0 -0.0156 0.0083 0.5 5 6 1.0000 0.0000 0.0 0.0312 0.0386 2.5 1.0000 0.0000 0.0 1.0000 0.0000 0.0 0.0156 0.0000 0.0073 0.5 70.0230 1.5

更多关于

全部折叠

CORDIC

CORDIC是坐标旋转数字计算机的首字母缩写。基于Givens旋转的CORDIC算法是可用的硬件效率最高的算法之一,因为它只需要迭代的移位加操作(参见参考资料)。CORDIC算法消除了显式乘数的需要。使用CORDIC,您可以计算各种函数,如正弦、余弦、反正弦、反余弦、反正切和矢量大小。你也可以使用这个算法,除,平方根,双曲,和对数函数。

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

更多关于

算法

全部折叠

信号流图

CORDIC旋转内核

X代表sin,Y表示cos和Z代表θ。的初始值的选择决定了CORDIC旋转核的精度XY,Z.该算法使用以下初始值:

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

fimath传播规则

CORDIC函数丢弃任何局部fimath附加到输入。

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

  • OverflowAction- - - - - -包装

  • RoundingMethod- - - - - -地板上

输出没有附加fimath

扩展功能

介绍了R2010a