やて変えるんだろう?今回は,基本的な音響特徴量であるログメルスペクトログラムとMFCCをPythonで抽出する方法をお伝えしていこうと思います。本記事はpython実践講座シリーズの内容になります。その他の記事は,こちらの「Python入門講座/実践講座まとめ」をご覧ください。9.リスト...今回は他の記事とは違ってライブラリに頼ります。コーディングに関して未熟な部分がたくさんあると思いますので,もし何かお気づきの方は教えていただけると幸いです。誤りについてもご指摘していただけると非常に助かります。※窓幅でトレードオフが決まります。STFTの概要STFTからスペクトログラムを作る操作の概要。窓幅とホップサイズが時間分解能と周波数分解能に影響を与えることが分かる。メル周波数スペクトログラムの概要スペクトログラムをメル周波数スペクトログラムに変換する操作の概要。メルフィルタの窓の数が変換後の周波数方向のビンの数に相当することが分かる。メル周波数スぺクトログラムとは,簡単にまとめると以下のような特徴量です。短時間フーリエ変換では,音の周波数に関する時間変化を表すスペクトログラムという特徴量を得ることができます。そのスペクトログラムを,人間の聴覚特性にフィットするような形に整形(=メルフィルタバンクを適用する)したものがメル周波数対数スぺクトログラムです。一般的には「メル周波数スペクトログラム」と呼ばれていますが,この記事では対数変換(デシベルに変換)を施すことを強調するために「メル周波数対数スペクトログラム」と記述することにします。ちなみに,MFCC(メル周波数ケプストラム係数)は,メル周波数対数スペクトログラムをさらに離散コサイン変換してケプストラム領域に飛ばし,そのうち低次元の係数をとってきた特徴量のことを指しています。「STFTの窓幅」によって決められます。短時間フーリエ変換を行う際の窓関数の幅を小さくすれば,それだけ時間方向の解像度が上がります。これは逆を考えると分かりやすく,窓幅を大きくすればそれだけ長い時間情報を1つの情報に凝縮してしまっているため,それだけ時間方向に荒くスキャンしているということになります。時間分解能はSTFTの窓関数のホップサイズにも依存します。ホップサイズが小さければ小さいほど時間方向に細かくスキャンすることになるため,時間分解能は高くなります。一方で,ホップサイズを大きくすればそれだけ時間方向に荒くスキャンすることになるため,時間分解能は低くなります。一般的に,ホップサイズは「窓幅の半分」「窓幅の1/4」などのように窓幅を基準にして考えられることが多いです。そのため,時間分解能は窓幅に依存すると言われることが多いです。一方で,周波数分解能も「STFTの窓幅」によって決められます。これは非常に単純で,窓幅を大きくすればするほどたくさんの周波数帯を含めることができるため,周波数方向に細かくスキャンしていることになります。ちなみに,ホップサイズを変えてもスキャンできる周波数帯は変わらないため,周波数分解能は変わりません。以上を踏まえれば,時間分解能と周波数分解能はどちらも窓幅に依存し,トレードオフの関係にあることが分かります。ちなみに,これを「不確定性原理」と呼びます。fmax=fmax)窓幅を変えることで時間周波数分解能の異なるスペクトログラムを生成しました。n_mels=80としているのは80個の窓を用意しているということです。することで,周波数方向に80個のビンが出現します。fminとfmaxという引数を指定することでめるフィルタの下限と上限を設定することができます。詳しくはlibrosaのドキュメントをご覧ください。●librosa.filters.mel●librosa.feature.melspectrogramまとめ時間周波数分解能の異なるスペクトログラムを抽出する方法をお伝えしました。Beginaidアカデミック【超初心者向け】PyTorchのチュートリアルを読み解く。Beginaidアカデミック【インストール方法】「nvidia-smi」を進化させた「nvidia-htop」を活用しよう。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目です過去問解説販売中!zuka京都大学で機械学習を学んでいます。iBTの出題形式が大幅変更!新テストの注意点まとめ。