一种高精度无溢出的圆周旋转cordic算法实现方法和装置制造方法及图纸

技术编号:18289410 阅读:27 留言:0更新日期:2018-06-24 04:05
本发明专利技术公开了一种高精度无溢出的圆周旋转cordic算法实现方法,包括以下步骤:第一步:将输入角度从[0,2π)区间折叠到

【技术实现步骤摘要】
一种高精度无溢出的圆周旋转cordic算法实现方法和装置
本专利技术涉及一种高精度无溢出的圆周旋转cordic算法实现方法和装置。
技术介绍
Cordic算法是一种经典的算法,应用在DA电路中,它能将复杂运算简化成移位操作,极大地节省了资源。在实际cordic算法实现中,有限的级数和处理位数可能会产生溢出,比如在以圆周旋转cordic算法计算工程中应用最广泛的正余弦函数时,如果最后一级发生了溢出,计算结果从7ffff变成了80000(假设处理位数20位),会导致输出从1到-1的极大错误;如果该溢出发生在中间第i级运算,在cordic算法的特色操作——右移i-1位过程中,本应该左补i-1个0,现在变成了左补i-1个1,带来了1/2i-2的误差,该误差将会往后传递影响输出精度。在初始相位附近,正(余)弦值有可能接近或者达到±1,极容易发生溢出,因此会发生较大的输出误差。
技术实现思路
本专利技术所要解决的技术问题在于提供了一种高精度无溢出的圆周旋转cordic算法的实现方法和装置。本专利技术是通过以下技术方案解决上述技术问题的:一种高精度无溢出的圆周旋转cordic算法实现方法,包括以下步骤:第一步:将输入角度从[0,2π)区间折叠到区间;第二步:构建了当前角度,对每一级的输出相位理论值做了跟踪;第三步:在每级cordic运算之前,利用该级的当前角度对上级输出进行了校正;第四步:完成N级cordic运算后根据初始角度和第N级运算结果直接赋值输出。所述第一步具体为:将输入角度从[0,2π)区间的Z折叠到区间的Z0,其它三个象限的映射依据为:所述第二步具体为:在cordic算法的每级迭代中,构建当前累加角度θi;为迭代次数,kj=±1,αj=tan-11/2j-1实际的定点操作中θi和αj均已被量化为和Mz为Z的处理位数,所有符号加上拉线后均表示其量化值。所述第三步具体为:每级cordic运算前根据当前的判别角度值将上级输出的余弦和正弦值校正成其中补码表示的和满足校正方法为:所述第四步具体为:迭代完N次后依据直接赋值,本专利技术还公开了一种高精度无溢出的圆周旋转cordic算法的实现装置,包括以下模块:象限映射模块:用于将输入角度从[0,2π)区间折叠到区间;校正模块:用于构建当前角度,对每一级的输出相位理论值做了跟踪;cordic运算模块:用于在每级cordic运算之前,利用该级的当前角度对上级输出进行了校正;赋值模块:用于完成N级cordic运算后根据初始角度和第N级运算结果直接赋值输出。象限映射模块中,将输入角度从[0,2π)区间的Z折叠到区间的Z0,其它三个象限的映射依据为:校正模块中,在cordic算法的每级迭代中,构建当前累加角度θi;1≤i≤N,N为迭代次数,kj=±1,αj=tan-11/2j-1实际的定点操作中θi和αj均已被量化为和Mz为剩余角度的处理位数,所有符号加上拉线后均表示其量化值。cordic运算模块中,每级cordic运算前根据当前的判别角度值将上级输出的余弦和正弦值校正成其中补码表示的和满足校正方法为:赋值模块中,迭代完N次后依据直接赋值,本专利技术相比现有技术具有以下优点:本专利技术解决了圆周旋转cordic算法溢出问题,严格控制了算法的输出误差,精确地产生了任意相位的正余弦值;算法简单,占用资源少,在实际的DA电路中具有较大的应用意义。附图说明图1是本专利技术实施例的高精度无溢出的圆周旋转cordic算法实现装置的原理框图。具体实施方式下面对本专利技术的实施例作详细说明,本实施例在以本专利技术技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本专利技术的保护范围不限于下述的实施例。首先分析溢出的来源。在圆周旋转cordic算法计算正余弦值时,设置旋转初值则第i步后Yi=Cisin(θi)0.60725<Ci≤1溢出有两种来源,一种来源于理论误差,由于迭代级数有限,根据有关误差理论,|θN-Z0|≤αN,而所以当时有可能出现cos(θN)<0的情况。实际操作中选取迭代次数N足够大时αN很小,因此在理论误差造成的翻转中,|cos(θN)|很小。另一种来源于计算误差,由于实际L位定点操作,在cordic运算向右移位截位的时候,必然至少1/2L的误差,比如L=20时,有可能会出现7ffff到8000的变化。计算误差在每级cordic迭代中都会出现。分析这两种情况可以发现,发生溢出后,错误值的绝对值和准确值差别很小,因此可以在每级cordic迭代前,根据当前角度理论正(余)弦值的正负对上级输出进行校正——如果当前上级输出和理论值不同符号,强制改变上级输出的符号(不改变绝对值)。本实施例和传统cordic算法相比,增加了校正模块和赋值模块。1校正模块的依据。校正模块中当前判别角度本身就是由序列累加而得,因此不存在理论误差,但是存在着计算误差。当高两位相等(也就是异或结果为0)时,意味着理论上的如果最高位为零,意味着Xi≥0,结果正常,直接取值;如果最高位不为零,意味着Xi≤0,此时发生了符号翻转,需要强制改变符号(按位取反即可将80000还原为7ffff)。同理,当高两位不相等(也就是异或结果为1)时,意味着理论上的cos(θi)≤0,如果最高位不为零,Xi<0,直接取值;如果最高位为零,Xi≥0,此时发生了符号翻转,需要强制改变符号(按位取反)。综合以上两种情况可知,当最高位与的高两位异或结果相同时直接取值,不相同时按位取反。对于的处理方法类似。2赋值模块的依据赋值模块在最后一级迭代之后,其中和存在理论误差,同时也存在计算误差。由正余弦函数的性质可知,象限映射模块(前述步骤的第一步)的折叠过程只改变了正余弦值的符号,不改变绝对值——这正好和发生溢出后的效果一样,因此可以将最后一步的误差校正过程和第一步折叠的还原过程进行合并,直接根据的符号位进行校正,校正步骤和每一级的迭代相似,当最高位与的高两位异或结果相同时,判断输出正常直接取值,否者校正,按位取反。对于的处理方法类似。通过仿真,可以看到,在零相位处发生溢出,输出cos值本应该是+1,现在变成了-1;只做赋值模块的校正(专利技术书中校正步骤的第四步)时的仿真,可以看到,零相位处的溢出已经被纠正,但是pi/2相位处中间某级cordic迭代过程发生溢出,导致最终输出误差较大;做完完整校正步骤后的仿真效果,可以看到两处的溢出均已被消除。总之,本专利技术提出的高精度无溢出的圆周旋转cordic算法实现方法,能精确地产生了任意相位的正余弦值,算法简单,占用资源少,以上所述仅为本专利技术的较佳实施例而已,并不用以限制本专利技术,凡在本专利技术的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本专利技术的保护范围之内。本文档来自技高网...
一种高精度无溢出的圆周旋转cordic算法实现方法和装置

