《CODIC算法原理》word版.doc_第1页
《CODIC算法原理》word版.doc_第2页
《CODIC算法原理》word版.doc_第3页
《CODIC算法原理》word版.doc_第4页
《CODIC算法原理》word版.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-2CORDIC算法与实现2.1 CORDIC算法原理CORDIC是一种迭代算法,它可以用来计算sin,cos等三角函数,计算幅值和相位等到所需的精度,CORDIC算法计算幅值和相位的原理如下:假设直角坐标系内有向量A(Xn,Yn),向量A顺时针旋转n后得到向量B(Xn,Yn),如图2所示。向量A和向量B之间存在以下关系,用矩阵表示为将cosn提出以后得到在这里我们取0i=arctan(1/2i),所有迭代的总和为,其中Si=-1,+1,则tani=Si2-i,可得上式Si中的符号决定了向量的旋转方向,当时Yi0,Si=1,顺时针旋转;当Yi0时,Si=-1,逆时针旋转,式中的cosi=cos(arctan(1/2i),随着迭代次数的增加它收敛于一个常数,我们暂不考虑这个常数增益,这样式(2-3)就变为设总共旋转的角度为,初值为0,则,给定向量 一组初值如下从上面的式子可以看出,当向量A旋转到X轴时,可以得到迭代的结果为 ,即可求得向量A的幅值和相位。由式(2-4)可知每次旋转的角度的正切值都是2的负幂次,在硬件实现时只需要执行右移和相加运算就可以实现每次迭代,易于硬件的实现。2.2 用CORDIC算法的流水结构实现坐标变换CORDIC迭代结构如图3所示,采用流水结构每次迭代完成一次旋转,每级迭代都用寄存器寄存,这样每个时钟周期都可以计算出一次幅度和相位。迭代的次数越多,精度越高,当然耗费的资源也就越多。在数字下变频器输出I,Q两路信号后(输出信号用补码表示),用CORDIC实现坐标变换时,为简化电路结构,只用计算的相角,其他象限的相角,采用处理后再映射的办法求取,冈此,对刚进入的数据会进行预处理。首先就是求输人数据的绝对值,并记录符号位作为处理后象限映射的依据。接下来,会判断I,Q两路数据的大小关系,并将较小的值交换到Q路,这样做的目的是要在同样的迭代次数下,达到更高的迭代精度。进入CORDIC迭代单元前会对I,Q两路数据进行位宽拓展,从而保证CORDIC迭代过程中,不会因截断误差造成太大的偏差。经过CORDIC迭代后所得的幅度值是有增益的,此时需要对其进行修正,另一方面,相位值需根据先前记录的I,Q两路数据的符号位和I,Q两路数据交换的情况作象限映射,表1列出了相位映射的规则。坐标变换模块的实现结构如图4所示。2.3 使用modeIsim仿真的结果图5是当输入激励为I路:sin(sin2f);Q路:COS(COS2f)时的modelsim仿真结果,由图中可以看出坐标变换得出的相位值是一个标准正弦信号,幅度值为恒定值,幅度相位完全正确。2.4 硬件实现结果在硬件实现时,用verilog语言对坐标变换模块进行描述,为满足DDC的精度要求进行了18次迭代,并用DC基于UMC0.18m的库进行了综合,硬件实现结果如图6所示。图6(a)是DC综合后的面积报告,图6(c)是关键路径的时序报告,综合后的最大路径延时为9.77ns,完全可以满足本模块数字下变频器100MHz的处理速度要求,综合出的单元(cell)的总面积仅为0.27。图6(b)是该设计在FPGA上验证的结果,该DDC的工作频率为80MHz,通道2为输入的基带信号频率20kHz,载波频率5MHz,频偏200KHz的FM信号,通道1是通过DDC下变频后交给坐标变化模块的I,O两路信号求出的相位信息,即频率为20kHz的正弦信号,由图可知该没计实现了坐标变换功能。-改进的并行CORDIC算法研究及其FPGA实现(2008-08-22 09:44:33)标签:it 分类:数字信号处理改进的并行CORDIC算法研究及其FPGA实现张 甜, 王祖强,徐 辉 山东大学 信息科学与工程学院, 山东 济南250100摘要: 在介绍基本CORDIC算法原理的基础上,介绍了其改进的并行算法原理。对并行CORDIC算法进行了详细叙述,并且使用Verilog HDL描述了该算法。通过模块复用,并且采用两相门控时钟等方法,节省了FPGA资源,保持了信号的同步性。最后在Quartus II下进行了综合、仿真,取得了良好的仿真结果。关键词: CORDIC BBR MAR FPGACORDIC(Coordinated Rotation Digital Computer),即协调旋转数字计算机,可广泛应用于基本函数的计算,如DSP、FFT、DCT等技术函数的计算。CORDIC算法是Jack Volder于1959年首先提出的。为了扩展可解决的基本函数个数,J.Walter于1971年提出了统一的CORDIC算法(The Unified Cordic Algorithms);2004年,Tso-Bing Juang等又提出了一种改进的并行的CORDIC算法,该改进的算法主要运用BBR(Binary-To-Bipolar Recoding)和MAR(Microrotation Angle Recoding),大大提高了CORDIC算法的迭代速度,并且达到了很高的精度。随着可编程逻辑器件规模的增大和应用范围的扩大,使得利用硬件电路实现该算法成为可能并具有良好的应用价值。1 CORDIC算法原理CORDIC算法可分为旋转(rotation)和定向(vectoring)两种方式,还可分为圆形坐标、双曲线坐标和线形坐标三种方式,圆形坐标下旋转方式的原理公式如下:式中,xi,yi和xi+1,yi+1分别表示旋转前后的向量,i-1,1表示每次旋转的方向。从公式可知,该运算只有移位和相加(相减)运算。为了获得i的值,需另设一个变量zi表示每次旋转后的角度与目标角度的差值,然后利用公式zi+1=zi-iarctan(2-i)进行计算。根据Jack Volder的推导,经过n次迭代,最终可以得到迭代公式如下:通过上面的算法介绍可以看出,每次都要先通过计算zi+1和zi才能得到i的值,这样降低了运算速度。参考文献3就是在此基础上,提出了一种提前算出i的方法,使得速度得以提高。2 并行CORDIC算法原理把需要旋转的角度范围限定在-/4/4之间,并把它分解成下式:3 利用FPGA实现算法利用FPGA实现算法时,采用32位精度,即B=32。根据m计算公式可以计算出m=11。根据输入的值和公式(6),可以计算出前11个值。根据已经计算出的表1可得出。再根据公式(8),(9)计算出剩下的值。经过移位器,加法器最终可以得到旋转后的向量坐标。根据上述原理,需要移位40次。所以可通过反复调用图1所示的模块来节约资源。对于本算法,第i+1个模块的输入为第i个模块的输出,因此,对模块的工作时序有一定的要求。针对FPGA中寄存器资源较为丰富的特点,在上述模块的输入输出端分别加入寄存器,对输入和输出进行锁存;使用两个进程描述移位加法和控制信号,并且使用不同的时钟信号作为敏感信号;为了保持整个设计的同步性,又采用了两相门控时钟进行控制(如图2所示)。图中clk_in作为输入寄存器的时钟,而clk_out作为输出寄存器的时钟。两相门控时钟生成的相关程序如下:always (cnt)begincase (cnt)2d0: clk_out,clk_in=2b01;2d1: clk_out,clk_in=2b10;2d2: clk_out,clk_in=2b00;default:clk_out,clk_in=2b00;endcaseend4 仿真结果 本文在Quartus II环境下对利用Verilog编写的RTL代码进行了综合,使用了115个LAB。由于在一片FPGA芯片中可集成其他相关模块,在系统设计中具有良好的应用价值。对其进行时序分析,本设计可达到的最大时钟为58MHz,满足高速系统设计的要求。图3是在Qua

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论