【0から学ぶAI】第306回:メル周波数ケプストラム係数(MFCC) 〜音声特徴量の抽出方法を紹介

目次

前回のおさらいと今回のテーマ

こんにちは!前回は、音声データのスペクトログラムについて解説し、音声信号を周波数成分に分解して時間軸に沿って表示する方法を学びました。スペクトログラムは、音声の周波数特性を視覚的に把握するための重要なツールです。

今回は、音声データから特徴量を抽出する手法の一つであるメル周波数ケプストラム係数(MFCC)について解説します。MFCCは、音声認識システムや音声分析で広く用いられる重要な特徴量です。この記事では、MFCCの基本的な概念から、その計算方法、Pythonでの実装までを紹介し、音声特徴量抽出の基礎を学びます。

メル周波数ケプストラム係数(MFCC)とは?

メル周波数ケプストラム係数(MFCC: Mel-Frequency Cepstral Coefficients)は、音声信号のスペクトル特性を分析し、人間の聴覚特性を模倣した特徴量を抽出する手法です。MFCCは、音声認識システムにおいて音声データを効果的に解析し、パターンマッチングや分類を行うための標準的な特徴量として広く使われています。

なぜMFCCが重要なのか?

  • 人間の聴覚特性を反映: MFCCは、音声の周波数成分を人間の聴覚に基づくメル尺度に変換して処理するため、人間が実際に感じる音の特性に近い情報を持っています。
  • 音声認識に適した特徴量: 音声データの複雑な波形やスペクトル情報を、MFCCを用いることで数値データに変換し、音声パターンの識別に活用できます。

MFCCの計算ステップ

MFCCを計算するには、以下のステップを経て音声データを処理します。

1. 短時間フーリエ変換(STFT)の実施

音声データを小さな時間区間(フレーム)に分け、各フレームごとに短時間フーリエ変換(STFT)を行い、周波数成分を抽出します。これにより、音声の時間的な変化を捉えつつ、周波数情報を得ることができます。

2. メルフィルタバンクの適用

フーリエ変換で得られたスペクトルに対して、メルフィルタバンクを適用します。メル尺度は、低周波域では細かく、高周波域では粗く分解することで、人間の聴覚特性に基づいた周波数分解を実現します。

3. 対数スケーリング

メルフィルタバンクを通過したスペクトルの振幅に対して、対数スケーリングを行います。これにより、振幅の大きさが対数的に変換され、音声データの大きさの違いによる影響が軽減されます。

4. 離散コサイン変換(DCT)

最後に、対数化されたスペクトルに対して離散コサイン変換(DCT)を行い、時系列の特徴を抽出します。このステップで得られるのがMFCCです。通常、DCTの結果から低次の係数(最も特徴的なもの)を使用します。

PythonでのMFCC抽出

PythonのLibROSAライブラリを使って、音声データからMFCCを抽出する方法を見ていきましょう。

1. 音声ファイルの読み込み

まず、LibROSAを使って音声ファイルを読み込みます。

import librosa

# 音声ファイルのパス
audio_path = 'example.wav'

# 音声ファイルの読み込み
y, sr = librosa.load(audio_path, sr=None)

ここでは、librosa.load()関数を使って、音声ファイルから波形データ(y)とサンプリングレート(sr)を取得しています。

2. MFCCの抽出

LibROSAのlibrosa.feature.mfcc()関数を使用して、MFCCを抽出します。

import librosa.display
import matplotlib.pyplot as plt

# MFCCの抽出
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)

# MFCCの表示
plt.figure(figsize=(10, 4))
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.colorbar()
plt.title('MFCC')
plt.xlabel('Time (seconds)')
plt.ylabel('MFCC Coefficients')
plt.show()
  • librosa.feature.mfcc(): 音声データからMFCCを抽出する関数です。n_mfccは抽出する係数の数を指定し、一般的に12〜13個が使われます。
  • librosa.display.specshow(): MFCCを時間軸に沿って表示する関数です。これにより、音声の特徴量が視覚的に確認できます。

MFCCの解析

上記のコードを実行すると、MFCCが時間軸に沿って表示され、音声データの特徴が視覚的に把握できます。この表示により、特定の音素(音の単位)の違いや、話者の特徴などが分析できます。

MFCCの応用例