【技术保护点】
1.一种高精度无溢出的圆周旋转cordic算法实现方法,其特征在于,包括以下步骤:第一步:将输入角度从[0,2π)区间折叠到

【技术特征摘要】
1.一种高精度无溢出的圆周旋转cordic算法实现方法,其特征在于,包括以下步骤:第一步:将输入角度从[0,2π)区间折叠到区间;第二步:构建了当前角度,对每一级的输出相位理论值做了跟踪;第三步:在每级cordic运算之前,利用该级的当前角度对上级输出进行了校正;第四步:完成N级cordic运算后根据初始角度和第N级运算结果直接赋值输出。2.根据权利要求1所述的高精度无溢出的圆周旋转cordic算法实现方法,其特征在于,所述第一步具体为:将输入角度从[0,2π)区间的z折叠到区间的Z0,其它三个象限的映射依据为:3.根据权利要求2所述的高精度无溢出的圆周旋转cordic算法实现方法,其特征在于,所述第二步具体为:在cordic算法的每级迭代中,构建当前累加角度θi;N为迭代次数,kj=±1,αj=tan-11/2j-1实际的定点操作中θi和αj均已被量化为和Mz为Z的处理位数,所有符号加上拉线后均表示其量化值。4.根据权利要求3所述的高精度无溢出的圆周旋转cordic算法实现方法,其特征在于,所述第三步具体为:每级cordic运算前根据当前的判别角度值将上级输出的余弦和正弦值校正成其中补码表示的和满足校正方法为:5.根据权利要求4所述的高精度无溢出的圆周旋转cordic算法实现方法,其特征在于,所述第四步具体为:迭代完N次后依据直接赋值,6.一种高精度无...

【专利技术属性】
技术研发人员:刘立业陈勇伍小保范欢欢姚瑶孙维佳
申请(专利权)人:中国电子科技集团公司第三十八研究所
类型:发明
国别省市:安徽,34

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1