【機械学習】音楽情報処理におけるCQTとNSGTによるiCQT
はじめに
本記事では、音楽情報処理 (機械学習) で音声波形の前処理に使う時間-周波数表現を整理し、最近よく使われる非定常ガボール変換ベースのCQTとiCQTについてまとめます。
時間-周波数表現とは
基本的に、機械学習による音楽情報処理では、時間-周波数表現がよく用いられます。スペクトログラム (STFTベース) やスカログラム (Wavelet変換ベース) などです。
時間-周波数表現の考え方。波形 (左) を短い区間ごとに周波数分析し、 横軸=時間・縦軸=周波数の画像 (右) として並べる。
近年では、Conv-TasNet[1]やDemucs[2]などの、時間-周波数表現を用いない波形ドメインのモデルも増えてきましたが、更に最近 (現時点:2026年) では、また時間-周波数表現に回帰する動きも見られます。象徴的なのがDemucsの系譜で、波形ドメインのモデルとして登場した後[2]、後継のHybrid Demucs[3]では波形とスペクトログラムの両ブランチを併用する構成へ移行しています。
特に、音声処理分野だと、人間の聴覚特性はlogスケールなので、周波数軸を対数化した、log-mel スペクトログラムが広く使われています。ある程度、逆変換がしやすいのも利点です。
波形の解析をしよう
スペクトログラムを使用するために使う、短時間フーリエ変換 (STFT) はフーリエ変換の拡張です。フーリエ変換 (今回は離散フーリエ変換) を式として表すと、
\(X_k = \sum_{n=0}^{N-1} x_n \, e^{-i\, 2\pi k n / N}\)
ここで、\(x_n\) は時間領域の信号の \(n\) 番目のサンプル、\(N\) はサンプル数 (データ長)、\(X_k\) は \(k\) 番目の周波数ビンに対応する複素スペクトル係数、\(i\) は虚数単位です。
この式は、時間領域から周波数領域への変換と言えます。この式により、時間領域のサンプル数分、周波数の情報が出てくることがわかります。
ここで大事なことは、入力した時間領域のサンプル数と、出力される周波数領域のサンプル数が同じということです。
つまり、高い周波数解像度を得るには、長時間を解析する必要があります。
STFTを使ってみよう
短時間フーリエ変換 (STFT) は、波形に対して固定長の窓をスライドさせながら、フーリエ変換を行います。 これにより、各周波数の時間変化が画像のように得られます。

