Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibを使ってPythonでMFCC(メル周波数ケプストラム係数)を可視化する方法

音声処理の分野では、MFCC(メル周波数ケプストラム係数)は音声認識や話者識別などで広く使われる重要な特徴量です。この記事では、PythonとMatplotlibを使ってMFCCをヒートマップ形式で可視化する手順を解説します。

実装の流れ

PythonでMFCCをプロットするには、以下の手順に従います。

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整する。
  • WAVファイルを開いて読み込む。
  • 音声信号からMFCC特徴量を計算する。
  • 図(figure)とサブプロットのセットを作成する。
  • 配列の2つの軸を入れ替える(転置する)。
  • データを2次元ラスタ画像として表示する。
  • 図を画面に表示するには show() メソッドを使用する。

必要なライブラリ

このコードでは以下のライブラリを使用します。事前にインストールしておいてください。

  • python_speech_features: MFCC特徴量の抽出に使用
  • scipy: WAVファイルの読み込みに使用
  • matplotlib: グラフの描画に使用
  • numpy: 配列操作に使用

インストールは以下のコマンドで行えます。

pip install python_speech_features scipy matplotlib numpy

コード例

以下が実際のコード例です。

from python_speech_features import mfcc
import scipy.io.wavfile as wav
import matplotlib.pyplot as plt
import numpy as np

# 図のサイズとレイアウトの設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# WAVファイルを読み込む
(rate, sig) = wav.read("my_audio.wav")

# 音声信号からMFCC特徴量を計算
mfcc_data = mfcc(sig, rate)

# 図とサブプロットを作成
fig, ax = plt.subplots()

# 軸を入れ替えて、時間軸を横方向にする
mfcc_data = np.swapaxes(mfcc_data, 0, 1)

# MFCCデータを画像として表示
cax = ax.imshow(mfcc_data, interpolation='nearest', cmap='copper', origin='lower')

plt.show()

コードのポイント解説

1. MFCCの計算

mfcc(sig, rate) 関数は、音声信号 sig とサンプリングレート rate を受け取り、MFCC特徴量の2次元配列を返します。デフォルトでは13個のケプストラム係数が計算されます。

2. 軸の入れ替え

np.swapaxes(mfcc_data, 0, 1) を使うことで、縦軸をケプストラム係数のインデックス、横軸を時間フレームにすることができます。これにより、一般的なMFCCスペクトログラムのような見た目になります。

3. imshowによる可視化

imshow() メソッドは、2次元配列を画像として描画します。cmap='copper' でカラーマップを指定し、origin='lower' によりY軸の向きを下から上に設定しています。

出力結果

コードを実行すると、横軸に時間フレーム、縦軸にケプストラム係数番号をとったMFCCのヒートマップが表示されます。色の濃淡が各係数の値の大きさを表しており、音声の特徴的なパターンを視覚的に確認できます。

この手法は、音声データの前処理確認や、特徴抽出が正しく行われているかの検証に非常に役立ちます。

  1. Matplotlibで日時軸上に長方形をプロットする方法を解説

    Matplotlibを使用して日時(datetime)軸上に長方形を描画するには、以下の手順に従います。図のサイズを設定し、サブプロット間および周囲のパディングを調整します。新しい図を作成するか、既存の図をアクティブにします。add_subplot()メソッドを使って、サブプロット配置の一部として図にAxes(軸オブジェクト)を追加します。長方形を定義するために、Pythonのdatetimeとmatplotlib.datesを組み合わせて、アンカーとなる基準点を求めます。add_patch()メソッドを使って、軸にPatch(長方形パッチ)を追加します。x軸の主目盛りに対してロケーターとフォ

  2. Python Matplotlibで3Dグラフをプロットする方法を解説

    PythonのMatplotlibを使えば、3次元の散布図やグラフを簡単に描画できます。この記事では、mpl_toolkits.mplot3dモジュールを利用して3Dグラフを作成する手順を、サンプルコード付きでわかりやすく解説します。 3Dグラフをプロットする基本手順 Pythonで3Dグラフを描くには、以下のステップに従います。 figure()メソッドを使って、新しい図(フィギュア)を作成するか、既存の図をアクティブにします。 Axes3Dオブジェクトを取得して、3D用の座標軸を準備します。 x、y、zそれぞれのデータポイントをリストとして定義します。 scatter3D()メソッドを使