CN103713878B - 一种应用补码方法的正余弦cordic算法在fpga实现的方法 - Google Patents
一种应用补码方法的正余弦cordic算法在fpga实现的方法 Download PDFInfo
- Publication number
- CN103713878B CN103713878B CN201410012830.6A CN201410012830A CN103713878B CN 103713878 B CN103713878 B CN 103713878B CN 201410012830 A CN201410012830 A CN 201410012830A CN 103713878 B CN103713878 B CN 103713878B
- Authority
- CN
- China
- Prior art keywords
- cosine
- sine
- cordic algorithm
- rotation
- angle
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种应用补码方法的正余弦CORDIC算法在FPGA实现的方法,该方法包括:采用数学归纳法由CORDIC算法推导正余弦CORDIC算法;采用补码法判断正余弦CORDIC算法坐标旋转方向,根据坐标旋转方向求出旋转坐标量,获取旋转坐标运算结果;通过对正余弦CORDIC算法的仿真实验,对旋转坐标运算结果进行分析。本发明能有效解决迭代法不停迭代过程所消耗很多时间资源与流水线所消耗的逻辑资源的缺点,减少比较次数,减少时间延迟,能更好地解决实时性问题,在信号实时计算中具有重要的实际意义。
Description
技术领域
本发明涉及一种应用补码方法的正余弦CORDIC算法,尤其涉及一种应用补码方法的正余弦CORDIC算法在FPGA实现的方法。
背景技术
坐标旋转数字计算(Coordinate Rotation Digital Computer,CORDIC)算法是1959年由Volder J提出,通过一系列固定与运算基数有关角度不断偏摆迭代以逼近所需旋转角度,由简单加法、移位操作即可完成三角函数、指数函数、对数函数等超越函数的计算。1971年Walther J D把圆周旋转、双曲旋转和直线旋转统一成标准CORDIC迭代方程,进一步增加算法运算功能。CORDIC算法具有规则化、结构简单的特点,容易通过硬件方法实现。流水线法、迭代法是目前CORDIC算法在FPGA实现的主要方法。其中流水线法基于并行结构,处理速度快,而带来结构复杂、占用硬件资源多的问题,初始时延较大;迭代法基于串行结构,结构简单、占用资源少,则存在迭代次数多、运算速度慢的问题,初始时延较大。为提高CORDIC算法在FPGA实现性能,国内外开展很多有益研究,从不同角度对CORDIC算法进行结构改进,减少存储单元、降低功耗,但部分仍存在算法复杂的问题。为此,本发明针对CORDIC算法在FPGA实现存在问题,研究通项式正余弦CORDIC算法,并在FPGA实现本算法。
发明内容
为解决上述技术问题,本发明的目的是提供一种应用补码方法的正余弦CORDIC(Coordinate Rotation Digital Computer,坐标旋转数字计算)算法在FPGA实现的方法,该方法降低结构复杂度、减少迭代次数和时间延迟,提高实时性。
本发明的目的通过以下的技术方案来实现:
一种应用补码方法的正余弦CORDIC算法在FPGA实现的方法,包括:
A采用数学归纳法由CORDIC算法推导正余弦CORDIC算法;
B采用补码法判断正余弦CORDIC算法坐标旋转方向,根据坐标旋转方向求出旋转坐标量,获取旋转坐标运算结果;
C通过对正余弦CORDIC算法的仿真实验,对旋转坐标运算结果进行分析。
与现有技术相比,本发明的一个或多个实施例可以具有如下优点:能有效解决迭代法不停迭代过程所消耗很多时间资源与流水线所消耗的逻辑资源的缺点,减少比较次数,减少时间延迟,能更好的解决实时性问题,在信号实时计算中有重要的实际意义。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1是应用补码方法的正余弦CORDIC算法在FPGA实现的方法流程图;
图2是直角坐标系旋转向量图;
图3是基于通项法的正余弦函数CORDIC算法流程图;
图4是传统流水线法、传统迭代法和通项法的仿真模拟波形图;
图5是传统流水线法、传统迭代法和通项法的仿真延时情况图。
具体实施方式
容易理解,根据本发明的技术方案,在不变更本发明的实质精神下,本领域的一般技术人员可以提出本发明的多个结构方式和制作方法。因此以下具体实施方式以及附图仅是本发明的技术方案的具体说明,而不应当视为本发明的全部或者视为本发明技术方案的限定或限制。
下面结合实施例及附图对本发明作进一步详细的描述。
图1是应用补码方法的正余弦CORDIC算法在FPGA实现的方法,该包括:
步骤10将CORDIC算法采用数学归纳法推导正余弦CORDIC算法;
在直角坐标系旋转向量图中(如图2所示),单位向量p0(x0,y0)旋转角θ到pn(xn,yn),可表示为:
将角度θ分成n个递减小角度θi=arctan(2-i)之和,即方向系数di顺时针、逆时针分别取-1、1。令ki=cosθi,引入角度中间变量zi,可由(1)式,可推得CORDIC公式:
由于经过n次旋转后变量zn+1→0,令校模因子则有:
况且有n→∞,K=0.607253。在初值x0=1/K,y0=0,z0=θ情况下,则通过n次迭代后CORDIC公式输出:
[xn+1,yn+1,zn+1]=[cosθ,sinθ,0] (3)
(2)在 情况下,基于CORDIC算法递推公式,有:
可推得:
该式可用数学归纳法加以证明。
①i=1,由式(4)有:
②假设i=n-1时等式成立,即:
当i=n有:
故式(4)成立。并且在n足够大情况下,有:
由CORDIC算法通项公式可看出,计算转化为旋转方向di的移位、加法运算,若能先确定每次旋转方向,则可省去每次判断,用一个时钟即可同时计算任何一项迭代结果,非常适合FPGA实现。若先确定旋转次数n,借助zi计算,di就可确定。
步骤20采用补码法判断正余弦CORDIC算法坐标旋转方向,根据坐标旋转方向求出旋转坐标量,获取旋转坐标运算结果;
(1)判断下次旋转方向di,要根据角度变量zi大小判断,设固定旋转角度位宽为w,zi符号位以及扩展到w位分别表示为Czi、|Czi|w,第i次旋转固定角度的原码、补码及反码分别表示为那么有:
①对于zi>0情况,Czi=0,需顺时针旋转再通过求出下次zi+1,由|Czi|w与异或求得;
②对于zi<0情况,Czi=1,需逆时针旋转由求出zi+1,由先|Czi|w与异或得再加Czi得到。
综合以上分析,可得如下表达式:
其物理意义是:在先知道一系列以及初始值z0、迭代次数n情况下,可借助求zi+1及Czi+1,获得下次di+1,通过一条数据链可连续求出n位旋转方向d1、d2、…、dn。
(2)设坐标(xi、yi)位宽w,di符号位以及扩展到w位分别表示为Cdi、|Cdi|w;xi、yi右移i位后分别表示为xi(>>i)、yi(>>i),它们的反码、补码分别表示为[xi(>>i)]反和[yi(>>i)]反、[xi(>>i)]补和[yi(>>i)]补,那么式(5)计算可用下式实现,这里省略ki,在n足够大下,校模因子用K=0.607253统一处理。
通过一条数据链可连续求出n次旋转坐标(x1、y1)、(x2、y2)…、(xn+1、yn+1)即可获得运算结果xn+1=cosθ,yn+1=sinθ。
步骤30通过对正余弦CORDIC算法的仿真实验,对旋转坐标运算结果进行分析,如图3仿真试验的实现步骤如下:
(1)初始化旋转坐标变量初值和初始角度值,确定输入角度位宽、迭代次数等参数。
(2)输入角度范围转换和数据浮定点格式转换,根据输入角度的大小,转化为到之间,如果则如果 则如果则如果则θd=θ,最终转化为到的角度值;并根据位宽把角度浮点数转化为定点数。本算法采用13位位宽,则以4096做为基数表示1,则角度θd=π*4096*θ/180。
(3)应用补码法求解角度变量zi+1,确定旋转方向di,求解旋转坐标变量(xi+1,yi+1),按公式连续迭代n次,角度变量zi=0,输出待求角度的正弦和余弦值,即xn+1=cosθ,yn+1=sinθ。
(4)通过仿真,对计算速度、初始时延、存储资源和运算精度进行分析。
计算速度分析,如图4所示,设置时钟频率为100MHz,迭代次数为8次,输入角度采用13位位宽,添加测试文件,输入角度θ在为0°~360°,添加cosθ输出作为观察信号(sinθ类似),波形显示方式。可以看出,通项法在采取仅流水线所需1/6左右寄存器情况下,通项法、流水线输出波形几乎同步,而迭代法则慢得非常多。
初始时延分析,参见图5,输出直接采用数字表示方式,选择θ=0°作为观察对象,图中4097处表示cosθ=1、时钟周期为T。可以看出,通项法的初始时延3T明显优于传统迭代法、流水线法的初始时延11T。
存储资源分析,参见表1,输入角度采用13位位宽迭代法、流水线、通项法所需的逻辑单元(ALUTs)以及寄存器(registers)分别为330、369、370和168、322、52,这三种方法所需逻辑单元比较接近,但通项法使用寄存器要少得多,仅流水线所需的1/6左右,硬件资源明显减少。
表1
w=13下硬件开销、初始时延比较表
运算精度分析参见表2,采用13位运算精度,量化误差为1/4096,cosθ迭代值与cosθ函数真值的差值最大为0.0076,约0.8%的计算误差,在一定要求下,这个精度是可以接受的。
表2
任意角度输入cosθ运算值与计算值的比较表
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (5)
1.一种应用补码方法的正余弦CORDIC算法在FPGA实现的方法,该包括:
A采用数学归纳法由CORDIC算法推导正余弦CORDIC算法;
B采用补码法判断正余弦CORDIC算法坐标旋转方向,根据坐标旋转方向求出旋转坐标量,获取旋转坐标运算结果;
C通过对正余弦CORDIC算法的仿真实验,对旋转坐标运算结果进行分析;
所述步骤B中采用补码法判断坐标旋转方向具体包括:
根据角度中间变量zi大小判断,zi符号位为Czi,设固定旋转角度位宽为w,zi扩展到w位时的符号位为|Czi|w,第i次旋转固定角度的原码、补码及反码分别表示为所述i=0,1,2……n,其公式为:
由Czi+1可获得下一次di+1,通过一条数据链可连续求出n位旋转方向d1、d2、…、dn。
2.根据权利要求1所述的应用补码方法的正余弦CORDIC算法在FPGA实现的方法,其特征在于,所述步骤A具体包括:
在直角坐标系旋转向量图中,确定单位向量p0(x0,y0)旋转角θ到pn(xn,yn)的关系式;
根据所述单位向量p0(x0,y0)旋转角θ到pn(xn,yn)的关系式得到CORDIC公式,从而计算转化为旋转方向的移位和加法运算,确定正余弦CORDIC算法坐标旋转次数,通过角度变量确定旋转坐标方向。
3.根据权利要求1所述的应用补码方法的正余弦CORDIC算法在FPGA实现的方法,其特征在于,所述步骤B具体包括:
用一条数据链连续求出n位正余弦CORDIC算法坐标旋转方向;
通过补码法求解n次旋转坐标值,根据所述坐标值获得正余弦函数运算结果。
4.根据权利要求1所述的应用补码方法的正余弦CORDIC算法在FPGA实现的方法,其特征在于,所述步骤C具体包括:
初始化旋转坐标变量初值和初始角度值,确定输入角度位宽及迭代次数参数;
转换输入角度的范围,并根据位宽将角度浮点数转化为定点数;
应用补码法求解角度变量,确定坐标旋转方向,求解旋转坐标变量,输出待求角度的正弦和余弦值;
对待求角度的正弦和余弦值的计算速度、初始时延、存储资源和运算精度进行分析。
5.根据权利要求1所述的应用补码方法的正余弦CORDIC算法在FPGA实现的方法,其特征在于,所述旋转坐标量的求解具体包括:
设旋转坐标(xi、yi)位宽w,第i次旋转方向为di,di的符号位为Cdi,di扩展到w位时的符号位为|Cdi|w,所述i=0,1,2……n;xi、yi右移i位后分别表示为xi(>>i)、yi(>>i),它们的反码、补码分别表示为[xi(>>i)]反和[yi(>>i)]反、[xi(>>i)]补和[yi(>>i)]补,其公式为:
通过一条数据链可连续求出n次旋转坐标(x1、y1)、(x2、y2)…、(xn+1、yn+1〕即可获得运算结果xn+1=cosθ,yn+1=sinθ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410012830.6A CN103713878B (zh) | 2014-01-10 | 2014-01-10 | 一种应用补码方法的正余弦cordic算法在fpga实现的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410012830.6A CN103713878B (zh) | 2014-01-10 | 2014-01-10 | 一种应用补码方法的正余弦cordic算法在fpga实现的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103713878A CN103713878A (zh) | 2014-04-09 |
CN103713878B true CN103713878B (zh) | 2016-08-17 |
Family
ID=50406890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410012830.6A Active CN103713878B (zh) | 2014-01-10 | 2014-01-10 | 一种应用补码方法的正余弦cordic算法在fpga实现的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103713878B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103914625A (zh) * | 2014-04-10 | 2014-07-09 | 电子科技大学 | 基于cordic算法的无线信号测向方法 |
CN104102471B (zh) * | 2014-07-18 | 2017-03-22 | 华南理工大学 | 一种应用fpga定点化技术实现指数cordic算法收敛域扩张的方法 |
CN108416311B (zh) * | 2018-03-14 | 2022-04-19 | 电子科技大学 | 一种基于可编程门阵列和坐标旋转处理的方位角获取方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4945505A (en) * | 1988-10-17 | 1990-07-31 | Raytheon Company | Cordic apparatus and method for approximating the magnitude and phase of a complex number |
CN101930351A (zh) * | 2009-06-26 | 2010-12-29 | 深圳迈瑞生物医疗电子股份有限公司 | 转换运算方法、装置和坐标旋转的数字计算方法、装置 |
CN102789446A (zh) * | 2012-07-11 | 2012-11-21 | 河海大学 | 基于cordic算法的dds信号杂散抑制方法及系统 |
-
2014
- 2014-01-10 CN CN201410012830.6A patent/CN103713878B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4945505A (en) * | 1988-10-17 | 1990-07-31 | Raytheon Company | Cordic apparatus and method for approximating the magnitude and phase of a complex number |
CN101930351A (zh) * | 2009-06-26 | 2010-12-29 | 深圳迈瑞生物医疗电子股份有限公司 | 转换运算方法、装置和坐标旋转的数字计算方法、装置 |
CN102789446A (zh) * | 2012-07-11 | 2012-11-21 | 河海大学 | 基于cordic算法的dds信号杂散抑制方法及系统 |
Non-Patent Citations (2)
Title |
---|
CORDIC 算法的一种补码实现结构设计;孙学;《电讯技术》;20110831;第51卷(第8期);第85页左栏第1段、第85页右栏第1段-第89页右栏第1段 * |
一种改进的CORDIC算法及其FPGA实现;段文伟,于龙洋,李署坚;《微电子学与计算机》;20120229;第29卷(第2期);摘要、第95页右栏最后一段-第98页右栏最后一段 * |
Also Published As
Publication number | Publication date |
---|---|
CN103713878A (zh) | 2014-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107094369A (zh) | 用于提供simd sm3密码散列函数的指令和逻辑 | |
CN102955068B (zh) | 一种基于压缩采样正交匹配追踪的谐波检测方法 | |
CN103226543B (zh) | 一种流水线结构的fft处理器 | |
CN103677738A (zh) | 基于混合模式cordic算法的低延时基本超越函数实现方法及装置 | |
CN106600537B (zh) | 一种反距离权重的异向性三维空间插值方法 | |
CN102722469A (zh) | 基于浮点运算单元的基本超越函数运算方法及其协处理器 | |
CN103176767A (zh) | 一种低功耗高吞吐的浮点数乘累加单元的实现方法 | |
CN108257044A (zh) | 一种基于稳态电流模型的非侵入式负荷分解方法 | |
CN103713878B (zh) | 一种应用补码方法的正余弦cordic算法在fpga实现的方法 | |
CN109739470A (zh) | 一种基于2型双曲cordic任意指数函数的计算系统 | |
CN102542336A (zh) | 一种基于fpga 的三角函数实现方法 | |
CN103150137A (zh) | 一种覆盖全圆周角度的单精度浮点三角函数的实现方法 | |
CN105759119A (zh) | Sdft基波正序分量相位同步方法及系统 | |
CN107202979A (zh) | 相干对数正态分布雷达杂波实时模拟方法及系统 | |
CN104615808B (zh) | 一种待测试硬件运算部件的测试方法及参考模型装置 | |
CN106682732B (zh) | 一种应用于神经网络的高斯误差函数电路 | |
Wang | Design and implementation of CORDIC algorithm based on FPGA | |
CN104102471A (zh) | 一种应用fpga定点化技术实现指数cordic算法收敛域扩张的方法 | |
CN102122180B (zh) | 一种基于fpga的飞轮模拟器 | |
CN102789446A (zh) | 基于cordic算法的dds信号杂散抑制方法及系统 | |
CN208834289U (zh) | 一种三角函数运算电路 | |
CN102868404A (zh) | 基于余弦算法和格雷编码的模数转换方法 | |
CN102999085B (zh) | 一种对数正态杂波的实现方法及装置 | |
CN106134472B (zh) | 基于微分的am-fm信号瞬时频率计算方法 | |
CN205281474U (zh) | 一种可配置的两级流水线六操作数快速加法器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |