ピッチ検出 — 声の高さを機械で言い当てる
「ド」なのか「ソ」なのか、男声なのか女声なのか — 声の高さの正体は波形の繰り返しの周期です。信号を自分自身とずらして重ねる自己相関、スペクトルの櫛の間隔を測るケプストラム。2大古典手法と、その落とし穴(オクターブエラー)まで動かして確かめます。
1. ピッチ=繰り返しの周期
母音を発声しているとき、声帯は一定周期で開閉し、波形はほぼ同じ形を繰り返します。この繰り返しの速さが基本周波数 f0(おおよそ男声 80〜160 Hz、女声 160〜300 Hz)。倍音がどれだけ乗っていても、波形全体の繰り返し周期 T は 1/f0 のまま — だからピッチ検出とは「T を見つける問題」です。
では、波形のどこからどこまでが「1回分」かを機械はどう見つけるのか。一番素直なアイデアが自己相関です。
2. 自己相関 — 自分をずらして重ねてみる
信号のコピーを時間 τ(ラグ)だけずらし、元の信号とどれだけ一致するかを掛け算の総和で測ります。τ がちょうど周期 T の整数倍になった瞬間、コピーは元の波形にぴったり重なり、一致度(相関値)が跳ね上がります。
3. 推定してみる — そして落とし穴
ACF のピークを自動で拾えばピッチ推定器の完成です。下のデモでは探索範囲 80〜400 Hz の中で最大のピークを選んでいます。まずは f0 スライダーを動かして、推定値が正解に追従することを確認してください。次に「かすれ声モード」ボタンを押すと…。
4. ケプストラム法 — スペクトルの櫛の間隔を測る
視点を周波数側に移すと、周期信号のスペクトルは f0 間隔の櫛(倍音列)です。log を取ると、log スペクトルは「周波数軸上で周期 f0 の波打ち」+「ゆるやかな包絡」の足し算になります。
波打ちの周期を測りたければ、もう一度フーリエ変換すればいい。log スペクトルを逆フーリエ変換したものがケプストラム(cepstrum)、その横軸はケフレンシー(quefrency、単位は時間)。倍音の櫛はケフレンシー 1/f0 の鋭いピークとして現れます。
5. 現代の手法 — YIN、そしてニューラルへ
- ACF 法: 素直で高速。オクターブエラーと窓長の選択が課題。
- ケプストラム法: 声道(包絡)とピッチを分離できるのが強み。低い f0 には長い窓が必要。
- YIN (2002): ACF の親戚である差分関数を累積平均で正規化し、「最大のピーク」ではなくしきい値を最初に下回る谷を選ぶことでオクターブエラーを大幅に削減。今も広く使われる定番。
- ニューラル系: CREPE や pYIN+DNN 系は波形やスペクトログラムから直接 f0 を分類・回帰し、雑音下や歌声でも頑健。
6. まとめ
- ピッチ検出=波形の繰り返し周期 T を見つける問題。f0 = 1/T。
- 自己相関: ずらして重ねて一致度を測る。最初の大ピーク=周期。ただし 2T, 3T… にもピーク。
- オクターブエラー: 声のわずかな崩れで推定が1オクターブ飛ぶ。ピークの「選び方」が肝心(YIN)。
- ケプストラム: log スペクトルをもう一度変換。ケフレンシー軸のピーク=1/f0。