当前位置: 首页 > news >正文

《基本函数的统一算法》

《基本函数的统一算法》

概要 

本文描述了一种统一的算法,用于在数字计算机上生成三角函数、双曲函数、指数函数、对数函数等基本函数及其反函数。此外,该算法还能执行乘法、除法以及二进制/十进制、十进制/二进制转换。该算法是坐标旋转数字计算机(CORDIC)计算技术的扩展,其特点是采用固定的程序、循环迭代,并且只使用**移位、加法、减法、表查找和位计数**等基本操作。该算法的规整性使其特别适合在只读存储器(ROM)或可编程逻辑阵列(PLA)中实现。

---

简介 

在数字计算机发展的早期,计算基本函数的方法通常依赖于多项式或有理分式逼近。这些方法需要乘法运算,而在早期计算机中,乘法器的硬件实现成本高昂或速度较慢。坐标旋转数字计算机(CORDIC)算法,由 Jack Volder [1] 首次提出,提供了一种替代方案。它通过一系列由移位和加法构成的微旋转来逼近目标角度,从而避免了显式的乘法运算。

Volder 的工作主要集中于三角计算。本文旨在展示如何将 CORDIC 技术**统一和扩展**,使其能够在**圆周、线性、双曲**三种坐标系下运行,并通过同一套硬件架构计算出一大批基本函数。表 I 总结了该统一算法在不同模式和坐标系下所能实现的核心功能。

表 I:统一算法功能摘要**

坐标系模式初始值结果
圆周 (m=1)旋转x0=K,y0=0,z0=θx0​=K,y0​=0,z0​=θxn=cos⁡θ,yn=sin⁡θ,zn=0xn​=cosθ,yn​=sinθ,zn​=0
向量化x0=X,y0=Y,z0=0x0​=X,y0​=Y,z0​=0xn=X2+Y2,yn=0,zn=tan⁡−1(Y/X)xn​=X2+Y2​,yn​=0,zn​=tan−1(Y/X)
线性 (m=0)旋转x0=x,y0=0,z0=yx0​=x,y0​=0,z0​=yxn=x,yn=0,zn=0xn​=x,yn​=0,zn​=0
(在此过程中,乘积 x⋅yx⋅y 被累积在 yy 寄存器中)
向量化x0=x,y0=y,z0=0x0​=x,y0​=y,z0​=0xn=x,yn=0,zn=y/xxn​=x,yn​=0,zn​=y/x
双曲 (m=-1)旋转x0=K′,y0=0,z0=θx0​=K′,y0​=0,z0​=θxn=cosh⁡θ,yn=sinh⁡θ,zn=0xn​=coshθ,yn​=sinhθ,zn​=0
向量化x0=X,y0=Y,z0=0x0​=X,y0​=Y,z0​=0xn=X2−Y2,yn=0,zn=tanh⁡−1(Y/X)xn​=X2−Y2​,yn​=0,zn​=tanh−1(Y/X)

*注:K 和 K' 分别为圆周和双曲系统的比例因子常数。*

坐标系统 

CORDIC 算法的统一性体现在参数 mm 上,它定义了三种不同的坐标系:

  1. 圆周坐标系 (Circular Coordinate System, m=1):这是 Volder 原始算法的基础。其微旋转角度为 ei=arctan⁡(2−i)。用于计算正弦、余弦、反正切、模值等。

  2. 线性坐标系 (Linear Coordinate System, m=0):在此模式下,迭代方程退化为简单的移位-累加操作。微旋转被微平移取代,其增量为 ei=2−iei​=2−i。用于实现乘法、除法等基本运算。

  3. 双曲坐标系 (Hyperbolic Coordinate System, m=−1):其微旋转角度基于双曲函数,。用于计算双曲正弦、双曲余弦、指数函数、对数函数等

迭代方程 (Iteration Equations)

统一算法的核心是以下三个迭代方程,它们在每个计算步骤 \( i \) 中同时执行:

