YINアルゴリズムについて知る
音声や楽器のピッチ検出アルゴリズムとして使いやすいと感じているYINアルゴリズムについて、もう少し知ることが出来たらいいなと思いChatGPTに聞いたメモです。
提示された時期と論文
YINアルゴリズムは次の論文で初めて提案されたらしいです。
Cheveigné, A. de, & Kawahara, H. (2002).
YIN, a fundamental frequency estimator for speech and music.
Journal of the Acoustical Society of America (JASA), 111(4), 1917–1930.
https://doi.org/10.1121/1.1458024
また、YINは何の略称かは存在していないらしいです。
YINアルゴリズムの目的
音声や楽器音の基本周波数(Fundamental Frequency, F0)を推定するためのピッチ検出アルゴリズムです。
入力:時間領域の音声信号(1次元波形)
出力:その信号の基本周波数(F0)またはピッチ(Hz)
用途:
楽器の音程推定
音声のピッチ解析(話者の声の高さ)
音楽情報検索、メロディ抽出
ボーカロイドやAuto-Tuneなどの音程補正技術
従来法(自己相関法)との違い
自己相関法の課題となる、倍音が強いと誤検出(オクターブエラー)が起こりやすい、雑音に弱い、を改良したアルゴリズムらしいです。
自己相関法
信号をフレームに分ける
波形を少しずつずらして重ね、似ている度合いを調べる
一番似ている場所を基本周期として選び、周波数とする
YINアルゴリズム
信号をフレームに分ける
波形を少しずつずらして重ね、違う度合い(差)を調べる
差の累積平均で正規化し、最小値(谷)を探す
最初に閾値を下回る谷を基本周期として選び、周波数とする
オクターブ誤りとは
例:100Hzの正弦波
周期 T0 = 10ms
自己相関のピークは
10ms(真の周期)
20ms(2倍周期)
30ms(3倍周期)…
→ 20msのピークを拾うと 50Hz と誤認する(=オクターブ誤り)
YINはなぜオクターブ誤りを減らせるか
真の周期では波形がほぼ完全に重なり、差がゼロに近い
2倍周期では「半分だけ合う」「残りはズレる」ので差が残る
差分を短い周期からの平均で割る
最初の真の周期で大きく差が減ると、そこだけ極端に谷が深くなる
2倍周期は既に平均でならされるため、谷が浅く見える
これにより、2倍周期の浅い谷は無視される
処理速度の差はなし
N:フレーム長、M:探索する周期範囲とした場合に、両方とも O(N・M)となるため理論的計算量はほぼ同等となるようです。


コメント