
4. データ前処理
4.3 ウィンドウ処理による分割
長い録音や連続するセンサー信号をそのまま一度に解析すると、時間ごとの変化が平均されてしまい、変化の瞬間や短いイベントを見落としやすい。そこで用いる基本が「ウィンドウ処理による分割」である。これは、信号を短い時間のかたまり(フレーム)に分け、各フレームごとに解析するやり方で、短時間フーリエ変換(STFT)やスペクトログラムなど多くの手法の土台になっている。フレームの作り方には、長さ(何ミリ秒をひとかたまりにするか)、ずらし量(どれだけ重ねるか=オーバーラップ)、そして端を滑らかにする窓関数の3つを設計するポイントがある。[1][2][3]
まず狙いを直感で押さえる。分割の目的は「いつ・どのくらい変わったか」を逃さないための時間分解能を確保しつつ、その区間内で周波数成分を安定して読める周波数分解能も保つことにある。フレームを長くすれば周波数の見分けは細かく(周波数分解能が高く)なるが、変化のタイミングがぼやける。短くすれば変化の瞬間に敏感(時間分解能が高い)になるが、周波数は粗くなる。これはSTFTの基本的なトレードオフであり、窓長とずらし量(ホップ)の設定が結果の見え方を決める。[2][4][1]
分割の手順はシンプルだ。1) 全信号から長さNサンプルの区間を切り出す。2) 切り出し端での段差が周波数側に「にじみ」を作らないよう、窓関数を掛けて両端をなめらかにする。3) 解析(たとえばFFT)を実行する。4) 次の区間へホップサイズHだけずらし、重ねながら同じ処理を繰り返す。このとき、Hを小さく(高オーバーラップ)すると時間方向の情報が密になり滑らかだが計算量が増え、Hを大きく(低オーバーラップ)すると軽くなる代わりに粗くなる。[5][3][1][2]
窓関数は「端の処理」の要で、代表的なものにハン(Hann)、ハミング、ブラックマン、ブラックマン・ハリス、フラットトップなどがある。窓を掛けるとスペクトルの主ピーク(メインローブ)がやや広くなる一方、周りの漏れ(サイドローブ)が低く抑えられるため、隣接帯域へのにじみを減らせる。ハン/ハミングは中庸で扱いやすく、ブラックマンやブラックマン・ハリスはサイドローブをより低く抑えたいときに有効だがメインローブは広がる。目的に応じて「解像度(ピークの細さ)」と「にじみの少なさ(サイドローブ低さ)」のバランスを選ぶのが定石で、まとめ表でもハンはサイドローブ約-31dB、ハミング約-42dB、ブラックマン約-58dB、ブラックマン・ハリス約-90dBといった目安が示されている。[6][7][2]
実務での設計指針をまとめる。- 窓長Nは、見たい最小の周波数差Δfに対して、おおむねΔf≈fs/N(fsはサンプリング周波数)となるため、必要な分解能から逆算して選ぶ(たとえばΔf=1Hzが必要でfs=1,000HzならN≈1,000)。一方、時間の変化を逃したくない場合は、イベントの時間幅より短めの窓を選ぶ。トレードオフは避けられないので、用途に合わせて優先度を決める。- ホップHは、時間の滑らかさと計算量の妥協点で決める。音声や機械音では25%〜75%オーバーラップ(H=N/4〜N/1)などがよく使われ、スペクトログラムの滑らかさと処理負荷のバランスを取る。- 窓の種類は、強弱の差が大きい信号や弱い線スペクトルを漏れから守りたい場合はサイドローブの低い窓(ブラックマン・ハリスなど)、周波数分離を重視したい場合はハン/ハミングを起点に試す。振幅の絶対値を重視する校正用途ではフラットトップ窓の選択肢もあるが、分解能は犠牲になる。[8][7][1][2]
フレーミングの効果を読み取るには、スペクトログラムが有効だ。横軸に時間、縦軸に周波数、色に強さをとる図で、窓長とホップを変えると、横方向(時間)と縦方向(周波数)の「細かさ」が変わる。短い窓・高オーバーラップでは、変化の瞬間がはっきり見えるが、帯域の筋が太めに見える。長い窓・低オーバーラップでは、筋は細く分かれるが、出入りのタイミングがぼやける。解析記事や実装例でも、ハン(ハニング)窓と所定のオーバーラップで時間切り出し→FFT→平均・表示という流れが紹介されている。[3][8]
注意点もいくつかある。- 「整数周期で切れていない正弦波」は、窓なし(矩形)だとリーケージが強く出る。ハンやハミングで端を滑らかにすると漏れは減るが、ピークが広がるぶん分解能には影響する。窓の振幅補正(窓による平均振幅低下を補う係数)や、PSD換算時の等価雑音帯域幅(ENBW)補正を忘れない。- 表示の細かさを上げる「ゼロパディング」は、周波数目盛りを細かく見せる補間であり、真の分解能(fs/N)は窓長で決まる点に注意する。- 逆変換(ISTFT)で時間波形を再合成する場合は、窓とホップの組み合わせが「重ね合わせで1になる条件」(COLA条件)を満たす設定を選ぶことが望ましい。一般的な窓と適切なオーバーラップなら、重ね合わせ時にスケーリングで復元できることが実装例でも示されている。[4][8][2][5]
故障予知への実践的な使い方は明快だ。- トレンド監視: 同じ運転条件でフレームを切り、各フレームの特徴量(帯域RMS、スペクトルピーク、ゼロ交差率など)を時系列に並べると、徐々に増える成分や断続的なイベントが見つけやすい。- イベント検出: 高オーバーラップでフレーミングし、各フレームのエネルギーや高周波比率がしきい値を超えた区間を「候補」として切り出し、詳細にFFTやエンベロープ解析をかける二段構えにすると、計算量と見逃しのバランスがよい。- 周波数指紋の安定化: フレーム内で窓を掛けてリーケージを抑えると、回転基本周波数や側帯域などの細いピークが読み取りやすくなり、正常との比較(差分・比率)が安定する。[9][1][2][6]
最後に設定の選び方を手順で示す。1) 目的と優先度を決める(時間変化を追うのか、近接周波数の分離を優先するのか)。2) 必要分解能から窓長Nを初期設定する(Δf≈fs/N)。3) 目視の滑らかさや検出遅延に合わせてホップHを決める(25–75%オーバーラップが出発点)。4) 窓はハン/ハミングから試し、弱い線成分の保護が必要ならブラックマン系へ、振幅確度重視ならフラットトップも検討する。5) 窓補正(振幅またはPSDのENBW補正)と必要ならゼロパディングで表示間隔を整え、スペクトログラムやPSDで結果を点検する。6) 必要に応じて設定を微調整し、同条件での再現性を確認する。これらは計測・信号処理の一般的な解説に沿う実務的な流儀である。[7][1][8][2][6][3] [1] https://appswingby.com/%E7%9F%AD%E6%99%82%E9%96%93%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B-%E4%BB%8A%E6%9B%B4%E8%81%9E%E3%81%91%E3%81%AA%E3%81%84it%E7%94%A8%E8%AA%9E%E9%9B%86/
[2] https://www.ni.com/ja/shop/data-acquisition/measurement-fundamentals/analog-fundamentals/understanding-ffts-and-windowing.html [3] https://ja.wikibooks.org/wiki/GNU_Octave_2.1.x_%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB/%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E4%BF%A1%E5%8F%B7%E5%87%A6%E7%90%86 [4] https://www.s-musiclab.jp/max_docs/mmj_docs/max4/msp/msp_tutorial/mstu26.html [5] https://qiita.com/takayoshi1968/items/636372d464d02699ba4f [6] https://www.kennzo.net/window-function [7] https://www.toyo.co.jp/mecha/faq/detail/id=2670 [8] https://watlab-blog.com/2019/05/20/spectrogram-piano/ [9] https://qiita.com/icoxfog417/items/d376200407e97ce29ee5 [10] https://www.jstage.jst.go.jp/article/jasj/75/3/75_156/_pdf [11] https://patents.google.com/patent/JPH0851580A/ja [12] https://svmeas.rion.co.jp/support/p38veq0000000cmg-att/FFT_07881.pdf [13] https://www.jstage.jst.go.jp/article/jsmbe/57/2-3/57_75/_pdf/-char/ja [14] https://elcamy.com/blog/audio-data-division [15] https://cognicull.com/ja/12l2n8lz [16] https://repository.dl.itc.u-tokyo.ac.jp/record/54478/files/K-07730.pdf [17] https://www.docomo.ne.jp/corporate/technology/rd/technical_journal/bn/vol32_1/003.html [18] https://book.st-hakky.com/purpose/complete-guide-to-preprocessing-audio-data-for-improving-machine-learning-model-performance [19] https://www.onosokki.co.jp/HP-WK/eMM_back/emm150.pdf[20] https://jp.mathworks.com/matlabcentral/answers/350115-※本ページは、AIの活用や研究に関連する原理・機器・デバイスについて学ぶために、個人的に整理・記述しているものです。内容には誤りや見落としが含まれている可能性もありますので、もしお気づきの点やご助言等ございましたら、ご連絡いただけますと幸いです。
※本ページの内容は、個人的な学習および情報整理を目的として提供しているものであり、その正確性、完全性、有用性等についていかなる保証も行いません。本ページの情報を利用したこと、または利用できなかったことによって発生した損害(直接的・間接的・特別・偶発的・結果的損害を含みますが、これらに限りません)について、当方は一切責任を負いません。ご利用は利用者ご自身の責任でお願いいたします。


