『音による故障予知の教科書たたき台:4.11 特徴量抽出用配列への変換』LLMと一緒に書いてみた—AIが導く研究メモ

4. データ前処理  

4.11 特徴量抽出用配列への変換

ここでは、録音した波形(時間に沿った数列)を、機械学習が扱いやすい「特徴量ベクトル(配列)」に変換する一連の流れを、理由と手順をセットで分かりやすくまとめる。目的は、長くてバラつきのある生データを、行=サンプル、列=説明変数という揃った表(配列、行列)にし、分類・回帰・異常検知にそのまま入力できる状態に整えることだ。音や振動では、次の三段構成が実務の標準になる。1) 窓で区切る(フレーミング)、2) 窓ごとに特徴を計算する(時間領域・周波数領域・聴覚尺度など)、3) 学習器に入る形に詰め替える(2次元配列X、必要に応じて時系列スタック)。この枠組みは音声・機械音に広く使われ、実務ガイドや入門記事でも同様のステップが紹介されている。[1][2][3]

まずフレーミングの狙いを整理する。生の波形は長さがさまざまで、ある瞬間のイベントが全体平均に埋もれやすい。短い時間幅で区切れば、その瞬間の性質(ピーク、粗さ、周波数の偏り)を局所的に測れる。実務では「固定長の窓」を時間方向にずらしながら切り出し(オーバーラップも可)、各窓を1件のサンプルとみなして特徴を作る。製造センサの解説でも、固定時間長で切り出す→必要に応じノイズ除去→統計量や周波数分析→データセット化、という流れが基本として示されている。窓長は、見分けたい周波数差(分解能)と、捉えたい時間変化(反応の速さ)のバランスで決める。短い窓は変化に敏感、長い窓は周波数を細かく見分けやすい、というトレードオフがある。[3][1]

次に特徴の中身を決める。大きく三系統を押さえればよい。1) 時間領域の統計(平均、分散、最大、最小、RMS、ピーク数、ゼロ交差率、自己相関など)で「形の粗さ」「強さ」「変動」を捉える。2) 周波数領域(FFT、バンドエネルギー、スペクトル重心、スペクトル平坦度、スペクトルフラックス、ロールオフなど)で「どの帯域が強いか」「成分の偏り」を表す。3) 聴覚尺度やケプストラム(メルスペクトログラム、MFCC、デルタ・加速度係数)で「人の聴こえ方に沿った圧縮表現」を得る。実務入門では、統計・差分・微積分・ピーク検出・周波数分析・自己相関などを組み合わせることが推奨され、音向けの代表例としてMFCCの工程(STFT→パワースペクトログラム→メルフィルタバンク→対数→DCT)が広く解説されている。MathWorksの音響機能一覧でも、melSpectrogram、mfcc、spectralCentroid、spectralFlatness、spectralFluxなどが標準的な特徴として提供されている。[4][2][1][3]

MFCCは特に有名なので手順を短く示す。窓で切る→各窓に短時間フーリエ変換→パワースペクトログラム→メルフィルタで帯域圧縮→対数→離散コサイン変換(DCT)で次元を圧縮し係数列を得る、という流れで、人の聴覚に近い周波数感度でスペクトル包絡を要約できる。多くの実装ではn次(例: 13〜40次)を採用し、時間的な変化を捉えるために一階差分(デルタ)や二階差分(デルタデルタ)を連結して配列に積む。Pythonやライブラリの例でも、librosaでロード→librosa.feature.mfccで係数行列を得る手順が紹介されている。[5][6][2][4][3]

ここから「配列(行列)への詰め替え」が実務の肝になる。基本型は、行=窓(サンプル数M)、列=特徴(次元数D)の2次元配列X(形状M×D)だ。例えば、RMS・ピーク・ゼロ交差率・3つの帯域RMS・スペクトル重心・平坦度・フラックス・MFCCの前20次・デルタ20次を連結すれば、1窓あたりD次元のベクトルになる。全窓分を縦に積み上げれば、学習器(ランダムフォレスト、SVM、勾配ブースティング、NNなど)にそのまま入る。時系列の流れを保持して畳み込みやRNNに入れたいときは、窓列を時間軸でスタックした3次元テンソル(サンプル×時間フレーム×周波数チャンネル)として扱う。Matlabの例でも、音特徴を抽出してから学習で扱いやすいデータストアに流すワークフローが示されている。[3]

配列化の前後で重要な実務ポイントをまとめる。- 正規化・標準化は「訓練データの統計で学び、検証・テストに適用する」順序(データ漏えい防止)が必須。欠損やアウトライヤは前処理段で対処しておく。- ラベルは窓単位で整合をとる。区間ラベルが粗い場合は、ラベル信頼度や時間重みを設ける設計も検討する。- 特徴選択や次元圧縮(PCA、相関、逐次選択など)は、過学習防止と計算効率の観点で有効。MathWorksのトピックでも音特徴の選択が解説されている。- 窓長・オーバーラップ・サンプリング周波数はSTFTやMFCCの分解能に直結する。前節までの基礎(df≈fs/N、ナイキスト、窓関数の影響)を踏まえて設計する。- 波形そのものを学ぶ深層学習を使わない場合、特徴抽出で情報を凝縮するのが王道で、製造センサ・音声の入門記事でもこの方針が示されている。[2][1][3]

