0

我正在尝试在 FPGA 上将值从线性表示法转换为分贝表示法。

虽然方程 x_dB=10*log(x_lin) 是众所周知的,但我一直无法在 VHDL 中实现它。

我在http://en.wikipedia.org/wiki/Inverse_hyperbolic_function#Logarithmic_representation找到了一些可能有用的身份(arctanh 是最常见的)

由于反双曲函数可通过坐标旋转数字计算机 (CORDIC) 获得,这似乎很容易——除了 CORDIC 有两个输入(X 和 Y),而不是对数所需的单个输入,就此而言,双曲反正切函数!鉴于我真正想要做的是日志,我如何确定两个输入值(x 和 y)的用途?

4

1 回答 1

1

您的目标是使用身份求解自然对数:

ln(w) = 2 * atanh((w-1) / (w+1))

您必须在矢量模式 (y --> 0) 下设置双曲线版本的 CORDIC,以评估 atanh(y/x)。通过将 y 设置为 w-1 并将 x 设置为 w+1 并将初始角度 z 设置为 0,这与普通 CORDIC 类似地完成。迭代后,在应用左移乘以 2 后,结果将在 z 中。注意, CORDIC 的双曲线扩展需要重复某些迭代 (4, 13, 40, ...) 才能收敛。

获得 ln(w) 后,您需要乘以常数 10 / ln(10) 以获得以 dB 为底的 10 对数。

Ray Andraka 的论文很好地概括了 CORDIC 的实现。它稍微掩盖了双曲线扩展。这些来自 Xilinx 的幻灯片涵盖了双曲线 CORDIC 的更多细节。

于 2014-08-05T20:55:57.847 回答