CORDIC的硬件算法实现(摘录整理)
2011-07-11 21:05
302 查看
该系统完成的是一个平面坐标旋转如图 1所示,可以看出,将向量(X i ,Y i ) 旋转
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104452092.png)
角,得到一个新的向量
( Xj,Yj)。
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104452616.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107202138493760.png)
将Rcos()展开
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104466171.png)
矩阵形式
硬件上用乘除法很耗资源,未来节省资源采用这样的思路:最常用的代替乘法的方式是移位运算
来看下把这乘法最终转换为移位的思路:
移位运算只能做乘除2. 但这些运算组合可形成大的乘除法
将要旋转的角度分解,每次完成一小块,多次后就可逼近角度值
分解(逼近)方式入下:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104463106.png)
其中的第n次旋转过程
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104466138.png)
第n次的旋转角度必须是这个(n为任意值)(arctan(1)= 45度)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104463945.png)
Sn为符号(-,+)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104466977.png)
,各种
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104473596.png)
组合成
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104478580.png)
(即真正要旋转的角度)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104473879.png)
Zn为未旋转的角度
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104478829.png)
先看下如何消去
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104487891.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104488415.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104481762.png)
随着迭代的增加他将收敛与常数K(或1/P),故可用预先计算来消除.
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151239169.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151231644.png)
··········································································································································································
未旋转的角度减少到0,用伪代码表示为
For n=0 to [inf]
If (Z(n) >= 0) then
Z(n + 1) := Z(n) – atan(1/2^n);
Else
Z(n + 1) := Z(n) + atan(1/2^n);
End if;
End for;
预先计算好arctan(1/2^n)的值,形成查找表的形式,[inf]为需要的迭代次数,每一位需要1次(16轮的迭代将产生16位的结果),如果加入X,Y的计算,用伪代码的表示如下:
For n=0 to [inf]
If (Z(n) >= 0) then
X(n + 1) := X(n) – (Yn/2^n);
Y(n + 1) := Y(n) + (Xn/2^n);
Z(n + 1) := Z(n) – atan(1/2^n);
Else
X(n + 1) := X(n) + (Yn/2^n);
Y(n + 1) := Y(n) – (Xn/2^n);
Z(n + 1) := Z(n) + atan(1/2^n);
End if;
End for;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使Z趋向于0
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104497792.png)
存在以下有趣的情况:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104494728.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121958527194.png)
就是把矢量旋转到x轴上,这时候 x的坐标就是矢量的模啦
注意:参数范围
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107141605172968.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
算法硬件实现原理图:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151242450.png)
X,Y的输入为最原始的x,y值;k的输入为确定arctan(1/2^k) ;
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151245482.png)
要旋转的角度
数据最高位为符号位1为负 0为正
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151244053.png)
···
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151247401.png)
左移右移k =n来完成·····
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151242384.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107202138528413.png)
···
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151253987.png)
···
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151259286.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151257858.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151256429.png)
····
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151255873.png)
这个反馈回路来完成迭代,一次次小的旋转最终完成大的旋转
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
预先计算好arctan(1/2^k)的值,形成查找表的形式
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151269220.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104473879.png)
···
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151263332.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151266679.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151261663.png)
这个回路····· Z(n + 1) := Z(n) +atan(1/2^n);
Z(n + 1) = Z(n) -atan(1/2^n);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151266646.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151272709.png)
判断Z(n),看是加还是减(
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151272153.png)
?
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151278216.png)
? )
If (Z(n) >= 0) then
X(n + 1) := X(n) – (Yn/2^n);
Y(n + 1) := Y(n) + (Xn/2^n);
Z(n + 1) := Z(n) – atan(1/2^n);
Else
X(n + 1) := X(n) + (Yn/2^n);
Y(n + 1) := Y(n) – (Xn/2^n);
Z(n + 1) := Z(n) + atan(1/2^n);
End if;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618325832.png)
的硬件实现:
先给出RTL的图:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618326671.png)
思路:
这里k有三位,故整个移位过程分3步进行 即 single ; double; triple
这三部分是将数依次移动 2^0, 2^1, 2^2
实例:
k = 3’b101;
k[0] = 1; 故数右移1*2^0位
k[1] = 0; 故数右移0*2^1位
k[2] = 1; 故数右移1*2^2位
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618323291.png)
最终右移啦5位
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618333225.png)
k控制的的选择器
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618334064.png)
二进制角度表示查找表表 硬件实现
Look-Up Table
这儿用12位2进制数表示角度(bit[11],bit[10]……bit[0])
首先确定12位数与角度的关联:
bit[11] 表示-180度 (1:出现-180;0:不出现-180; 方便与后边的数累加 即可表示-180~ +180的值)
bit[10] 表示+90度
bit[9:0] 表示+90/(2^n)
(n值得确定方式为:
1 为bit[9]
`
`
`
10 为bit[0]
)(其实就是角度减半减半再减半)
verilog 描述:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618344555.png)
另外由于旋转因子需要进行0°、-90°或+90°三种预旋转,所以预旋转还要分配两位二进制数,这样存储旋转系数就为12位的
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618345601.png)
硬件实现
12-bit Full Adder
有点像异或门做选择器,呵呵
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618358916.png)
二进制与1异或 相当于取反 取反后二进制的位置与原先的位置是对称的 故可以此表示-180 ~ +180
当与0异或时 原数不变
当sign = 0 时做加法
当sign = 1 时做减法 (其实是改变后的加法)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618358850.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618355785.png)
:4 Bit Full Adder
这个4位的全加器就多讲啦
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618362372.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
最后:
Vectoring CORDIC 用于计算复数的模
用迭代使Y趋向0 就是将矢量旋转到x轴上 此时x轴坐标就是 矢量的模;
需要注意的是:
在迭代之前要保证矢量在(-90,,90)之间
操作方法是 当矢量在地1,2象限(0,180)是-90度
当矢量在地3,4象限(-180,0)时+90度
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/20110712195853159.png)
参考资料:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104493615.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104505774.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151272643.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104452092.png)
角,得到一个新的向量
( Xj,Yj)。
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104452616.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107202138493760.png)
将Rcos()展开
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104466171.png)
矩阵形式
硬件上用乘除法很耗资源,未来节省资源采用这样的思路:最常用的代替乘法的方式是移位运算
来看下把这乘法最终转换为移位的思路:
移位运算只能做乘除2. 但这些运算组合可形成大的乘除法
将要旋转的角度分解,每次完成一小块,多次后就可逼近角度值
分解(逼近)方式入下:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104463106.png)
其中的第n次旋转过程
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104466138.png)
第n次的旋转角度必须是这个(n为任意值)(arctan(1)= 45度)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104463945.png)
Sn为符号(-,+)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104466977.png)
,各种
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104473596.png)
组合成
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104478580.png)
(即真正要旋转的角度)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104473879.png)
Zn为未旋转的角度
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104478829.png)
先看下如何消去
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104487891.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104488415.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104481762.png)
随着迭代的增加他将收敛与常数K(或1/P),故可用预先计算来消除.
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151239169.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151231644.png)
··········································································································································································
未旋转的角度减少到0,用伪代码表示为
For n=0 to [inf]
If (Z(n) >= 0) then
Z(n + 1) := Z(n) – atan(1/2^n);
Else
Z(n + 1) := Z(n) + atan(1/2^n);
End if;
End for;
预先计算好arctan(1/2^n)的值,形成查找表的形式,[inf]为需要的迭代次数,每一位需要1次(16轮的迭代将产生16位的结果),如果加入X,Y的计算,用伪代码的表示如下:
For n=0 to [inf]
If (Z(n) >= 0) then
X(n + 1) := X(n) – (Yn/2^n);
Y(n + 1) := Y(n) + (Xn/2^n);
Z(n + 1) := Z(n) – atan(1/2^n);
Else
X(n + 1) := X(n) + (Yn/2^n);
Y(n + 1) := Y(n) – (Xn/2^n);
Z(n + 1) := Z(n) + atan(1/2^n);
End if;
End for;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使Z趋向于0
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104497792.png)
存在以下有趣的情况:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104494728.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121958527194.png)
就是把矢量旋转到x轴上,这时候 x的坐标就是矢量的模啦
注意:参数范围
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107141605172968.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
算法硬件实现原理图:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151242450.png)
X,Y的输入为最原始的x,y值;k的输入为确定arctan(1/2^k) ;
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151245482.png)
要旋转的角度
数据最高位为符号位1为负 0为正
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151244053.png)
···
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151247401.png)
左移右移k =n来完成·····
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151242384.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107202138528413.png)
···
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151253987.png)
···
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151259286.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151257858.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151256429.png)
····
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151255873.png)
这个反馈回路来完成迭代,一次次小的旋转最终完成大的旋转
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
预先计算好arctan(1/2^k)的值,形成查找表的形式
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151269220.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104473879.png)
···
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151263332.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151266679.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151261663.png)
这个回路····· Z(n + 1) := Z(n) +atan(1/2^n);
Z(n + 1) = Z(n) -atan(1/2^n);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151266646.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151272709.png)
判断Z(n),看是加还是减(
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151272153.png)
?
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151278216.png)
? )
If (Z(n) >= 0) then
X(n + 1) := X(n) – (Yn/2^n);
Y(n + 1) := Y(n) + (Xn/2^n);
Z(n + 1) := Z(n) – atan(1/2^n);
Else
X(n + 1) := X(n) + (Yn/2^n);
Y(n + 1) := Y(n) – (Xn/2^n);
Z(n + 1) := Z(n) + atan(1/2^n);
End if;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618325832.png)
的硬件实现:
先给出RTL的图:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618326671.png)
思路:
这里k有三位,故整个移位过程分3步进行 即 single ; double; triple
这三部分是将数依次移动 2^0, 2^1, 2^2
实例:
k = 3’b101;
k[0] = 1; 故数右移1*2^0位
k[1] = 0; 故数右移0*2^1位
k[2] = 1; 故数右移1*2^2位
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618323291.png)
最终右移啦5位
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618333225.png)
k控制的的选择器
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618334064.png)
二进制角度表示查找表表 硬件实现
Look-Up Table
这儿用12位2进制数表示角度(bit[11],bit[10]……bit[0])
首先确定12位数与角度的关联:
bit[11] 表示-180度 (1:出现-180;0:不出现-180; 方便与后边的数累加 即可表示-180~ +180的值)
bit[10] 表示+90度
bit[9:0] 表示+90/(2^n)
(n值得确定方式为:
1 为bit[9]
`
`
`
10 为bit[0]
)(其实就是角度减半减半再减半)
verilog 描述:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618344555.png)
另外由于旋转因子需要进行0°、-90°或+90°三种预旋转,所以预旋转还要分配两位二进制数,这样存储旋转系数就为12位的
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618345601.png)
硬件实现
12-bit Full Adder
有点像异或门做选择器,呵呵
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618358916.png)
二进制与1异或 相当于取反 取反后二进制的位置与原先的位置是对称的 故可以此表示-180 ~ +180
当与0异或时 原数不变
当sign = 0 时做加法
当sign = 1 时做减法 (其实是改变后的加法)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618358850.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618355785.png)
:4 Bit Full Adder
这个4位的全加器就多讲啦
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107121618362372.png)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
最后:
Vectoring CORDIC 用于计算复数的模
用迭代使Y趋向0 就是将矢量旋转到x轴上 此时x轴坐标就是 矢量的模;
需要注意的是:
在迭代之前要保证矢量在(-90,,90)之间
操作方法是 当矢量在地1,2象限(0,180)是-90度
当矢量在地3,4象限(-180,0)时+90度
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/20110712195853159.png)
参考资料:
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104493615.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112104505774.png)
![](http://images.cnblogs.com/cnblogs_com/sleepy/201107/201107112151272643.png)
相关文章推荐
- 百度登录算法分析和实现(中 - 整理篇)
- FPGA加三移位算法:硬件逻辑实现二进制转BCD码
- 基于FPGA的Cordic算法实现
- 关于RSA硬件算法的实现问题!
- 文本相似度算法的整理和python实现
- 使用RSA非对称密钥算法实现硬件设备授权
- 硬件中的三角函数计算 Cordic算法入门
- 算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描
- [C++] 测试硬件popcnt(位1计数)指令与各种软件算法,利用模板实现静态多态优化性能
- Cordic算法——verilog实现
- 算法经典面试题整理(java实现)
- FFT算法8点12位硬件实现 (verilog)
- 算法整理(二)---高速排序的两种实现方式:双边扫描和单边扫描
- 韩顺平_PHP程序员玩转算法公开课(第一季)07_使用数组实现堆栈_学习笔记_源代码图解_PPT文档整理
- C/C++经典算法精华整理(3)-实现栈的数据结构
- 基于硬件的ORB特征提取与实现(第一部分)——特征点算法仔细分析
- CRC的校验原理及硬件、软件算法实现
- 算法整理——非对称密钥加密RSA数学相关与简单实现
- 《编程实用算法实现整理》系列技术文章整理收藏
- R语言算法实现整理