『音による故障予知の教科書たたき台:5.10 ピッチ推定』LLMと一緒に書いてみた—AIが導く研究メモ

5. 特徴量抽出  

5.10 ピッチ推定

ここでいうピッチは、波形の「周期性」に対応する基本的な繰り返しの速さ(基本周波数F0)を数で表したものと考えると理解しやすい。たとえば、きれいな正弦波の1周期に要する時間をT秒とすれば、その繰り返し回数は1秒あたり1/T回で、これが周波数F0(Hz)になる。現実の音や振動は完全な正弦波ではないが、周期性を多く含むとき、その周期(あるいは基本周波数)を推定するのがピッチ推定である。人の聴感上の高さはしばしばこのF0と対応するが、聴感の「高さ」は上位の倍音群からも再構成されうるため、物理量としてのF0推定と聴感の一致は常に完全ではない点も知られている。[1]

ピッチ推定には大きく3つの見方がある。時間領域の周期性を見る方法、周波数領域で倍音の並びからF0を推定する方法、そしてケプストラム(スペクトルのさらにスペクトル)で周期を読む方法である。どれも長所と短所があり、信号の性質や雑音、計算資源によって使い分けるのが実務的である。[1]

まず時間領域の代表例が自己相関(オートコリレーション)に基づく方法で、波形を自分自身で時間ずらしして重ねたときの似ている度合いを、ずらし量ごとに評価する。周期的な信号なら、1周期分ずらすとよく重なり、相関が高くなるため、そのずらし量(ラグ)から周期Tが読み取れる。自己相関法は古典的で広く使われるが、雑音や倍音の影響で誤った山(オクターブ違い)を拾うことがある。これに改良を重ねて頑健性を高めた代表的な手法がYINで、差分に基づく指標と累積平均正規化などの工夫により誤りを減らす設計が詳しく報告されている。YINの実装では、フレーム長の取り方と探索範囲の下限・上限を適切に設定するのが安定化の鍵で、最大想定周期を十分に覆う窓長を確保する経験則が示されている。さらに、自己相関を高速に計算するためにFFTを用いる実装も解説され、計算効率化の要点がまとめられている。[2][3][4]

次に周波数領域からのアプローチ。周期信号のスペクトルは、基本周波数F0の整数倍に線状のピーク(倍音)が並ぶ。ここからF0を直接読みにいくと、最も大きいピークが必ずしもF0とは限らず、しばしば2倍や3倍の倍音に引っ張られる「オクターブ誤り」が問題になる。これに対処する古典的な方法がHPS(Harmonic Product Spectrum)で、スペクトルを2倍、3倍…と間引き(ダウンサンプリング)した系列どうしを点ごとに掛け合わせる(または和をとる)と、各倍音が基本周波数位置に重なって強調され、F0に相当する周波数で最大になるという性質を用いる。HPSは実装が比較的簡単で雑音にもある程度強いが、考慮する倍音の本数やスペクトル分解能の設計が性能に影響し、オクターブ誤りへの補正規則など実務的注意が解説されている。また、HPSの派生やDCT由来の類似枠組み、最大尤度型の推定なども研究されている。[5][6][7][8]

ケプストラム(ケプストラム分析)は、スペクトルの対数をとってからもう一度フーリエ変換した量(ケプストラム)に注目し、基本周期に相当する「ケフレンシー」にピークが現れることを用いてF0を推定する方法である。直感的には、倍音群の等間隔性がケプストラム空間で1本の顕著なピークに集約されるため、周期の検出がしやすくなる。実装の要点は、有効なケフレンシー範囲(1/fmax〜1/fmin)でピーク探索を行うことと、グリッド刻みに起因する誤差を理解したうえでピークを読むことにある。ケプストラムはとくに低めのF0で安定する傾向があることが紹介されている。[9][10]

これらの方法に共通する実務課題として、オクターブ誤り(2倍・1/2倍にずれる)と雑音・共鳴の影響がある。対策としては、探索範囲を現実的なF0区間に制限する、候補F0の1/2や1/3も同時に検査して急なオクターブ跳躍を抑制する、倍音の整合性(候補F0の整数倍位置にピークが並ぶか)をスコア化して選別する、といった後処理がよく用いられる。また、自己相関系は前処理(ホワイトニングやスペクトル整形)で雑音やフォルマントの支配を和らげる工夫が報告されている。YINのような改良型は、差分正規化やしきい値選択により誤検出を抑えている。[11][4][6][2][1]

実装の流れを整理すると、1) データ取得と前処理(帯域制限やレベル確認)、2) 短時間フレーミング(解析窓とホップ長の設定)、3) 推定法の適用(YINなどの時間領域、HPSなどの周波数領域、またはケプストラム)、4) 有効範囲での候補探索とピーク選択、5) オクターブ誤りの補正や平滑化(時間連続性に基づく修正)、となる。モノフォニック(単一音)のピッチ推定では、YINのような自己相関改良法が速度・精度のバランスに優れる例が多く、深層学習向けの実装でも核となる演算(差分、正規化、FFTでの加速)が整理されている。一方、周波数領域のHPSは倍音列が素直な機械音や楽器音で効果的で、簡潔にリアルタイム動作させやすい利点が解説されている。ケプストラムは、包絡とピッチ情報を分離して考えるときの教育的価値も高く、低域F0での有効さが示されている。[3][10][6][9][5]