STFTスペクトログラムの例 (楽曲の一部、4秒)。 調波構造を持つ音の基本周波数と倍音が横方向の帯として、打楽器などの急峻な音が縦の筋として現れる。
このとき出てくる周波数情報は、複素数として出てくるので、ここには振幅の情報と位相の情報が含まれています。
振幅を見るか、位相も見るか (前提条件1)
波形を復元しないタスクでは、大抵の場合、位相情報があまり意味をなさないことが多いので、複素数の絶対値を取って、振幅値のみ取り出します。実際、振幅だけでかなりの情報を占めるので、位相情報があまり役に立たないタスクも多くあります (楽器分類など)。
しかし、波形を復元するタスクでは話が違います。位相情報を消してしまうと、波形を復元するときにどうしてもアーティファクト感が生まれ、一般的な波形復元の評価指標である、SNRやSDRが下がります。聴感上も「カサカサ」とした質感になります。
そこで、近年では機械学習モデルで、実部と虚部を別々に扱い、位相情報も (事実上) 保持する構成が増えています。
実際に、音源分離モデルである Band-split RNN[4] などでは、複素数情報を実部と虚部に分けて (振幅値に変換せずに) 扱っていますが、MUSDB18-HQのみの学習で、Music Demixing (MDX) Challenge 2021の上位モデルを上回る性能を示しました[4]。
改善の主要因はスペクトログラムの帯域分割にありますが、位相情報を残すことは、波形復元タスクにおいては重要であると言えます。
同じ窓長なら周波数が低いほど解像度も低い (前提条件2)
音は空気の疎密であるため、周波数が高いというのは、同じ区間での波の繰り返しが多いということです。逆に周波数が低いと、同じ区間での繰り返しは少なくなります。
つまり、窓長 (波形を一度に見る区間) が短いほど、繰り返しが少ないため正確な周波数解析 (特に低周波部分の解析) が出来ません。
結局、時間と周波数は同時に見られず、トレードオフの関係にあります。
本題: 定Q変換 (CQT: Constant-Q Transform) とは?
CQTは、音楽情報を扱うのに特化した時間-周波数表現です[5]。縦軸は音高 (ド, ド#, レ, レ#, ミ, ファ, ...) になっています。ただし、この音高解像度は12平均律よりもさらに細かくすることができます。

先ほどと同じ楽曲・同じ区間のCQTスペクトログラム (縦軸は音高)。 STFTの例では下端に潰れていた低域の構造が、音高の目盛りに沿って見やすくなっている。
ここまではlog-mel スペクトログラムと同様ですが、重要なのは横軸 (時間軸) の解像度です。
ここで、一般的なスペクトログラムを思い出すと、窓長は固定でした。ということは、窓長を長くすれば低域の周波数解像度は上がる一方、時間解像度は下がります。窓長を短くすれば、その逆です。そこで、窓長を周波数ごとに変えて帯域ごとに時間と周波数のバランスを取る、という発想で作られたのがCQTです。
CQTを式で見てみよう
CQTの「Constant-Q」とは何かというと、各周波数ビンにおける「中心周波数 ÷ 帯域幅」の比 \(Q\) が、すべてのビンで一定であることを指します。ここでいう帯域幅は、そのビンがどれくらいの周波数の広がりを拾うか、という値です。
まず、各ビンの中心周波数 \(f_k\) は、次のように等比数列で並びます。
\(f_k = f_{\min} \cdot 2^{k/b}\)
ここで、\(k\) はビン番号 (\(k = 0, 1, 2, \dots\))、\(f_{\min}\) は解析する最低の中心周波数、\(b\) は1オクターブあたりのビン数です。1オクターブで周波数がちょうど2倍になることを、そのまま指数の形で表したものです。周波数が等比数列で並ぶということは、対数を取ると等間隔になるということなので、これがCQTの縦軸が音高 (対数周波数) になっている理由です。
そして \(Q\) を一定に保つということは、帯域幅も中心周波数に比例して変わるということです。帯域幅と窓長 (時間) はおおよそ反比例の関係にあるので、結果として窓長は周波数に反比例します。つまり、低い音ほど窓を長く取って周波数をしっかり見て、高い音ほど窓を短く取って時間をしっかり見る、という配分になります。
窓長と中心周波数の反比例。低い音 (上) は長い窓で周波数を細かく調べ、 高い音 (下) は短い窓で時間変化を細かく追う。塗りの山が窓 (分析する範囲) を表す。
これはまさに、前提条件2で述べた「同じ窓長では周波数が低いほど解像度が低い」というトレードオフを、周波数ごとに最適な配分へと振り分けている、ということです。
STFTとCQTの時間-周波数タイリングの比較。1枚のタイルは「1回の分析で得られる情報の範囲」を表す。 STFTは全帯域で同じ形のタイルを敷き詰めるが、CQTは低域ほど周波数方向に細かく(時間方向に粗く)、 高域ほど時間方向に細かくなる。
CQTの利点
CQTの縦軸は対数周波数なので、音が1オクターブ上がると、表現の上ではちょうど一定量だけ縦にシフトします。つまり、ピッチシフトが「縦方向の平行移動」として表れます。これは音楽を扱ううえで非常に自然で有用な性質です。
CQT表現でのピッチシフト。1オクターブ上げても音形の形は変わらず、 縦方向にちょうど一定量だけ平行移動する。この性質は、平行移動に強い畳み込みニューラルネットワークと相性が良い。
また、これまで見てきたように、低音では周波数解像度を、高音では時間解像度を、それぞれ確保できます。STFTのように窓長を一つに決め打ちする必要がなく、帯域ごとに適した解像度配分を選べます。
さらに、ピッチシフトが平行移動になるという性質は、畳み込みニューラルネットワーク (CNN) とも相性が良いです。畳み込みは平行移動に対する不変性を持ちやすいので、音高が変わっても同じフィルタで捉えやすい、というメリットがあります。
CQTでの波形復元は難しい
ここで、前提条件1を思い出してみましょう。波形を復元するタスクでは、位相情報を残しておきたいという条件でした。CQTは音楽に適した表現なので、これで波形まで復元できれば理想的です。
ところが、話はそう簡単ではありません。古典的なCQTの実装 (Brown による原典[5]とその効率化[6]) には、計算コストと可逆性の面で課題があることが知られています[7]。のちに提案されたツールボックス[8]は逆変換を備えますが、その再構成は近似的 (約55dBのSNR) です。CQTは各ビンの窓長がバラバラで、変換としては冗長かつ非直交なので、順変換に対応する綺麗な逆変換が保証されません。
つまり、「音楽的にはとても良い表現なのに、波形には戻しづらい」というジレンマがあります。このジレンマを解決したのが、次に説明するNSGTです。
非定常ガボール変換 (NSGT: Non-Stationary Gabor Transform) とは?
STFTは、「ガボール変換」と呼ばれる変換の離散版とみなせます。そしてガボール変換は、窓の形も長さも固定でした。この「固定」という縛りを外して、窓を時間や周波数ごとに変えてよいように一般化したものが、非定常ガボール変換 (NSGT) です[9]。
NSGTの核心は、フレーム理論にあります。詳細には立ち入りませんが、大まかには、解析に使う窓の集合が「フレーム」と呼ばれる条件を満たすとき、それに対応する「双対フレーム」を使えば、変換した結果から元の信号を完全に復元できることが、理論的に保証されます。
さらに、窓の重なり方を適切に取ると (painless case[9]。呼び名は古典的な結果[10]に由来)、双対フレームが対角スケーリングだけで簡単に求まります。これにより、逆変換が安定に、しかも高速に計算できます。
NSGTでCQTを作る = iCQT (inverse CQT)
ここまでの内容で、構成はほぼ見えています。CQTの「周波数ごとに窓長を変える」という設計は、まさにNSGTが許す「窓を周波数ごとに変える」一般化そのものです。そこで、CQTをNSGTの枠組みの上で構成してやります。
すると、先ほどのフレーム理論のおかげで、CQTが可逆になり、逆変換 (iCQT: inverse CQT) が理論的に保証されます[7]。つまり、位相を保ったまま、CQT表現から波形へ戻せるようになります。
これは前提条件1で述べた「実部と虚部を残す構成」とも噛み合います。位相を捨てずに済むので、音源分離や音声生成のような波形復元タスクでも、CQTを使えるようになります。CQTの音楽的な良さと、波形復元のしやすさが、両立します。
iCQTを使った波形復元パイプライン。CQTで得た複素係数 (振幅と位相) のまま機械学習モデルで処理し、 iCQTで波形へ戻す。NSGTの枠組みにより、この逆変換が理論的に保証される。
実際の使用例として、楽器非依存の自動採譜モデルである Timbre-Trap[11] があります。NSGTベースの可逆CQTを前処理として用い、複素スペクトル係数の再構成と音高推定を1つのオートエンコーダで同時に学習しており、まさに「位相を保てる可逆なCQT」の利点を活かした構成になっています。
なお、ストリーミングや低遅延の用途に向けて、信号をスライスしながら処理する sliCQT (sliced CQT) という派生もあります[12]。
実装 / ライブラリ
実装には既存のライブラリの利用が近道です。代表的なものを挙げておきます。
nsgt: NSGT / sliCQT の公式実装librosa:cqt/icqtが用意されており、手軽に試せますnnAudio[13]: GPU上で動作し、かつ学習可能なので、ニューラルネットワークの層として組み込めますnnAudio2[14]: nnAudioの後継です。TorchScript互換性の問題や逆変換の不具合などが改善されています
まとめ
本記事の流れを振り返ります。
まず、時間-周波数表現には、時間解像度と周波数解像度のトレードオフがありました。STFTはこれを一つの窓長で決め打ちしますが、CQTは周波数ごとに窓長を変えることで、このトレードオフを帯域ごとに最適化します。ただし、素朴なCQTは逆変換が難しいという課題がありました。そこで、フレーム理論に基づくNSGTの枠組みでCQTを構成することで、逆変換 (iCQT) による完全再構成が保証されます。
波形を復元するタスクで時間-周波数表現を選ぶ際は、iCQTで波形へ戻せるNSGTベースのCQTが有力な選択肢になります。
ここまでお読みいただきありがとうございました。
参考文献
- Y. Luo, N. Mesgarani, "Conv-TasNet: Surpassing Ideal Time-Frequency Magnitude Masking for Speech Separation," IEEE/ACM Transactions on Audio, Speech, and Language Processing, vol. 27, no. 8, pp. 1256–1266, 2019. arXiv:1809.07454
- A. Défossez, N. Usunier, L. Bottou, F. Bach, "Music Source Separation in the Waveform Domain," arXiv preprint, 2019. arXiv:1911.13254
- A. Défossez, "Hybrid Spectrogram and Waveform Source Separation," arXiv preprint, 2021(Music Demixing Challenge 2021 優勝モデル). arXiv:2111.03600
- Y. Luo, J. Yu, "Music Source Separation with Band-Split RNN," 2022(IEEE/ACM TASLP 2023). arXiv:2209.15174
- J. C. Brown, "Calculation of a constant Q spectral transform," The Journal of the Acoustical Society of America, vol. 89, no. 1, pp. 425–434, 1991. doi:10.1121/1.400476
- J. C. Brown, M. S. Puckette, "An efficient algorithm for the calculation of a constant Q transform," The Journal of the Acoustical Society of America, vol. 92, no. 5, pp. 2698–2701, 1992. doi:10.1121/1.404385
- G. A. Velasco, N. Holighaus, M. Dörfler, T. Grill, "Constructing an invertible constant-Q transform with nonstationary Gabor frames," Proc. 14th International Conference on Digital Audio Effects (DAFx-11), 2011.
- C. Schörkhuber, A. Klapuri, "Constant-Q transform toolbox for music processing," Proc. 7th Sound and Music Computing Conference (SMC), 2010.
- P. Balázs, M. Dörfler, F. Jaillet, N. Holighaus, G. A. Velasco, "Theory, implementation and applications of nonstationary Gabor frames," Journal of Computational and Applied Mathematics, vol. 236, no. 6, pp. 1481–1496, 2011. doi:10.1016/j.cam.2011.09.011
- I. Daubechies, A. Grossmann, Y. Meyer, "Painless nonorthogonal expansions," Journal of Mathematical Physics, vol. 27, no. 5, pp. 1271–1283, 1986. doi:10.1063/1.527388
- F. Cwitkowitz et al., "Timbre-Trap: A Low-Resource Framework for Instrument-Agnostic Music Transcription," Proc. IEEE ICASSP, 2024. arXiv:2309.15717
- N. Holighaus, M. Dörfler, G. A. Velasco, T. Grill, "A framework for invertible, real-time constant-Q transforms," IEEE Transactions on Audio, Speech, and Language Processing, vol. 21, no. 4, pp. 775–785, 2013. doi:10.1109/TASL.2012.2234114 / arXiv:1210.0084
- K. W. Cheuk, H. Anderson, K. Agres, D. Herremans, "nnAudio: An on-the-Fly GPU Audio to Spectrogram Conversion Toolbox Using 1D Convolution Neural Networks," IEEE Access, vol. 8, pp. 161981–162003, 2020. arXiv:1912.12055
- A. Roy, J. Liang, D. Herremans, "nnAudio 2: Overcoming Dynamic Compilation Barriers and Transform Inconsistencies," arXiv preprint, 2026. arXiv:2606.05394 / GitHub