具体的な変換手順のテンプレートを記す。1) 取り込みと品質確認(サンプリング周波数、レベル、クリップ無、必要ならフィルタやデノイズ)。2) フレーミング(窓長N、ホップH、必要に応じオーバーラップ)と窓関数適用。3) 時間領域特徴(平均、RMS、分散、ピーク、ゼロ交差率、鋭さ指標など)。4) 周波数領域特徴(FFT→バンドエネルギー、重心、平坦度、フラックス、ロールオフなど)。5) 聴覚尺度・ケプストラム(メルスペクトログラム、MFCC、デルタ・デルタデルタ)。6) 特徴の連結→1窓1ベクトル(D次元)を作る。7) 全窓分を縦に積み上げてX∈R^{M×D}を得る。8) スケーリング(標準化など)を「訓練データ基準」で実施。9) ラベルyを同じ窓粒度で整列させ、学習・評価へ。ライブラリの実例として、librosaでのMFCC抽出や、オーディオ特徴抽出をパイプライン化する仕組みが紹介されている。[5][1][4][2][3]

MFCCを採用する場合の注意。係数次数n_mfccの設定で次元と表現力が変わる。人声・一般音で13〜20、音分類で40程度まで広げる例もある。また、メルフィルタバンクの数、FFTサイズ、ホップ長は分解能を左右する。デルタ・デルタデルタを連結すると変化の速さも学習できるが、次元が増えるので正則化や特徴選択も検討する。音声処理の実装ガイドは落とし穴(サンプリング、窓、パディング、スケール)をまとめており、参照しながら設計するとよい。[6][2][5][3]

配列設計と学習器の相性についても触れる。- 古典機械学習(SVM、ツリーベースなど)は、各窓を独立サンプルとする2次元配列Xが扱いやすい。- 畳み込みやRNNでは、メルスペクトログラムやログメルを「画像(時間×周波数)」として3次元テンソルで渡す設計も一般的。- 連続窓を集約して1レコード化(例えば複数窓の統計をさらに集約)する「フレーム統合」も、サンプル独立性を保ちたい場面で有効。- 教師なしや異常検知(One-Classやオートエンコーダ)では、ログメルやMFCC時系列を固定長テンソルに切り出して学習させるのが実務で多い。[3]

最後に、故障予知でのコツを三点。- 正常データを豊富に取り、基準分布(特徴のレンジ)を配列として確立する。これは後段の外れ値検出や閾値設計の安定化に効く。- 高周波に異常指標が出る装置では、メルではなく線形周波数のバンドエネルギーやスペクトル統計を手厚くする。聴覚尺度(メル)は可聴音の要約に強いが、機械の高域兆候では生スペクトル特徴が効くことがある。- 周波数の時間変化を重視する場合、スペクトログラムやMFCCの時系列をそのままテンソル化し、ウィンドウ内をさらに「小窓」に分けて局所的な変化も拾う設計が有効である。[1][2][3]

以上の流れ(フレーミング→特徴抽出→配列化)は、公開の入門・実装資料と整合する実務標準であり、波形から学習可能な特徴ベクトルを安定して作るための基本設計として推奨できる。[4][6][2][5][1][3] [1] https://www.datarobot.com/jp/blog/use_manufacturing_sensor_data_for_machine_learning/

[2] https://qiita.com/kshina76/items/5686923dee2889beba7c

[3] https://jp.mathworks.com/help/audio/feature-extraction.html

[4] https://www.docswell.com/s/kokuren333/KL1VXD-2024-11-28-201927

[5] https://zenn.dev/m_nakano_teppei/articles/e7a7a968f95243

[6] https://stackoverflow.com/questions/54160128/feature-extraction-using-mfcc

[7] https://ai-scholar.tech/time-series/TSDFNet

[8] https://lp.cloudplatformonline.com/rs/808-GJW-314/images/InsideSaaS-Google0701.pdf

[9] https://shion.blog/the-10th-machine-learning-workshop_1/

[10] https://deus-ex-machina-ism.com/?p=51338

[11] https://zenn.dev/aki_watanabe/articles/cfc8b37731f5cc

[12] https://speakerdeck.com/sugupoko/20250413-xiang-nan-kagglerhui-yin-sheng-ren-shi-deshi-unotutemerusunandatuke

[13] https://github.com/jsingh811/pyAudioProcessing

[14] https://www.tensorflow.org/tutorials/structured_data/time_series?hl=ja

[15] https://waseda.repo.nii.ac.jp/record/20289/files/Honbun-4858.pdf

[16] https://github.com/IliaZenkov/sklearn-audio-classification

[17] https://cloud.google.com/bigquery/docs/auto-preprocessing?hl=ja

[18] https://repository.dl.itc.u-tokyo.ac.jp/record/4887/files/37107091.pdf

[19] https://www.isca-archive.org/interspeech_2020/lenain20_interspeech.pdf[20] https://book.st-hakky.com/data-science/audio-recognition-preprocessing-techniques

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

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

おすすめの記事