✅ 1. FFT(高速フーリエ変換)
役割:音声波形を「時間領域」から「周波数領域」へ変換し、どの周波数がどれだけ含まれているかを分析する。
数式(離散フーリエ変換 DFT):
$$
X_k = \sum_{n=0}^{N-1} x_n \cdot e^{-j 2\pi kn / N}
$$
- $x_n$:時間領域の信号(音波)
- $X_k$:周波数領域の複素数
- $N$:信号の長さ
- $k$:周波数インデックス
**FFT(Fast Fourier Transform)**は、これを高速に計算するアルゴリズム。
Python実装(1次元FFT):
import numpy as np
from scipy.fft import fft
signal = np.array([...]) # 時間領域の波形
spectrum = fft(signal)
✅ 2. スペクトログラム(Spectrogram)
役割:FFTを短時間ごとにスライドして繰り返すことで、時間変化する周波数成分を可視化。
数式(STFT: 短時間フーリエ変換):
$$
X(\tau, \omega) = \sum_{n=-\infty}^{\infty} x[n] \cdot w[n - \tau] \cdot e^{-j \omega n}
$$
- $w[n - \tau]$:窓関数(例:ハミング窓)
- $\omega$:周波数角速度
Python(librosa):
import librosa, librosa.display
import matplotlib.pyplot as plt
y, sr = librosa.load('pikachu.wav')
S = librosa.stft(y)
librosa.display.specshow(librosa.amplitude_to_db(abs(S)), sr=sr, x_axis='time', y_axis='log')
plt.title('Spectrogram')
plt.colorbar()
plt.show()
✅ 3. MFCC(メル周波数ケプストラム係数)
役割:人間の聴覚特性に近い尺度で音色・話者特徴を抽出。
計算ステップ:
- 音声信号 → 窓ごとにFFT
- FFT → パワースペクトル(Power Spectrum)
- パワースペクトル → メルフィルタバンクで周波数圧縮
- ログスケーリング(音量感の圧縮)
- DCT(離散コサイン変換)で特徴抽出
数式(最終ステップ):
$$
\text{MFCC}n = \sum{m=1}^{M} \log(S_m) \cdot \cos\left[ n(m - 0.5)\pi / M \right]
$$
- $S_m$:メルフィルタバンク出力(ログスケーリング済み)
- $M$:フィルタ数、$n$:係数番号
Python:
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
✅ 4. クロマ特徴量(Chroma Feature)
役割:**音高(ピッチクラス)**の分布を表す(C, C#, D, ... B =12次元)
計算ステップ:
- STFTなどで周波数情報抽出
- 各周波数を12音階にマッピング
- 強度を集計して正規化
Python:
chroma = librosa.feature.chroma_stft(y=y, sr=sr)
✅ 5. Zero-Crossing Rate(ゼロ交差率)
役割:波形が0をまたぐ回数を数える ⇒ ノイズ、摩擦音、粗い音の指標。
数式:
$$
ZCR = \frac{1}{T-1} \sum_{t=1}^{T-1} \mathbb{1}{{x_t \cdot x{t-1} < 0}}
$$
- $x_t$:時刻tの信号
- 交差したら1、それ以外は0(インジケータ関数)
Python:
zcr = librosa.feature.zero_crossing_rate(y)
✅ 6. RMS Energy(実効値エネルギー)
役割:振幅の強さの指標。音の「強さ」や「勢い」を示す。
数式:
$$
\text{RMS} = \sqrt{ \frac{1}{N} \sum_{i=1}^{N} x_i^2 }
$$
- $x_i$:信号の振幅値
- $N$:サンプル数
Python:
rms = librosa.feature.rms(y=y)
🔚 まとめ(どの特徴量を使う?)
| 特徴量 | 向いてること | 補足 |
|---|---|---|
| FFT / スペクトログラム | 可視化、スペクトル解析 | 時系列周波数構造の把握 |
| MFCC | 声質・話者の識別 | 音声認識・話者認識に標準的 |
| Chroma | 音階の識別、音楽系 | ピカチュウの鳴き声が調性的なら有効 |
| ZCR | 粗さの判定 | ノイズ検出、破裂音分析など |
| RMS | 音の強さ | 鳴き声の始まりやアクセント検出など |