《低时延CORDIC算法计算平方根电路设计研究.doc》由会员分享,可在线阅读,更多相关《低时延CORDIC算法计算平方根电路设计研究.doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、低时延CORDIC算法计算平方根电路设计研究摘要:开平方运算广泛应用于数值分析、调制解调、图像处理等领域,而应用坐标旋转数字计算(Coordinate Rotation Digital Computer,CORDIC)进行平方根运算是一种新应用.基本CORDIC算法精度必须用迭代次数作保证,而较多的迭代次数会导致时延过大等问题,通过运用建立查找表、单向旋转、合并迭代和免除补偿因子等手段,提出一种能够免去大部分迭代运算的改进CORDIC算法用于平方根计算.相较于基本算法计算平方根,该改进算法使用了一半的时钟周期便能得到输出结果,大大减少了输出时延,而且可以达到较高的计算精度,更加适合实时性要求高
2、的应用场合. 关键词:坐标旋转数字计算;平方根计算;单向旋转;合并迭代;数字计算机 中图分类号:TN492 文献标志码:A 开平方运算是一种应用范围广泛的数学运算,比如通信信号解调时计算信号包络需要进行开平方运算,正交调制信号提取相位信息时也需要开平方运算,它也是很多数字校正算法如功率放大器数字预失真参数提取算法中的关键运算1.而平方根运算的精度和速度是开平方电路的主要性能指标.坐标旋转数字计算机(Coordinate Rotation Digital Com?puter,CORDIC)算法2-3是提高平方根运算精度和速度的一种新颖方法,CORDIC算法在其计算过程中只涉及移位操作和加减操作,
3、因此非常适合硬件特别是FPGA实现4.该方法最初用于进行三角函数求值和产生正余弦波形,经过一定推广后也可用于计算双曲线函数5,采用CORDIC算法在双曲线旋转下的向量模式,可以计算平方根. 文献6,7对基本CORDIC算法计算平方根进行了详细阐述,它是一种循环迭代的计算方法,通过迭代运算不断逼近所要旋转的角度.但由于迭代次数过多存在时延偏大的缺陷,同时每次迭代方向必须等待上一次迭代结束,由上次迭代剩余角度符号决定本次迭代旋转方向,限制了算法的运算速度.文献8虽然对模校正因子进行了简化,但最终精度稍有损失,另外还有其他一些改进方法求平方根. 本文在前人对CORDIC算法进行优化基础上提出了一种改
4、进算法求取平方根,将查找表法、单向旋转、合并迭代和基本CORDIC算法相结合,只需进行单向迭代运算,避免了每次旋转方向的不确定,消去了缩放因子9,从而有效提高了算法的工作速度.同时把迭代运算划分为两个阶段完成:第一阶段迭代通过移位运算和减法运算直接实现,第二阶段迭代通过简化蝶形递归运算一步完成.这样大大减少了迭代运算的次数,降低了延时,特别适合实时性要求高的应用场合.本改进算法在XILINX公司xc6vlx75t-3ff484型号FPGA芯片进行了验证,结果表明:在保证与基本CORDIC算法精度相同的情况下,能够有效计算平方根,不但显著减少了算法迭代次数,还有效提高了算法运算速度,本改进算法应
5、用在计算平方根方面的综合性能有了较明显提升和改善. 1基本CORDIC算法 CORDIC算法最早是由J.Volder提出的,它是一种只需通过移位-相加运算不断迭代逼近目标值的计算方法10.在XY坐标平面上将向量(x0,y0)旋转 两向量间坐标变换关系如式(1): 如果去除cos项,可得到向量的伪旋转方程如式(2): CORDIC算法核心在于把旋转角分解为N个递减的小旋转角i进行N步迭代旋转,即限定旋转角度,使tan=di?2-i,其中di=1或-1,表示旋转的方向,x1=(x0-y0tan)?y1=(y0+x0tan)从而可以通过简单移位来完成由tan引入的乘法运-1-i算.任意角度的旋D可通
6、过一系列=tan(2)的角度旋转迭代完成,在这里引入了角度累加器:zi+1=ziCdi?i用来在每次迭代过程中追踪累加后剩余的旋转角度,该剩余的旋转角度确定旋转的方向,若zi 0,di=1;否则di=-1.那么第i+1次角度的向量伪旋转方程可表示为式(3): 正如前面所述,如果消去了cosi项,迭代方程(2)就只有移位和加减操作.当cosi项经过N步旋转后可得到模校正因子Kn,当N确定时Kn就是一个 常量,而常数项Kn可以在系统的其他地方进行补偿,Kn表达式如式(4): CORDIC算法也可以用于投影计算,当将向量(x,y)投影到x轴时,此时旋转方向由y确定.若y0,d=1;否则d,=-1.迭
7、代的最终值为式(6): 扩展迭代方程式,CORDIC算法可以用于计算双曲线方程,扩展后的向量伪旋转方程为式(7): 对于平方根运算采用的是双曲线方程,而且迭代模式为投影模式,迭代的最终值为式(8): 如果要求值a的平方根,只需要将x、y分别赋值为a+1和a-1,带入式(8)可得xn=2a,再将其除以2即为a. 2改进的低时延CORDIC算法 2.1确定旋转方向 低时延CORDIC算法核心在于确定了每次迭代的旋转方向,这样就使合并迭代成为可能.与基本CORDIC算法令每次旋转角度为=tanh-(12-)i不同,这里令每次旋转角度为=2-i.任意角度的旋转可通过一系列=2-i的角度旋转迭代完成,总旋转角度为tanh?y0,将总旋转角度使用二进制表示,若二进制数为1,则进行tanh(2-)i的迭代旋转;否则不进行第i次迭代旋转.这里令x0和y0皆为正数,那么第i+1次角度的向量伪旋转方程可表示为式(9): 2.2建立输入值查找表 根据输入的x0和y0建立反双曲正切查找表11.查找表中存储对应的以15位二进制数表示的 值,用来作为旋转迭代的方向. 在FPGA中不能直接求取总旋转角度 第 5 页 共 5 页