2017-11-19 12 views
0

以下は、私がメル三角フィルターバンクを作成しようとしているコードです。分析とMFCC用のFFT信号用フィルタ

私は300から8000 Hzの範囲から始め、周波数をmelsに変換してから、周波数に戻してfft_bin番号を取得します。

clear all; 

g=[300 8000]; % low freqncy and fs/2 for the highest frequency 

freq2mel=1125*log(1+(g/700)); % creating mel scale from the frequency 
           % answer [401.25 2834.99] 

f=linspace(0,2835,12); % if we want 10 filter banks that we use the 
         two endpoints and it will put 10 banks between them 

         % answer is [401.25 622.50 843.75 1065.0 1286.25 1507.50 1728.74 
            1949.99 2171.24 2392.49 2613.74 2834.99] 

mel2freq=700*(exp(f/1125)-1); % converting the mel back into frequency 

           %answer is [300 517.33 781.90 1103.97 1496.04 1973.32 2554.33 
              3261.62 4122.63 5170.76 6446.70 8000] 

fft_bins=floor((mel2freq/16000)*512); % creating fft bins 

           %answer is [9 16 25 35 47 63 81 104 132 165 206 256] 

私の問題はこれです。私はこれの後に立ち往生しています。私は以下のフィルターバンクが区分的関数を出てくるのを見ていますが、この関数にKが何であるのか分かりません。 kはハミングウィンドウの$$ \ mid(FFT)\ mid^2 $$の配列の配列ですか?私のMFCCを得るために、1の大きさの三角波出力を持つ実際のフィルターを$ \ mid(FFT)\ mid^2 $に渡す方法。誰かが私を助けてくれますか?あなたはこの種のフィルタリングを行う際に

enter image description here enter image description here

答えて

0

は通常は、1次元配列であなたのスペクトルを有し、その後、あなたは一つの次元があなたのスペクトルにFFTビンをマッチングして、2次元マトリックスでメルフィルタバンクを持っています配列、およびあなたのターゲットMelバンドとなる別の次元。あなたはそれらを掛けて1D Melスペクトルを得る。

H_m関数は実際には単なるm中心メルバンドとkが0からFS/IS 2の周波数であるm中心とする三角形を、記載されています。理論的には、kのパラメータは連続している必要があります。 kはFFTビンであると見なすことができますが、それはうまくいくでしょうが、Melバンド全体が1または2のFFTビンをカバーする低い周波数では素晴らしい結果は得られません。それよりも優れた解像度を得る必要がある場合は、特定のFFTビンに含まれる三角形の大きさを考慮します。

関連する問題