一种用于 CORDIC 算法模校正的电路装置及方法 技术领域 本方法属于数字电路处理的技术领域, 具体的说, 涉及 CORDIC 算法的模校正单元 的处理电路装置。
背景技术 坐标旋转数字计算机 (Coordinate Rotation Digital Computer, 简称 CORDIC) 是由 J.Volder 在 1959 年提出的, 是一种在平面直角坐标系和极坐标系之间自由坐标变换 算法。1971 年, Walther 提出了统一的 CORDIC 算法, 把圆周系统, 线性系统和双曲系统的 CORDIC 算法统一到了同一个迭代方程中去, 从而推动了 CORDIC 算法的发展。
CORDIC 算法从广义上讲是一种数值逼近算法, 通过迭代的方式不断去逼近真实数 值, 逼近的过程是通过一系列微旋转角度的偏摆, 整个算法只需要移位和加法运算。在乘 法, 除法, 向量旋转, 三角函数等运算中, CORDIC 算法得到了广泛的应用。
虽然 CORDIC 算法得到了广泛的应用, 但是它还是暴露除了一些缺点。由于算法采 用的旋转方式, 导致旋转完成之后的向量的模会大于原始向量, 这样就需要我们对经过旋 转完成后的向量进行模校正处理, 根据旋转的级数不同, 校正因子的大小也不一样。 传统的 模校正方法是根据旋转级数计算出校正因子的大小, 并在旋转的最后一级结束后直接乘以 校正因子的方法来进行模校正, 这种方法的缺点在于模校正单元破坏了整个电路统一的迭 代结构, 引入的乘法运算也将会降低系统的工作频率从而影响到系统的吞吐效率。
发明内容 为了克服传统模校正方法对系统工作频率的影响, 本发明提供了一种用于 CORDIC 算法模校正的电路装置及方法。
为了实现发明目的, 本发明的技术方案是 : 一种用于 CORDIC 算法模校正的电路装 置, 其特征在于, 包括原始计算通路和模校正通路, 所述原始计算通路的输出连接两个 RAM 即 RAM-1 和 RAM-2, RAM-1、 RAM-2 的输出分别连接模校正通路的 x、 y 两个通道的输入端 ;
所述原始计算通路包括 x 通道和 y 通道, 其中每个通道都含有一个加法器, 一个移 位器和一个多路选择器, 多路选择器的输入端连接本通道的原始输入和加法器的输出端, 当新开始一个运算时, 多路选择器选择本通道的原始输入, 其他的时间均选择加法器的输 出, 多路选择器的输出端连接至本通道加法器的输入端和另一通道的移位器的输入端, 移 位器的输入端连接另一通道的多路选择器的输出端, 加法器的输入端则连接本通道移位器 和本通道多路选择器的输出端 ;
所述模校正通路同样包括 x 通道和 y 通道, 模校正因子存储在模校正因子模块中, 每一条通道均包括一个多路选择器、 两个移位器、 一个判决器和一个加法器 ; 对于 x 通道, 第一移位器的输入端连接模校正因子模块和本通道的 RAM-1, 第一移位器的输出端连接第 一判决器, 第一判决器的输出端连接 x 通道加法器, 多路选择器的输入端连接加法器的输 出端, 多路选择器的另一个输入端是初始值, 当第一级进行模校正时多路选择器选择初始
值, 其他时间均选择加法器的输出, 多路选择器的输出端连接至本通道加法器的输入端和 y 通道的第四移位器的输入端, 第三移位器的输入端连接 y 通道的多路选择器的输出端, 加 法器的输入端则连接本通道第三移位器的输出端, 本通道多路选择器的输出端以及本通道 第一移位器的输出端 ; 所述 y 通道的连接情况与 x 通道连接情况相同。
为了实现发明目的, 本发明的另一技术方案是 : 一种用于 CORDIC 算法模校正的方 法, 包括步骤 :
步骤 1. 首先计算出模校正的值 K 的大小, 每一级运算都对应一个模校正因子 ai, -i 且 ai ∈ {0, 2 }, 并将每一级的模校正因子存入模校正因子模块 ;
步骤 2. 原始计算通路按照传统 CORDIC 算法的旋转结构进行迭代, 从每一级迭代 后的 x 通道与 y 通道的值都存储下来, 分别存入 RAM-1, RAM-2 ;
步骤 3. 模校正通路首先根据当前运算的级数选择模校正因子模块中的模校正因 子, 根据模校正因子为 0 或 2-i 对原始计算通路的输出值进行移位, 若模校正因子为 2-i, 则 需要进行移位数等于当前级数 i 的移位操作, 若模校正因子为 0, 则不需要对原始计算通路 的输出值进行移位操作 ;
步骤 4. 多路选择器根据当前运算的级数选择使用初始值还是加法器上一级输出 的值, 只有当是第一级模校正运算时多路选择器才选择初始值, 其余级运算多路选择器均 选择加法器上一级的输出 ; 步骤 5. 多路选择器的输出进行移位操作, 移位的位数与本级微旋转级数相同 ;
步骤 6. 当本级微旋转对应的模校正因子为 0 时, 此时判决器不将原始计算通路的 计算结果送入加法器, 所以加法器对多路选择器的输出和另一通道经过移位后的数据进行 运算 ; 当本级微旋转对应的模较正因子不为 0 时, 此时判决器将原始计算通路本级运算对 应的计算结果经过步骤 3 移位后的数据送入加法器, 所以加法器对多路选择器的输出、 另 一通道经过移位后的数据以及原始计算通路中本级运算对应的结果经过步骤 3 进行移位 后的数据进行运算 ;
步骤 7. 按照以上步骤 1 到 6 经过与原始计算通路相同级数的操作, 模校正通路输 出的值即为经过模校正后的值。
本发明的有益效果是 : 由于进行模校正后的数据的迭代运算与 CORDIC 运算式的 迭代规律相同, 因此本文提出的模校正电路结构可以采用与 CORDIC 运算式中的迭代单元 类似的电路来进行, 模校正的电路装置的结构中设置模校正通路从而避免了使用乘法器造 成的电路不规则的情况, 有效的突破了系统的速度瓶颈。
附图说明
图 1 为向量旋转的示意图。
图 2 为 CORDIC 算法完成向量旋转的示意图。
图 3 为用于 CORDIC 算法模校正的电路装置。 具体实施方式
下面结合附图和具体的实施例对本发明做进一步的说明。
为了方便后面对方案的介绍, 这里先将传统 CORDIC 算法进行推导 :如图 1 所示, 对于向量 (x0, y0), 需要按照 θ ∈ [0, π/2] 进行旋转至 (x′, y′ )。
那么根据三角函数运算法则, 旋转向量 (x′, y′ ) 可以表示为 :
x′= x0cosθ+y0sinθ
(1)
y′= y0cosθ-x0sinθ
式中 x0, y0 为待旋转的向量坐标, x′, y′为需要旋转到的坐标, θ 为目标旋转角, 将式 (1) 写为矩阵形式为 :
我们使用微旋转的思想可以把这一次旋转的角度 θ 分解成为一系列预先确定的 基本角 θi 的线性组合, 这样式 (2) 可以写为 :
(3)
其中 i = 0, 1, 2, ...N-1,δi ∈ {-1, 1}, 这里 N 表示微旋转的次数, 也叫微旋转级数, δi 表示每次微旋转的方向, δi 为 1 时表示逆时针旋转, δi 为 -1 时表示顺 时针旋转, θi 代表预先确定的一组微旋转角。每次进行微旋转的角度 θi 的正切值为 2 的 倍数, 即 tanθi = 2-i, δi 的值通过每次旋转后与目标角度的差值决定。CORDIC 算法旋转 的示意图如图 2 所示, 图中虚线表示目标旋转角, 从图中可以看出旋转不断围绕目标旋转 角度偏摆, 每一次逆时针旋转超过目标旋转角后下一次旋转即做顺时针旋转, 顺时针旋转 小于目标角度后下一次则做逆时针旋转, 通过若干次的旋转最终逼近目标角度。 所以第 i+1 级的旋转迭代方程为 :
zi+1 = zi+δiθi (5) x′= K·xn+1 (6) y′= K·yn+1 式 (4) 进行微旋转的运算, 式 (5) 用来更新累加的角度值, 根据累加的角度值来确定下次旋转的方向。这里 K 是模校正值,
由于 tanθi = 2-i,所以有 :通过式 (8) 可以看出, 当 N →∞时, K ≈ 0.6073, 事实上, 可以证明当微旋转级数 N 大于等于 12 时, K ≈ 0.6073。所以, 不必在每一级旋转后都进行模校正, 可以根据模校正值 K 的特性在各级微旋转结束后做统一校正, 模校正值 K 在微旋转级数超过 12 时可以被当作 一个常量来进行处理。 根据式 (4), 令 则式 (4) 可以写为 :
vi+1 = Pvi (9)
根据 CORDIC 算法, 递推完成后的值还需要乘以一个模校正值 K 所得的值才是经过 旋转后的真实值, 有:
vi+1′= Ki+1·vi+1 (10)
公式 (11) 中, ai 为模校正因子, 其累加一定次数 ( 微旋转的次数 ) 后得到的值为 模校正值 K ; r = 0, 1, 2, ...N-1, 表示当前的微旋转级数。
将式 (9) 和式 (11) 代入式 (10), 可得 :
根据式 (12) 我们可以得到新的用于 CORDIC 算法模校正的方法, 即每一级的校正 后的值等于上一级模校正值经过相对应级数的旋转后的值与本级未进行模校正的值与本 级对应模校正因数的乘积, 并基于上述原理, 提出了新的用于 CORDIC 算法模校正的电路装 置。
如图 3 所示, 一种用于 CORDIC 算法模校正的电路装置, 包括原始计算通路和模校 正通路, 所述原始计算通路的输出连接两个 RAM 即 RAM-1 和 RAM-2, RAM-1、 RAM-2 的输出分 别连接模校正通路的 x、 y 两个通道的输入端 ;
所述原始计算通路包括 x 通道和 y 通道, 其中每个通道都含有一个加法器, 一个移 位器和一个多路选择器, 多路选择器的输入端连接本通道的原始输入和加法器的输出端, 当新开始一个运算时, 多路选择器选择本通道的原始输入, 其他的时间均选择加法器的输 出, 多路选择器的输出端连接至本通道加法器的输入端和另一通道的移位器的输入端, 移 位器的输入端连接另一通道的多路选择器的输出端, 加法器的输入端则连接本通道移位器 和本通道多路选择器的输出端 ;
所述模校正通路同样包括 x 通道和 y 通道, 模校正因子存储在模校正因子模块中, 每一条通道均包括一个多路选择器、 两个移位器、 一个判决器和一个加法器 ; 对于 x 通道, 第一移位器的输入端连接模校正因子模块和本通道的 RAM-1, 第一移位器的输出端连接第 一判决器, 第一判决器的输出端连接 x 通道加法器, 多路选择器的输入端连接加法器的输 出端, 多路选择器的另一个输入端是初始值, 当第一级进行模校正时多路选择器选择初始 值, 其他时间均选择加法器的输出, 多路选择器的输出端连接至本通道加法器的输入端和 y 通道的第四移位器的输入端, 第三移位器的输入端连接 y 通道的多路选择器的输出端, 加
法器的输入端则连接本通道第三移位器的输出端, 本通道多路选择器的输出端以及本通道 第一移位器的输出端 ; 所述 y 通道的连接情况与 x 通道连接情况相同。
下面通过一个具体的实例对上述方案的工作过程做详细的描述 : 一种用于 CORDIC 算法模校正的电路装置及方法。
步骤 1. 首先根据上述公式 (8) 和运算的级数 (N) 计算出模校正的值 K 的大小, 每 -i 一级运算都对应一个模校正因子 ai, 且 ai ∈ {0, 2 }, 并将每一级的模校正因子存入模校正 因子模块 ;
本实施例中, 对于旋转级数大于 12 的情况下, K ≈ 0.6073, 模校正因子的具体数值 如表 1 所示。
表 1 模校正因子具体数值
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15
2-1 0 0 0 2-5 2-6 2-7 2-8 0 0 2-11 2-12 2-13 0 2-15
步骤 2. 原始计算通路按照传统 CORDIC 算法的旋转结构进行迭代, 从每一级迭代 后的 x 通道与 y 通道的值都存储下来, 分别存入 RAM-1, RAM-2 ; 由于原始计算通路按照传统 CORDIC 算法该技术过程在本发明中被作为现有技术, 故而未详细展开描述。 步骤 3. 模校正通路首先根据当前运算的级数选择模校正因子模块中的模校正因 子, 根据模校正因子为 0 或 2-i 对原始计算通路的输出值进行移位, 若模校正因子为 2-i, 则 需要进行移位数等于当前级数的移位操作, 若模校正因子为 0, 则不需要对原始计算通路的 输出值进行移位操作 ;
本实施例中, 根据表 1 中的内容, 由于第一级的模校正因子为 2-1, 故移位器 1 和移 位器 2 需要对原始计算通路第一级的计算结果进行一位的移位操作 ; 同样的, 第 5 级、 第6 级、 第 7 级、 第 8 级、 第 11 级、 第 12 级、 第 13 级和第 15 级同样要对原始计算通路对应微旋 转级数的结果进行与表 1 中内容一致的移位操作, 分别移 5 位、 6 位、 7 位、 8 位、 11 位、 12 位、 13 位和 15 位。其它微旋转级数的原始计算通路的计算结果不进行移位处理 ;
步骤 4. 多路选择器根据当前运算的级数选择使用初始值还是加法器上一级输出 的值, 只有当是第一级模校正运算时多路选择器才选择初始值, 其余级运算多路选择器均 选择加法器上一级的输出 ;
在本实施例中, 当第一级模校正运算开始时, 多路选择器选择初始值作为多路选 择器的输出, 从第二级运算开始, 多路选择器都选择加法器的输出作为多路选择器的输 出;
步骤 5. 多路选择器的输出进行移位操作, 移位的位数与本级微旋转级数相同 ;
在本实施例中, x 通道和 y 通道的多路选择器的输出连接至第三移位器和第四移 位器中, 移位位数与本级运算级数相同, 即当进行第一级模校正运算时, 即对多路选择器的 输出进行 1 位的移位操作, 进行第二级模校正运算时, 即对多路选择器的输出进行 2 位的移 位操作, 其他级数模校正运算的处理依此类推 ;
步骤 6. 当本级微旋转对应的模校正因子为 0 时, 此时判决器不将原始计算通路的 计算结果送入加法器, 所以加法器对多路选择器的输出和另一通道经过移位后的数据进行 运算。当本级微旋转对应的模较正因子不为 0 时, 此时判决器将原始计算通路本级运算对 应的计算结果经过步骤 3 移位后的数据送入加法器, 所以加法器对多路选择器的输出、 另
一通道经过移位后的数据以及原始计算通路中本级运算对应的结果经过步骤 3 进行移位 后的数据进行运算 ;
在本实施例中, 第一级模校正运算时, 由于表 1 中第一级运算对应的模校正因子 不为 0, 所以判决器将第一移位器的输出送至 x 通道的加法器, 所以 x 通道的加法器对第一 判决器、 第三移位器和 x 通道的多路选择器的输出进行运算, 同样地判决器将第二移位器 的输出送至 y 通道的加法器, 所以 y 通道的加法器对第二判决器、 第四移位器和 y 通道多路 选择器的输出进行运算, 所得结果分别反馈至 x 通道与 y 通道的多路选择器, 开始第二级的 运算。根据表 1 所示内容, 第二级的模校正因子为 0, 则第一判决器和第二判决器不将第一 移位器和第二移位器的输出送至 x 通道和 y 通道的加法器, 所以 x 通道的加法器只需要将 x 通道多路选择器与第三移位器的输出作加法运算, 同样地 y 通道的加法器只需要将 y 通道 多路选择器与第四移位器的输出作加法运算 ;
步骤 7. 按照以上步骤 1 到 6 经过与原始计算通路相同级数的操作, 模校正通路输 出的值即为经过模校正后的值。
在本实施例中, 按照以上步骤 1-6 的规则进行完 15 级的运算, 模校正通路两个加 法器所得到的结果即为 x 通道和 y 通道数据经过模校正后的结果。 本领域的普通技术人员将会意识到, 这里所述的实施例是为了帮助读者理解本发 明的原理, 应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的 普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各 种具体变形和组合, 这些变形和组合仍然在本发明的保护范围内。