CORDIC算法笔记整理
CORDIC算法有两种模式,分别为旋转模式和向量模式。而在数字硬件实现混频处理时,CORDIC算法是比较好的方法,使用的是CORDIC的旋转模式,只需通过移位操作和加法就可以实现频谱搬移的乘法操作。
1 CORDIC算法理解
1.1 单次旋转
对于CORDIC算法的理解先从简单的开始——从一个角度的(x1,y1)旋转到角度的(x2,y2),如下图所示。
假设图中圆的半径为L,则有如下的关系:
,,
因此可以得出如下关系式:
对上式提出表示成如下:
因此每次旋转一个角度对应的x和y都会有个缩放因子,旋转结束后需要将总的缩放系数还原。
1.2 多次旋转
上面将的是将一个角度进行单次旋转到另一个角度的表示,如果一个角度需要旋转多次逼近目标旋转角度,可以将单次旋转进行多次,用矩阵的方式来表示则更容易理解,矩阵形式如下图所示。
以此类推,可以推出(x2,y2)到(x1,y1),(x1,y1)到(x0,y0)的旋转矩阵。
此时缩放系数也好理解,就是。只要n取得足够大,缩放系数就无限接近1.647,因此1.647也被用作缩放系数常数。
从(x0,y0)到(x1,y1)旋转第一次的角度记为,从(x1,y1)到(x2,y2)旋转第一次的角度记为,……而我们旋转的角度为,因此只需要知道我们需要旋转的角度,就可以实现通过一系列小角度的连续旋转来完成。如果规定每次旋转的角度为,则有利于硬件实现,可以用查表的方式实现的计算。
n | ||
0 | 45 | |
1 | 26.55 | |
2 | 14.03 | |
n |
上图中的,由于的角度范围为(),取值存在负数,而正切表中存放的是正数,故为符号位,对应当前输入位于()还是(),大于0则符号位为正,小于0则符号位为负。
2 CORDIC在频谱搬移数字实现中的应用
频谱搬移包括了上变频(DUC)和下变频(DDC),其实现的理论框图如下图所示。
他们可以通过NCO(数控振荡器)产生特定频率的载波信号实现频谱的搬移,也可以通过CORDIC算法实现频谱的搬移。前者需要用到乘法器和NCO模块,对于硬件资源很紧俏的情况,一般会选择CORDIC算法,因为它只需要通过加法器和移位器实现。
在DDC中输入信号表示为和,其中,,为信号频率,为载波频率,为固定相位。DDC的目标是去掉载波,保留信号,即最终需要的是信号为,即需要将输入信号旋转的角度为,其中,T为采样周期,为采样率。因此DDC输入信号可表示为和,因此DDC每次输入以下信号的瞬时相位为,需要旋转的角度为。
换一种方式理解,由于数字系统的输入数据是连续不断的,每个输入数据为,也就是说每个输入数据需要去掉的相位为,即只需要知道输入信号的初始相位和相位步进以及输入的序号n,便可知道每个输入数据对应需要去掉的相位。
输入的数据都需要将旋转到0,即每个输入数据都需要旋转多次将角度逼近0,旋转的次数越多越逼近0,次数越多逼近的角度越小,具体需要旋转的次数依据算法能接受的算法性能和精度来选取。
同样的在DUC中输入信号为和,在DUC后需要输出的信号为和,因此旋转的角度依然是。
需要注意的点是,在DDC中需要将逐次旋转到0,在DUC中是需要将0旋转到。即只要知道了载波频率和信号采样率,就可以通过cordic算法实现频谱的搬移。
需要注意的一点是:由于数字系统输入信号的初始相位不能准确的知道,所以设计时将初始相位最好设计成寄存器可配,方便后期调整。
3 参考资料
参考文献:
[1] 耿丹,CORDIC算法研究与实现,遥测遥控,2007.11, vol.28
[2] 杨林,OFDM系统NS-CFR技术研究与实现,2023.6
如有错误不对处,欢迎指出。