其中:
*   \( m \in \{1, 0, -1\} \) 标识坐标系。
*   \( d_i \in \{+1, -1\} \) 是方向因子。
*   \( e_i \) 是预定义的微角度/值序列,取决于 \( m \)。
*   操作模式决定了 \( d_i \) 的符号:
*   **旋转模式 (Rotation Mode)**:\( d_i = \text{sign}(z_i) \)。目标是驱使残余角度 \( z_i \) 趋于零。
*   **向量化模式 (Vectoring Mode)**:\( d_i = -\text{sign}(y_i) \)。目标是驱使 \( y_i \) 分量趋于零。

---

转换策略 (Conversion Tactics)

为了实现高精度计算,必须解决两个关键问题:**比例因子** 和 **收敛域**。

**1. 比例因子 (Scale Factor)**
在圆周和双曲系统中,每次迭代都会改变向量的模长。可以证明,总比例因子 \( K \) 为:

对于圆周系统 (\( m=1 \)),\( K \approx 0.60725 \)。对于双曲系统 (\( m=-1 \)),\( K' \approx 0.82816 \)。处理策略包括:
*   **预缩放 (Prescaling)**:将初始输入 \( x_0 \), \( y_0 \) 乘以 \( 1/K \)。
*   **后缩放 (Postscaling)**:将最终输出乘以 \( 1/K \)。
*   **融合缩放 (Integrated Scaling)**:将缩放操作融入迭代过程,增加额外的迭代步骤。

**2. 收敛域与重复迭代 (Convergence and Repeated Iterations)**
双曲系统 (\( m=-1 \)) 的收敛性需要特别处理。因为序列 \( \arctanh(2^{-i}) \) 的收敛域存在间隙,必须重复特定的迭代索引(例如,i=4, 13, 40, ...)以确保算法对所有有效输入都能收敛。这是该算法实现中的一个关键细节。

---

### **移位器使用 (Shifter Usage)**

CORDIC 算法的效率很大程度上源于对**移位器**的巧妙使用。
*   **常数移位**:在每次迭代 \( i \) 中,移位量 \( 2^{-i} \) 是固定的。这意味着硬件实现时,移位器可以是非常简单的、预定义的连线模式,而不是复杂的桶式移位器。
*   **规整性**:这种“移位-加”的操作序列非常规整,使得算法极易在微代码ROM或硬件状态机中实现。

---

域拓展

通过结合不同坐标系和模式,该统一算法可以计算大量函数。以下是几个典型示例:

*   **计算正弦和余弦**:使用圆周旋转模式,设置 \( x_0 = 1/K, y_0=0, z_0=\theta \)。
*   **计算模和幅角**:使用圆周向量化模式,设置 \( x_0=X, y_0=Y, z_0=0 \)。
*   **计算乘法**:使用线性旋转模式,设置 \( x_0=x, y_0=0, z_0=y \),结果 \( x \cdot y \) 出现在 \( y_n \) 中。
*   **计算指数**:使用双曲旋转模式,设置 \( x_0=1/K', y_0=0, z_0=a \),则 \( e^a \approx \sinh a + \cosh a = y_n + x_n \)。
*   **计算自然对数**:使用双曲向量化模式,设置 \( x_0 = w+1, y_0 = w-1, z_0 = 0 \),则 \( \ln w = 2 \cdot z_n \)。

---

硬件实现 (Hardware Implementation)

CORDIC 算法的硬件架构非常简洁和规整。图 1 展示了一个典型 CORDIC 计算引擎的框图。

该引擎包含三个主要寄存器(X, Y, Z)和三个功能单元:
1.  **两个移位器**:用于对 Y 和 X 寄存器进行 \( 2^{-i} \) 位的移位。移位量由迭代计数器 \( i \) 控制。
2.  **三个加法器/减法器**:用于根据符号位 \( d_i \) 执行 X, Y, Z 的加/减操作。
3.  **一个只读存储器 (ROM)**:用于存储预先计算好的基本角度/值序列 \( e_i \)。
4.  **一个控制逻辑**:用于生成迭代索引 \( i \),控制移位量,并根据当前模式(旋转/向量化)和 \( y_i \) 或 \( z_i \) 的符号来决定 \( d_i \)。

工作流程是循环的:
1.  初始化寄存器 \( X, Y, Z \)。
2.  对于 \( i = 0 \) 到 \( n-1 \):
a. 根据 \( i \) 设置移位量。
b. 从 ROM 中查找 \( e_i \)。
c. 根据模式计算 \( d_i \)。
d. 在一个时钟周期内,并行更新 X, Y, Z 寄存器。
3.  输出最终结果。

这种结构可以实现为**时序型**(一个核心,循环使用)或**流水线型**(多个核心串联,吞吐量极高)。

---

结论 (Conclusion)

本文提出了一种用于计算基本函数的统一算法。该算法是原始 CORDIC 技术的扩展,通过引入坐标系参数 \( m \),将三角、乘除、双曲等计算统一到同一框架下。其主要优点包括:

1.  **统一性**:同一套硬件可用于计算多种不同函数。
2.  **简洁性**:只需要基本的加、减、移位和表查找操作,无需复杂的乘法器。
3.  **规整性**:算法结构规整,非常适合在 ROM、PLA 或简单的微程序控制中实现。
4.  **效率**:对于 n 位精度,大约需要 n 次迭代,计算速度与软件乘法相当或更快,且硬件成本低。

该算法特别适用于专用计算机、计算器、数字信号处理器以及任何需要高效计算基本函数的嵌入式系统。它为硬件功能单元的设计提供了一种强大而优雅的范式。


[1] Volder, J. E. "The CORDIC Trigonometric Computing Technique." IRE Transactions on Electronic Computers, Vol. EC-8, Sept. 1959, pp. 330-334.

http://www.dtcms.com/a/521849.html

相关文章:

  • 四川网站建设企业网站制作ftp 转 wordpress
  • 深圳网站设计兴田德润优惠吗猪八戒网做网站怎么样
  • 永济网站建设杭州市建设工程检测协会网站
  • CUDA-GDB(11)——调试示例演练
  • 网页设计与网站建设教学视频雷神代刷网站推广
  • Scala 字符串
  • 湛江网站建设公司wordpress注册链接修改
  • Linux上安装部署轻量级高性能压力测试工具siege实操教程与常用示例
  • CS144 学习导航
  • 南昌网站建设公司排行榜前十【转】网页 网站 html如何实现"关闭窗口"代码大全
  • 漯河网站建设费用做外贸比较好的网站
  • Linux修炼:基础IO(一)
  • 中山市网站制作app 推广
  • 免费制图网站做国外网站的公证要多少钱
  • leetcode 3461 判断操作后字符串中的数字是否相等I
  • 机器学习(8)梯度下降的实现与过拟合问题
  • h5游戏免费下载:维京战争
  • 门户网站建设投标书小程序软件定制开发
  • 外贸网站建设价格外贸网站推广公司最大
  • 【北京迅为】iTOP-4412精英版使用手册-第六十五章 Linux-定时器
  • 网页设计网站怎么做网站制作文案
  • rocky 9.5系统安装zabbix监控实现邮件告警
  • 梅河口网站建设张艺兴粉丝做的网站
  • 做杂志的网站有哪些哪个页面设计培训好
  • 国际贸易网站有哪些电影网站的建设目标
  • cuda13.0 torch2.9 python3.12 安装flash-attn window版的哪里有
  • 外贸公司网站制作公司网站的字体颜色
  • 免费源代码网站瑞安做网站
  • 专门做礼物的网站广州红盾信息门户网站
  • 单片机的开发——无人机篇(未完待续,有时间写)