ウィキペディアによると、バーク スケールは次の式で概算できます。
b(f) = 13*atan(0.00076*f)+3.5*atan(power(f/7500,2))
周波数スペクトルを Bark スケールで同じ長さの間隔に分割するにはどうすればよいですかn
(間隔分割ポイントは Bark スケールで等距離になります)。
最良の方法は、関数を分析的に逆にすることです(x
の関数で表現しますy
)。紙でやろうとしたけどダメだった WolframAlpha 検索バーでもできませんでした。Octavefinverse
関数を試してみましたが、エラーが発生しました。
Octave は次のように述べています (より単純な例として):
octave:2> x = sym('x');
octave:3> finverse(2*x)
error: `finverse' undefined near line 3 column 1
これはfinverse
Matlab からの説明です: http://www.mathworks.com/help/symbolic/finverse.html
それを行う数値的な方法もあるかもしれません。y
軸を均等に分割するところから始めて、二分探索で理想的な分割を探すだけだと想像できます。しかし、それを行う既存のツールがいくつかあるのではないでしょうか?