Skip to content

メル・MFCC・音色

問いの中には、どの音かではなくどんな音か — 明るいか暗いか、滑らかかノイジーか、フルートか歪んだギターか — を問うものがあります。それが音色(ティンバー)で、ここで扱う特徴量がそれを記述します。これらは スペクトログラムと STFT のスペクトログラムを土台にします。

音色: 音の「色」

音色(ティンバー)は、同じ音・同じ音量でもピアノとギターが違って聞こえる理由です。音の倍音の相対的な強さと、それらが時間とともにどう変化するかから生まれます。ピッチは音を、音色は声色を教えます。

メル尺度: 人の聞こえ方に沿った周波数

人は周波数を線形には聞きません。100 Hz から 200 Hz への跳びは大きく感じますが、5000 Hz から 5100 Hz はほとんど感じません。

メル尺度は、この聞こえ方に合わせた知覚的な周波数尺度です。低域は細かく、高域は粗くなります。

メルスペクトログラムは STFT をその尺度へ写し直します。耳が実際に聞き分ける帯域へ詳細を集中させるため、多くの音声機械学習で既定の前処理として使われます。

言い換えると、メルスペクトログラムは「機械が扱いやすい、人間の耳寄りの音の地図」です。通常のスペクトログラムは周波数を均等な間隔で並べますが、メルでは耳が細かく聞き分ける低域を細かく、差を感じにくい高域をまとめて扱います。

片方の尺度では等間隔、もう片方では不等間隔
010002000300040005000600070008000周波数(Hz、線形)狭く、密広く、疎同じ中心周波数をメル尺度で見る14 本のフィルターを描画
  • 三角形のメルフィルター
  • 等間隔
フィルターはメル尺度の上で等間隔に並べてあります。それを Hz に戻して見ると、同じ配置が低域では狭く密に、高域では広く疎になります。耳が細かく聞き分ける低域に多くのフィルターが割かれ、高域には少ししか割かれないのはこのためです。
MEL · SPECTRALIDLE
メルスペクトログラム — 人の聞こえ方の周波数

同じ STFT をメル尺度へ写し直したものです。耳が聞き分ける低域は細かく、高域は粗くなります。この母音的なトーンの倍音列とフォルマントの帯は、リニア軸より近くに並びます — 耳(そして多くの機械学習の前処理)が実際に使う見え方です。

MFCC: コンパクトな音色の指紋

MFCC(メル周波数ケプストラム係数)は、メルスペクトログラムを、相関を除いた少数の数値へ圧縮し、スペクトル包絡 — 細かいピッチの詳細を無視した、スペクトルの全体形状 — を捉えます。メルエネルギーの対数をとり、DCT(離散コサイン変換。情報を最初の数係数へ集める余弦基底の変換)を適用して計算します。結果は音色の小さく安定した「指紋」で、楽器・声・音種の分類に広く使われます。

MFCC は、音そのものを再生するためのデータではなく、分類や比較のための要約です。たとえば「これは声に近いか、打楽器に近いか」「前半と後半で音色が変わったか」を見るには便利ですが、「どの音名が鳴っているか」を知りたいならクロマやピッチ検出を使います。

MFCC · TIMBREIDLE
MFCC マップ — コンパクトな音色の指紋

MFCC はメルスペクトログラムを少数の係数へ圧縮し、ピッチの詳細を捨ててスペクトル包絡を捉えます。各行が時間に対する1係数(0次のエネルギー項は除外)で、音色が安定していれば行も安定します。これが楽器や声の分類器が実際に比較する指紋です。

1 つの数値で明るさ: 重心と平坦度

スペクトル形状をフレームごとに要約する 2 つのスカラーがあります。

特徴量測るもの高い値の意味
スペクトル重心スペクトルの「重心」(Hz)より明るく、高域エネルギーが多い
スペクトル平坦度ノイズ的か調性的か(0〜1)明確なピッチ(0)よりノイズ(1)に近い

これらは安価な明るさ/ノイズ性の代理指標で、UI メーター、しきい値、MFCC ベクトル全体までは要らない簡易記述子に便利です。

無音の平坦度は 0 ではなく 1.0 になります

平坦度はパワースペクトルの幾何平均を算術平均で割った値で、平均を取る前に各ビンを amin(1e-10)で下限クリップします。そのため完全な無音フレームはすべてのビンが同じ下限値になり、比は 1.0、つまり直感とは逆に「最もノイズ的」を意味する値として返ります。libsonare はこの点を librosa.feature.spectral_flatness に合わせており、無音を特別扱いしません。

先にレベルでゲートしてください。フレームの RMS やピークを確認し、ノイズフロアを下回る区間では平坦度の値を無視します。平坦度をそのまま UI メーターやノイズゲートに繋ぐと、静かな箇所で反応してしまいます。

libsonare がこれらをどう計算するか

MelSpectrogram はメルフィルターバンクを STFT パワーに適用してメルスペクトログラムを作り、対数圧縮と DCT 相当の処理で MFCC を導きます。

項目内容
メル設定n_mels = 128fminfmax(0 は sr/2)
解析窓n_fft = 2048hop_length = 512、Hann 窓
メル尺度式htk = false で Slaney 式、true で HTK 式(尺度の式そのものの選択)
正規化norm = MelNorm::Slaney(フィルターの面積正規化)。尺度式とは独立で、HTK 式と Slaney 正規化の組み合わせも指定できます
リフタリングmfcc 末尾の lifter(ケプストラルリフタリング、既定 0 = リフタリングなし)は librosa の lifter に対応
追加指標スペクトル重心と平坦度はフレームごとの振幅スペクトルから直接計算

これらはリファレンス比較に足る程度に librosa の規約に従っています。スペクトル指標は TimbreAnalyzer などの上位記述子に再利用されます。メルと MFCC はプレビュー用に近似音声へ逆変換することもできます(逆変換特徴量を参照)。

関連: MIR の全体像スペクトログラムと STFTセクションと構成クロマ特徴量