MFCCは音声認識だけでなく、以下のような様々な応用に利用されています。

1. 音声認識システム

音声認識システムでは、MFCCを使って音声データを数値化し、その数値データを基に機械学習モデルやディープラーニングモデルを訓練します。MFCCは音声のパターンを効果的に捉えるため、正確な音声認識に貢献します。

2. 話者認識

話者認識システムでは、特定の話者の特徴を捉えるためにMFCCが使われます。各話者の音声データからMFCCを抽出し、それを比較することで、誰が話しているのかを判別できます。

3. 音楽情報処理

音楽ジャンルの分類や楽器音の認識にもMFCCが活用されています。音楽データのスペクトル情報を分析し、音楽の特徴を数値化することで、曲のジャンルや楽器の種類を識別します。

MFCC計算時の調整パラメータ

LibROSAを使ってMFCCを計算する際には、いくつかのパラメータを調整することができます。

1. n_mfcc(MFCCの数)

n_mfccは、抽出するMFCCの数を指定します。通常、12〜13個程度が使用されますが、用途に応じて調整可能です。より多くの係数を抽出することで、より詳細な音声特徴を捉えることができますが、データ量が増えるため計算コストも高くなります。

2. n_fft(FFTのウィンドウサイズ)

n_fftは、STFTを計算する際のウィンドウサイズを指定します。ウィンドウサイズを大きくすると、周波数分解能が高くなりますが、時間分解能が低くなります。一般的には、2048や1024のような2の累乗値が使われます。

3. hop_length(フレームシフト)

hop_lengthは、STFTのフレームシフトの大きさを指定します。この値を小さくすると時間分解能が高くなり、詳細な時間情報が得られますが、計算コストが増加します。通常、hop_lengthn_fftの半分(例えば、n_fft=2048ならhop_length=1024)が使用されます。

実践例:異なる音声サンプルのMFCCの比較

MFCCを使って、異なる

音声サンプルの特徴を比較することができます。例えば、男性と女性の声、楽器の音声など、異なる音声データからMFCCを抽出し、その違いを視覚化して分析します。

# 2つの異なる音声ファイルを読み込む
y1, sr1 = librosa.load('male_voice.wav')
y2, sr2 = librosa.load('female_voice.wav')

# 各音声ファイルからMFCCを抽出
mfccs1 = librosa.feature.mfcc(y=y1, sr=sr1, n_mfcc=13)
mfccs2 = librosa.feature.mfcc(y=y2, sr=sr2, n_mfcc=13)

# 2つのMFCCを並べて表示
plt.figure(figsize=(12, 6))

# 男性の声
plt.subplot(2, 1, 1)
librosa.display.specshow(mfccs1, sr=sr1, x_axis='time')
plt.colorbar()
plt.title('MFCC - Male Voice')

# 女性の声
plt.subplot(2, 1, 2)
librosa.display.specshow(mfccs2, sr=sr2, x_axis='time')
plt.colorbar()
plt.title('MFCC - Female Voice')

plt.tight_layout()
plt.show()

このようにして、異なる音声データのMFCCを比較することで、音声の特徴の違いや共通点を視覚的に確認することができます。

まとめ

今回は、メル周波数ケプストラム係数(MFCC)について、音声特徴量の抽出方法を紹介しました。MFCCは、音声認識や話者認識、音楽情報処理など多岐にわたる分野で重要な役割を果たしています。次回は、ノイズ除去について、音声データからノイズを取り除く手法を解説します。音声データの前処理として、ノイズ除去のテクニックを身につけましょう!

次回予告

次回は、ノイズ除去として、音声データからノイズを取り除く手法を解説します。クリアな音声を得るための技術を学び、音声処理のスキルをさらに高めましょう。


注釈

  • メル尺度: 人間の聴覚特性に基づく周波数尺度。低周波では細かく、高周波では粗く分解します。
  • 離散コサイン変換(DCT): 信号処理の一種で、MFCCの計算において、対数スペクトルを特徴量に変換するために使用されます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社PROMPTは生成AIに関する様々な情報を発信しています。
記事にしてほしいテーマや調べてほしいテーマがあればお問合せフォームからご連絡ください。
---
PROMPT Inc. provides a variety of information related to generative AI.
If there is a topic you would like us to write an article about or research, please contact us using the inquiry form.

コメント

コメントする

目次