メル尺度とMFCC — 耳に合わせて音を測る

人間の耳は周波数を対数的に聞いています。その聴覚特性に合わせた物差しがメル尺度、それを使って「声の形」を少数の数値に圧縮したものがMFCC。音声認識を長年支えてきた定番特徴量を、変換の1段ずつを目で追いながら理解します。

1. 耳は対数で聞いている

ピアノで1オクターブ上がると周波数は2倍になります。220 Hz→440 Hz も 440 Hz→880 Hz も、耳には「同じだけ上がった」ように聞こえる。つまり耳は周波数の差ではなく比率に反応する、対数的なセンサーです(音の大きさも同様で、だから dB という対数の単位を使います)。

この「聞こえ方の距離」を数値化したのがメル尺度(mel scale)。1000 Hz = 1000 mel を基準に、聴取実験で「音の高さが2倍に感じる点」をつないで作られました。低い周波数では Hz とほぼ比例し、高くなるほど圧縮されます。

メル尺度カーブ — Hz の物差しと mel の物差し
スライダーで曲線上の点を動かすと、下の Hz 軸と左の mel 軸に投影されます。オレンジ=1000→2000 Hz、緑=2000→4000 Hz のオクターブ。Hz 軸では幅が2倍違うのに、mel 軸ではほぼ同じ幅に潰れている — これが「耳にはどちらも同じくらいの上がり幅に聞こえる」の図解です。
mel(f) = 2595 log10(1 + f / 700) 1000 Hz ≈ 1000 mel。低域ではほぼ線形、高域では対数的に圧縮される
POINT — なぜ「耳の物差し」を使うのか 音声認識にとって重要な情報(母音の違いなど)は低〜中域に密集し、高域は大ざっぱで良い。周波数軸を mel に張り替えると、耳が重視する帯域ほど細かく、どうでもいい帯域ほど粗くリソースを配分でき、少ない次元で音声の本質を捉えられる。

2. メルフィルタバンク — スペクトルを「耳の解像度」で束ねる

実装は単純で、mel 軸上に等間隔に並べた三角形の窓(=Hz 軸で見ると高域ほど幅広になる)をパワースペクトルに掛け、各三角形の中のエネルギーを合計します。三角形1個につき数値1個。数百点のスペクトルが 20〜40 個の数値に要約されます。

メルフィルタバンク — 三角フィルタがスペクトルを束ねる
上段: 合成音声風のスペクトル(水色)に三角フィルタ群が重なる。低域は細く密、高域は太く疎 — mel 軸で等間隔だから。下段: 各フィルタの出力エネルギー。順番に光っているのが「いま計算中のフィルタ」。本数を増やすと解像度が上がる代わりに次元も増えます。

3. MFCC パイプライン — 5段変換を1歩ずつ

MFCC(メル周波数ケプストラム係数)は、フィルタバンク出力にさらに log と DCT を掛けて作ります。下のデモで1段ずつ進めてください。数百サンプルの波形が最終的にたった13個の係数になります。

MFCC ができるまで — ステップ実行
波形 → (1) パワースペクトル → (2) メルフィルタバンク → (3) log → (4) DCT → MFCC 係数。log で桁違いだったエネルギーが揃い、DCT で「ゆっくりした起伏=声道の形」が先頭の係数に集まる様子に注目。
MFCC = DCT( log( MelFilterBank( |DFT(x·w)|2 ) ) ) w は窓関数。実際にはフレーム(20〜40 ms)ごとにこれを繰り返し、係数の時系列を得る

4. なぜ log と DCT で「声の形」が取り出せるのか

音声のスペクトルは「細かい櫛(声帯の振動=ピッチによる倍音)」×「ゆるやかな山なみ(声道の形=母音を決める包絡)」の掛け算です。log を取ると掛け算が足し算に分解されます。

足し算になれば、あとは周波数分解と同じ発想で分離できます。log スペクトルを「波形」とみなして DCT を掛けると、ゆるやかな成分(声道)は低次の係数に、細かい成分(ピッチ)は高次の係数に分かれる。だから低次の12〜13個だけ残せば、「誰が・どの高さで」を捨てて「何と言ったか」に効く声道情報だけが手に入ります。

注意 — log を忘れると分離できない 掛け算のままでは DCT で切り分けられない。log による「積→和」の変換こそがこのパイプラインの心臓部で、ケプストラム分析(次レッスンのピッチ検出でも登場)と同じアイデア。また log は耳の音圧知覚(dB)とも整合する。
一歩先へ — 深層学習時代の MFCC DCT には係数同士の相関を消す効果があり、対角共分散の GMM-HMM 時代には必須だった。しかし CNN/Transformer は相関した入力も自力で扱えるため、現在の音声認識・音声合成では DCT 前の log メルスペクトログラムをそのまま入力するのが主流(Whisper は 80ch の log-mel)。MFCC は今も軽量な話者認識・音響イベント検出などで現役。

5. まとめ