我正在尝试将一个值从线性表示法转换为FPGA上的分贝表示法。
虽然方程式x_dB=10*log(x_lin)是众所周知的,但我一直无法用VHDL语言实现它。
我发现了一些在http://en.wikipedia.org/wiki/Inverse_hyperbolic_function#Logarithmic_representation中可能有用的身份(其中arctanh是最常见的)。
由于反双曲函数可以通过CORDIC ( COordinate Rotation DIgital Computer,CORDIC)获得,因此这似乎很容易--除了CORDIC有两个输入(X和Y),而不是对数所需的单一输入,而且就这一点而言,双曲正切函数!假设我真正想做的是一个log,我该如何计算两个输入值(x & y)的值呢?
发布于 2014-08-06 04:55:58
您的目标是使用以下标识来求解自然对数:
ln(w) =2* atanh((w-1) / (w+1))
您必须在矢量化模式(y --> 0)下设置CORDIC的双曲线版本,以计算atanh(y/x)。这类似于普通CORDIC,通过将y设置为w-1,将x设置为w+1,并将初始角z设置为0来实现。迭代后,应用左移位乘以2后,结果将在z中。请注意,CORDIC的双曲线扩展需要重复某些迭代(4,13,40,...)才能让它收敛。
一旦你有了ln(w),你需要乘以常量10 / ln(10)来得到dB中以10为底的对数。
Ray Andraka's paper很好地概括了CORDIC的实现。它对双曲延伸线稍加掩饰。These slides from Xilinx涵盖了更多关于双曲线CORDIC的细节。
https://stackoverflow.com/questions/25146321
复制相似问题