主要内容

cordicpol2cart

基于cordic的极坐标到笛卡尔的近似转换

语法

[x,y] = cordicpol2cart(theta,r)
[x,y] = cordicpol2cart(theta,r,niters)
[x,y] = cordicpol2cart(theta,r,Name,Value)
[x,y] = cordicpol2cart(theta,r,niters,Name,Value)

描述

(x, y)= cordicpol2cart (θr的笛卡尔xy坐标r* e ^ (j *θ)使用CORDIC算法逼近。

(x, y)= cordicpol2cart (θr硝酸钠执行硝酸钠算法的迭代。

(x, y)= cordicpol2cart (θr名称,值的布尔值来缩放输出b

(x, y)= cordicpol2cart (θr硝酸钠名称,值指定迭代次数和名称,值Pair用于是否缩放输出。

输入参数

θ

θ可以是有符号或无符号标量、向量、矩阵或N-维度数组,包含以弧度为单位的角度值。的所有值θ必须在[-2π 2π)范围内。

r

r包含输入幅值,可以是标量,也可以具有相同的维数θr必须是真正有价值的。

硝酸钠

硝酸钠为CORDIC算法执行的迭代次数。这个参数是可选的。当指定时,硝酸钠必须为正整数标量。如果您没有指定硝酸钠,或者如果指定的值太大,则算法使用最大值。对于定点运算,最大迭代次数为字长r或者比的字长少1θ,以较小者为准。对于浮点运算,最大值为52 (double)或23 (single)。增加迭代次数可以产生更准确的结果,但也会增加计算费用并增加延迟。

名称-值参数

的可选逗号分隔对名称,值参数,的名字参数名称和价值对应的值。的名字必须出现在单引号内('').

ScaleOutput

ScaleOutput是一个布尔值,指定是否按逆CORDIC增益因子缩放输出。这个参数是可选的。如果你设置ScaleOutput真正的1,输出值乘以一个常数,这会引起额外的计算。如果你设置ScaleOutput0时,输出未缩放。

默认值:真正的

输出参数

(x, y)

(x, y)包含近似笛卡尔坐标。当输入r是浮点,输出呢(x, y)具有与输入相同的数据类型。

当输入r是一个签署整数或定点数据类型,输出(x, y)签订fi对象。这些fi对象的字长比对象的字长大两位r.它们的分数长度与的分数长度相同r

当输入r是一个无符号整数或定点,输出(x, y)签订fi对象。这些fi对象的字长比对象的字长大3位r.它们的分数长度与的分数长度相同r

例子

运行以下代码,并评估基于cordic的极坐标到笛卡尔坐标转换的准确性。

wrdLn = 16;theta = fi(pi/ 3,1, wrdLn);u = fi(2.0, 1, wrdLn);fprintf('\n\nNITERS\tX\t\t ERROR\t lbs \t\tY\t ERROR\t lbs \n');流(' - \ t - \ t - \ t - \ \ t——\ t——\ \ n”);(wrdLn - 1) [x_ref, y_ref] = pol2cart(double(theta),double(u));[x_fi, y_fi] = cordicpol2cart(theta, u, niters);X_dbl = double(x_fi);Y_dbl = double(y_fi);X_err = abs(x_dbl - x_ref); y_err = abs(y_dbl - y_ref); fprintf('%d\t%1.4f\t %1.4f\t %1.1f\t\t%1.4f\t %1.4f\t %1.1f\n',... niters,x_dbl,x_err,(x_err * pow2(x_fi.FractionLength)),... y_dbl,y_err,(y_err * pow2(y_fi.FractionLength))); end fprintf('\n'); NITERS X ERROR LSBs Y ERROR LSBs ------ ------- ------ ---- ------- ------ ---- 1 1.4142 0.4142 3392.8 1.4142 0.3178 2603.8 2 0.6324 0.3676 3011.2 1.8973 0.1653 1354.2 3 1.0737 0.0737 603.8 1.6873 0.0448 366.8 4 0.8561 0.1440 1179.2 1.8074 0.0753 617.2 5 0.9672 0.0329 269.2 1.7505 0.0185 151.2 6 1.0214 0.0213 174.8 1.7195 0.0126 102.8 7 0.9944 0.0056 46.2 1.7351 0.0031 25.2 8 1.0079 0.0079 64.8 1.7274 0.0046 37.8 9 1.0011 0.0011 8.8 1.7313 0.0007 5.8 10 0.9978 0.0022 18.2 1.7333 0.0012 10.2 11 0.9994 0.0006 5.2 1.7323 0.0003 2.2 12 1.0002 0.0002 1.8 1.7318 0.0002 1.8 13 0.9999 0.0002 1.2 1.7321 0.0000 0.2 14 0.9996 0.0004 3.2 1.7321 0.0000 0.2 15 0.9998 0.0003 2.2 1.7321 0.0000 0.2

更多关于

全部折叠

CORDIC

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

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

更多关于

算法

全部折叠

信号流图

CORDIC旋转内核

X表示实部,Y表示虚部,和Z代表θ。该算法取的初始值为XY,Z从输入,r而且θ

fimath传播规则

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

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

  • OverflowAction- - - - - -包装

  • RoundingMethod- - - - - -地板上

输出没有附加fimath

扩展功能

版本历史

在R2011a中引入