2016年5月22日日曜日

2.2 Pitch tracker

'pitch tracker' のゴールはすぐに入力された信号のピッチを返すことです。
FFTやautocorrelationといった様々な手法があります。

残念ながら、FAUSTでは、これらの手法は計算することができません。
なぜなら、正確には、ユーザーがサンプルごとにそれらを計算すると、
必要でないにもかかわらず、
かなり膨大な処理コストが結果としてかかるからです。
将来的には、新しいバージョンの FAUSTではこの制限はなくなるでしょう。


現状では、つまり、処理コストの少なく、
即座に信号のzero-crossing rate を解析して、
ピッチを計算するpitch trackerを使っていくことになります。

実際、サイン曲線の波は、
1度の周期で3つの0を必ず通ります。
(1つめは最初の0で、2つめは正の値から負の値に移る際の0、
そして、最後に0を、また次の新しい波が始まる0の値をとります。)



Fig.2.2
100Hz のサイン波で、時間は横軸になります。
1周期には0.01秒かかり、
毎回3度0の値をとることがわかります。


よって、サイン曲線を用いる間、
私たちは3つの0を数え、
そして経過したサンプル数を数えればよいのです。

その後、簡単に関連するサイン波の周波数を得ることができます。

しかし、入力値がより複雑な波形だった場合には、どうでしょうか。

波形は毎周期、より多くの0の値をとるので、
より多くの0をカウントしなければならないでしょう。

信号にローパスフィルターを使えば良いかもしれませんが、
しかし、この解決方法は後にまわしましょう。


まずは、サイン波の周波数分析をする関数を作成してみましょう。

0 件のコメント:

コメントを投稿