Expression of MFCC, Mel Frequency Cepstral Coefficients


I wrote the expression of MFCC.

Here, I simply listed expressions calculated, without the detail explanation of Fourier transition or discrete cosine transform.

Framing (Window)

音声などのスペクトル分析では、音声区間全体での Fourier transform を行うのでなく、20-40 ms の区間で時間窓 (time window) を掛けて周波数分析を行います。 Fourier transform を行えば、周波数成分がわかるのですが、切り出した信号がその区間で波の形になることはまずありません。 Then, using window function, 両端をつなげ、 and analyze it as a periodic function. そして、 8-16 ms ごとにこの時間窓をシフトしながら繰り返し分析を行って、スペクトルの時間的な変化を見ます。 この信号処理の手法を short-time spectrum analysis といいます。

There are many kinds of time window functions, but the following ones are often used. 音声から連続する ( N ) 個 のデータ ( x ) を抜き出して分析を行います。

Hamming Window

( n = 0, cdots , N-1)

[ w(n) = 0.54 – 0.46 cos frac{ pi n }{N} ]

The maximum value is 1, and the minimum value is 0.08.

The minimum value is not 0, so 高周波成分が入り込みます。

Hanning Window

Hann さん が考案したものですが、 it is called “Hanning” opposite to Hamming.

[ w(n) = 0.5 – 0.5 cos frac{ pi n }{N} ]

The maximum value is 1, and the minimum value is 0. この関数を掛けることで、切り出した区間は周期関数として扱えます。

Discrete Fourier transform

To signal ( x(n) ), multiple window function ( w(n) ), and calculate DFT.

[ X(k) = sum ^{N-1}_{n=0} w(n) x(n) exp left( – frac{ -j2 pi k n}{N} right) ]

Mel Filter Bank

Denote sampling frequency as ( f_s ) . Of course, sampled frequency is less than ( f_s ). 今後の計算でも使いますので Define ( f(k) = frac{k}{N} f_s ).

フィルタバンクは、窓関数にある意味似ているのですが、特定の範囲の値のみを有効なものとして扱う関数を集めたものです。 メルフィルタバンクは Mel scale において等間隔に刻んだフィルタバンクになります。

ここではフィルタバンクの数を ( M ) 個 として進めます。 ( M ) is smaller enough than ( N ).

Conversion to Mel Scale

人間の感覚的な音の尺度を Mel scale と言い、メルスケール上の値の感覚が同じであれば、人間が感じる音の高低差も同じと考えられています。

Frequency ( f ) is converted to Mel scale value ( p ) as follows.

[ p = 2595 log _{10} left( frac{f}{700} + 1 right) ]

これを ( f ) について解くと、 メルスケールの値 ( p ) を周波数に逆変換する式が求められます。

[ f = 700 left( 10 ^{frac{p}{2595}} – 1 right) ]

Calculate Central Frequency

For each ( m = 1, cdots , M ), calculate the central frequency ( f_c (m) ).

分析対象の周波数帯を考えると、 the minimum value ( f_{mathrm{min}} ) and the maximum value ( f_{mathrm{max}} ) will be fixed. Denote the converted value of them to Mel scale as ( p_{mathrm{min}} ) , ( p_{mathrm{max}} ).

Define ( Delta p ) as follows.

[ Delta p = frac{ p_{mathrm{max}} – p_{mathrm{min}}}{M} ]

Define ( p_c ) as follows.

[ p_c (m) = m Delta p ]

Then, ( p_c (1) , cdots , p_c(M) ) はメルスケール上で等間隔の値となります。 これを周波数に変換したものが central frequency ( f_c ).

以上より定められた ( f_c ) を用いてメルフィルタバンクの式を表します。

[ H(k, m) = begin{cases} 0 & ( f(k) lt f_c (m-1) ) \ frac{f(k) – f_c (m-1)}{f_c (m) – f_c (f-1)} & ( f_c (m-1) leq f(k) lt f_c(m) ) \ frac{f_c (m+1) – f(k)}{f_c (m+1) – f_c (m)} & (f_c (m) leq f(k) lt f_c (m+1) ) \ 0 & (f_c (m+1) lt f(k) ) end{cases} ]

( k ) も ( m ) も変数だと考えると大変ですが、 ( k ) 番目の離散信号値について考えますので、 ( m ) を固定して考えるとわかりやすいと思います。 Suppose ( xy ) space with frequency ( x ) and ( y ) as value of ( H ). Then, in ( f_c ( m – 1 ) leq x lt f_c ( m + 1 ) ), it is triangle-shaped graph with the maximum value 1.

  • ( x = f_c ( m – 1 ) ) までは ( y = 0 )
  • When ( f_c ( m – 1 ) leq x lt f_c (m) ) , it is line from ( y = 0 ) to ( y = 1 ) .
  • When ( f_c ( m ) leq x lt f_c (m+1) ) , it is line from ( y = 1 ) to ( y = 0 ) .
  • For (x ) ( ( f_c (m + 1) lt x ) ) , ( y = 0 )

Calculate MFCC

まず ( X(n) ) を対数にします。

[ X'(m) = log left( sum ^{N-1}_{k=0} | X(k) | H(k, m) right) ]

これを離散コサイン変換(DCT)したものが MFCC。 The following value is (l)th MFCC. ( ( l = 1 , cdots , M )))

[ c(l) = sum ^{M} _{m=1} X'(m) cos frac{l}{M} left( m – frac{1}{2} right) pi ]