故障予知への応用では、F0そのものよりも「F0の時間推移」と「F0の倍音列の整い具合」が手掛かりになる。回転機では、回転数に相当する基本周波数とその高調波が並ぶのが正常の指紋で、アンバランスや緩み、歯車メッシュの問題では側帯域が発生したり、F0がゆっくり揺れたりする。したがって、各フレームでF0を推定し時間系列にしてトレンドを追う、同時にHPSやスペクトル上で倍音の並びと強さの比をチェックする、という二段構えが実務的である。探索範囲は機械の仕様から見積もり(下限・上限のF0)、時間的平滑化で瞬間的な跳びを抑え、オクターブ誤りを検出したら1/2や2倍に補正して連続性を保つのが堅実だ。[6][1]

具体的な方法選択の指針を挙げる。- 雑音が多くてもモノフォニックで安定した周期があるなら、YINなど自己相関改良法を第一候補にする。- 倍音がはっきり見える機械音なら、HPSでF0候補を得てから倍音整合のスコアで確定する(必要に応じオクターブ補正)。- 低めのF0や包絡と周期の分離学習を重視するなら、ケプストラムで候補周期を得る。- スペクトルの整形やノイズ補償を併用し、相関やピーク検出の偽ピークを減らす工夫を加える。[4][10][2][11][9][5][6]

実装の注意点として、1) フレーム長は最長周期の少なくとも2倍程度の時間幅を確保し(長くすると時間分解能は下がるが誤りは減りやすい)、2) 探索F0範囲は機械仕様や人間の声域の既知レンジに合わせ(例:音声で80–450Hzなど)、3) オクターブ誤りの事後チェック(F0/2, F0/3検査や倍音整合)を入れ、4) 連続フレームのF0変化に上限を設けて不自然な跳躍を抑える、といったルールが有効である。[2][6][1]

最後に、教育上のまとめとして、ピッチ推定は「周期を時間で探す」「倍音の整列から探す」「ケプストラムで周期を読む」という三本柱で理解できる。各手法は、オクターブ誤りと雑音に弱い場面があるため、レンジ制限、倍音整合、時間平滑化の三つの補助を加えると現場適用の信頼性が上がる。代表的手法のYINは自己相関系の弱点に実装上の工夫で迫った改良法として広く引用され、HPSはシンプルさと倍音整合の強みで実用性が高く、ケプストラムは周期抽出の理屈を可視化できる点で学習価値が高い。これらを組み合わせ、機械の既知回転数や負荷条件と照らしてF0系列を監視すれば、回転の乱れや側帯域の出現といった異常の兆候を早期に捉えやすい。[10][6][2] [1] https://speechprocessingbook.aalto.fi/Representations/Fundamental_frequency_F0.html

[2] http://audition.ens.fr/adc/pdf/2002_JASA_YIN.pdf

[3] https://brentspell.com/blog/2022/pytorch-yin/

[4] https://pubs.aip.org/asa/jasa/article/111/4/1917/547221/YIN-a-fundamental-frequency-estimator-for-speech

[5] https://fileadmin.cs.lth.se/serg/old-serg-dok/docs-masterthesis/109_15-2006.pdf

[6] http://musicweb.ucsd.edu/~trsmyth/analysis/Harmonic_Product_Spectrum.html

[7] https://ieeexplore.ieee.org/document/6718976/

[8] https://hajim.rochester.edu/ece/sites/zduan/teaching/ece477/lectures/Topic%204%20-%20Single%20Pitch%20Detection.pdf

[9] https://stackoverflow.com/questions/7813213/estimate-the-fundamental-frequency-using-cepstral-analysis

[10] http://flothesof.github.io/cepstrum-pitch-tracking.html

[11] https://www.isca-archive.org/interspeech_2010/rahman10_interspeech.pdf

[12] https://www.jstage.jst.go.jp/article/ast/46/1/46_e24.69/_pdf

[13] https://en.wikipedia.org/wiki/Pitch_detection_algorithm

[14] https://www.cycfi.com/2018/03/fast-and-efficient-pitch-detection-bitstream-autocorrelation/

[15] https://stackoverflow.com/questions/39397804/how-to-implement-my-own-hps-algorithm

[16] https://staff.aist.go.jp/m.goto/PAPER/SAPA2012nakano.pdf

[17] https://www.ee.columbia.edu/~dpwe/workshops/crac/papers/ishimoto.pdf

[18] https://www.jstage.jst.go.jp/article/ast/26/6/26_6_502/_pdf/-char/en

[19] https://ojs.unud.ac.id/index.php/jlk/article/download/83003/43490[20] https://support.ircam.fr/docs/AudioSculpt/3.0/co/Discrete%20Cepstrum.html

※本ページは、AIの活用や研究に関連する原理・機器・デバイスについて学ぶために、個人的に整理・記述しているものです。内容には誤りや見落としが含まれている可能性もありますので、もしお気づきの点やご助言等ございましたら、ご連絡いただけますと幸いです。

※本ページの内容は、個人的な学習および情報整理を目的として提供しているものであり、その正確性、完全性、有用性等についていかなる保証も行いません。本ページの情報を利用したこと、または利用できなかったことによって発生した損害(直接的・間接的・特別・偶発的・結果的損害を含みますが、これらに限りません)について、当方は一切責任を負いません。ご利用は利用者ご自身の責任でお願いいたします。

おすすめの記事