维基百科说我们可以用以下方程近似巴克尺度:
b(f) = 13*atan(0.00076*f)+3.5*atan(power(f/7500,2))
如何将频谱划分为 Bark 刻度上相同长度的 n
个间隔(间隔划分点在 Bark 刻度上是等距的)?
最好的方法是分析反函数(用y
的函数表示x
)。我试图在纸上做,但失败了。 WolframAlpha 搜索栏也无法做到这一点。我尝试了 Octave finverse
函数,但出现错误。
Octave 说(对于更简单的例子):
octave:2> x = sym('x');
octave:3> finverse(2*x)
error: `finverse' undefined near line 3 column 1
这是来自 Matlab 的 finverse
描述:http://www.mathworks.com/help/symbolic/finverse.html
也可以用数值方法来做到这一点。我可以想象,您只需从平均划分 y 轴开始,然后通过二分搜索来搜索理想的划分。但也许有一些现有的工具可以做到这一点?
最佳答案
您需要对该方程进行数值求解(没有解析反函数)。设置等距的 b
值并求解方程以找到各个 f
。对分法有点慢,但布伦特方法是一个很好的替代方法。请参阅http://en.wikipedia.org/wiki/Brent%27s_method
关于algorithm - 在近似树皮刻度上获取等距间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12807340/