TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

CQTでスペクトログラムを描く その9(補間方法変更)

その6で、低域をバンク分割することで、時間分解能を上げつつ、最小音階をC1まで下げることができた。

その際に、低域のバンクでは、オクターブあたりのビン数が高域の半分になるため、本来のCQTのビンの間隔の半分の間隔でスペクトルカーネルを作成することで、高域とビン間隔が同じになるように補間を行った。

放物線補間の廃止

一方、高域ではその2で、放物線補間により、周波数軸での補間を行っている。

2通りの補間方法を採用する理由もないので、スペクトルカーネルの間隔で補間する方式に統一することにした。

バンク分割

これにより、

  • 高域では、オクターブ当たりのビン間隔=24、ビンを3グリッドに細分化
  • 低域では、オクターブ当たりのビン間隔=12、ビンを6グリッドに細分化

となり、オクターブ当たりの72グリッドに統一されることになる。

ついでに高域のバンクをさらに分割して、

  • オクターブ当たりのビン間隔=36、ビンを2グリッドに細分化

のバンクを追加する。

3つのバンクで、高域のバンクほど周波数分解能が高くなる。

結果

F2以下が低域バンクになっているため、ぼやけている。
これは、時間分解能とのトレードオフのため、補間を行っても本質的には改善しない。

時間分解能と周波数分解能のトレードオフをパラメータで設定できるようにすると良いかもしれない。

まとめ

放物線補間を廃止して、スペクトルカーネルを本来のビン間隔より狭くすることで補間を行うようにした。
また、高域のバンクを追加して、高域の周波数分解能を上げた。