首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从CORDIC中去除尺度因子

如何从CORDIC中去除尺度因子
EN

Stack Overflow用户
提问于 2015-06-18 09:59:41
回答 2查看 1.2K关注 0票数 2

来自K_i = cos(tan^-1(2^i))的CORDIC。据我所知,K是接近0.607xxx。如何接近0.607xxx

这是否意味着我可以使用0.607xxx而不是cos(tan^-1(2^I))?我引用了这篇文章的话。

我正在尝试实现双曲的tanh函数。到目前为止,我理解(6)方程。我不知道如何制作K和如何使用它?

最新情况:

我想知道在哪里,总尺度的概念应用在进展中,得到正弦,cos角。这里有一个例子,我把指定的角度设为20,我想知道正弦,cos角。该过程如下。

n角值 0.7071 0.7071 0.7071 0.7854 0.7071 0.785398 …… 10 -1 0.9395 0.3426 0.3497 1 0.000976

如果指定的角度是20 degree(0.3491),则可以得到sine (20) = 0.9395 Cos(20) = 0.3497

好了。

但是,我仍然很好奇,总的缩放concept(0.607)应用在哪里?总标度concept(0.607 )在哪里被用来获取sin,因为角度?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-18 12:16:13

CORDIC算法中的每一步都添加了cos(arctan(2^-i)) (或1/sqrt(1+2^-2i))的缩放,因此对于4个步骤CORDIC,总的缩放是:

代码语言:javascript
复制
cos(arctan(2^-0))*cos(arctan(2^-1))*cos(arctan(2^-2))*cos(arctan(2^-3)) = 0.60883

如果添加更多的迭代,则会得到0.607252935和一些迭代。至于如何处理这个因素,这取决于您和您实现的函数。您可能想要删除它并给出不缩放的结果,或者您的消费者可以更容易地处理它。

tanh的例子中,我认为有两个值的除法具有相同的比例,所以在这种情况下它会被抵消。我真的不太确定,因为我没有在这种模式下使用CORDIC,所以你必须自己解决这个问题。

更新

CORDIC的优点是每次迭代都是XY上的一个Y。在你的例子中,你加入了比例因子,它给出了正确的答案,但不是必要的,并且不允许简单的shift + add操作。因此,我们将缩放保留为后操作(或初始化),或者如果后续模块能够处理缩放的答案,则完全退出。

得到sin/cos 20的方法是,从X = 1; Y = 0; Z = 20开始

代码语言:javascript
复制
Z0 = 20 - 45.00 = -25.00; X0 = 1 - 0 = 1; Y0 = 0 + 2^-0 = 1
Z1 = Z0 + 26.57 =   1.57; X1 = X0 + Y0*2^-1 = 1.5000; Y1 = Y0 - X0*2^-1 = 0.5000
Z2 = Z1 - 14.04 = -12.47; X2 = X1 - Y1*2^-2 = 1.3750; Y2 = Y1 + X1*2^-2 = 0.8750
Z3 = Z2 +  7.13 = - 5.35; X3 = X2 + Y2*2^-3 = 1.4844; Y3 = Y2 - X2*2^-3 = 0.7031
Z4 = Z3 +  3.58 = - 1.77; X4 = X3 + Y3*2^-4 = 1.5283; Y4 = Y3 - X3*2^-4 = 0.6104
Z5 = Z4 +  1.79 =   0.02; X5 = X4 + Y4*2^-5 = 1.5474; Y5 = Y4 - X4*2^-5 = 0.5626
Z6 = Z5 -  0.90 = - 0.88; X6 = X5 - Y5*2^-6 = 1.5386; Y6 = Y5 + X5*2^-6 = 0.5868

最后的答案是缩放:cos(20) = X6*0.607 = 0.9339sin(20) = Y6*0.607 = 0.3562。忽略缩放因子的好处应该很明显,每次迭代都是Xi = Xi-1 +- Yi-1 * 2^-i,这是一个移位和添加。您也不需要将缩放因子存储在ROM或其他地方;您所需要的唯一内存是arctan(2^-i)。

请注意,您可以通过使用X = 0.607而不是X = 1来获得未缩放的结果。

票数 3
EN

Stack Overflow用户

发布于 2015-06-18 12:16:39

在使用CORDIC时,通过取sin / cos或sinh / cosh的比率来计算tan和tanh。因为这两个术语都有适用于它们的比例因子,所以K的抵消,你不需要做任何修正。您确实需要注意溢出的潜在问题,并确保X和Y寄存器中有足够的位来保存缩放的值。另一种选择是预先计算X和Y的输入值(乘以0.607),以便在运行算法后增益为1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30912250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档