algorithm - 在近似树皮刻度上获取等距间隔

标签 algorithm matlab math octave numerical

维基百科说我们可以用以下方程近似巴克尺度:

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/

相关文章:

php - 获取路线的算法

algorithm - 平面到圆柱体的投影

javascript - FFT 实现错误(Nayuki vs Octave)

matlab - 预先计算多维线性插值的权重

algorithm - 内射配对函数

python - Fast NMS 算法抑制框不重叠

algorithm - Big O Notation - 自然数 M 和常数因子 C 是什么意思?

linux - Ubuntu 服务器 14.04 上的 Matlab 2015b 中的 audioread

c# - 如何查看一个对象是否在 4 个点内

math - 编程是数学的子集吗?