メル尺度とMFCC — 耳に合わせて音を測る
人間の耳は周波数を対数的に聞いています。その聴覚特性に合わせた物差しがメル尺度、それを使って「声の形」を少数の数値に圧縮したものがMFCC。音声認識を長年支えてきた定番特徴量を、変換の1段ずつを目で追いながら理解します。
1. 耳は対数で聞いている
ピアノで1オクターブ上がると周波数は2倍になります。220 Hz→440 Hz も 440 Hz→880 Hz も、耳には「同じだけ上がった」ように聞こえる。つまり耳は周波数の差ではなく比率に反応する、対数的なセンサーです(音の大きさも同様で、だから dB という対数の単位を使います)。
この「聞こえ方の距離」を数値化したのがメル尺度(mel scale)。1000 Hz = 1000 mel を基準に、聴取実験で「音の高さが2倍に感じる点」をつないで作られました。低い周波数では Hz とほぼ比例し、高くなるほど圧縮されます。
2. メルフィルタバンク — スペクトルを「耳の解像度」で束ねる
実装は単純で、mel 軸上に等間隔に並べた三角形の窓(=Hz 軸で見ると高域ほど幅広になる)をパワースペクトルに掛け、各三角形の中のエネルギーを合計します。三角形1個につき数値1個。数百点のスペクトルが 20〜40 個の数値に要約されます。
3. MFCC パイプライン — 5段変換を1歩ずつ
MFCC(メル周波数ケプストラム係数)は、フィルタバンク出力にさらに log と DCT を掛けて作ります。下のデモで1段ずつ進めてください。数百サンプルの波形が最終的にたった13個の係数になります。
4. なぜ log と DCT で「声の形」が取り出せるのか
音声のスペクトルは「細かい櫛(声帯の振動=ピッチによる倍音)」×「ゆるやかな山なみ(声道の形=母音を決める包絡)」の掛け算です。log を取ると掛け算が足し算に分解されます。
足し算になれば、あとは周波数分解と同じ発想で分離できます。log スペクトルを「波形」とみなして DCT を掛けると、ゆるやかな成分(声道)は低次の係数に、細かい成分(ピッチ)は高次の係数に分かれる。だから低次の12〜13個だけ残せば、「誰が・どの高さで」を捨てて「何と言ったか」に効く声道情報だけが手に入ります。
5. まとめ
- メル尺度: 耳の対数的な周波数知覚に合わせた物差し。mel 軸上の等間隔=聞こえの等間隔。
- メルフィルタバンク: mel 等間隔の三角フィルタでスペクトルを 20〜40 次元に要約。
- log: 「倍音の櫛 × 声道の包絡」の積を和にほどき、耳の音圧知覚にも合わせる。
- DCT: 包絡(低次)とピッチ(高次)を分離し、低次 13 個だけ残す = MFCC。