我正在尝试将值从线性表示法转换为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)的用途,因为我真正想做的是一个日志?
答案 0 :(得分:2)
您的目标是使用标识来解决自然日志:
ln(w)= 2 * atanh((w-1)/(w + 1))
你必须在矢量模式(y - > 0)中设置一个hyberbolic版本的CORDIC,它评估atanh(y / x)。通过将y设置为w-1并将x设置为w + 1并将初始角度z设置为0,可以与普通CORDIC类似地完成。在迭代之后,在应用左移乘以2之后,结果将在z中。请注意对CORDIC的hyberbolic扩展需要重复某些迭代(4,13,40,...)才能收敛。
一旦你有ln(w),你需要乘以常数10 / ln(10)得到以dB为单位的10的基数。
Ray Andraka's paper概述了CORDIC实现。它在双曲线扩展上略微浮现。 These slides from Xilinx涵盖了hyberbolic CORDIC的更多细节。