私はオンラインで細かく読んでいますが、すべてをつなげることはできません。私はこれに関する十分な前提条件である信号/ DSPスタッフの背景知識を持っています。私は最終的にこのアルゴリズムをJavaでコーディングすることに興味がありますが、まだ完全には理解していません。だから私はここにいるのです(数学としてカウントされますよね?)。
これが私の知識のギャップと一緒にどのように機能するかを示しています。
.wavファイルなどの音声スピーチサンプルから始めて、配列に読み込むことができます。この配列呼び出す、Nの範囲0 、1 、... 、N - 1(したがって、N個のサンプル)。値は、私が推測するオーディオの強度-振幅に対応しています。
音声信号を10ミリ秒程度の明確な「フレーム」に分割し、音声信号が「静止」していると想定します。これは量子化の形式です。したがって、サンプルレートが44.1KHzの場合、10msは441サンプル、つまり値に等しくなります。
フーリエ変換(計算のためにFFT)を行います。これは、信号全体または各個別のフレームで実行されますか?一般にフーリエ変換は信号のすべての要素を見るので、違いがあると思うので、F(x [ n ] )≠ F(x 1 [ n ] )はFと結合(x 2 [ n ] )は… Fと結合(x N [ n ] )ここでxは小さいフレームです。とにかく、FFTを行って、残りの部分で X [ k ]になるとしましょう。
Melスケールへのマッピングとロギング。通常の周波数の数値をメルスケールに変換する方法を知っています。それぞれについて、のX [ K ]:(「x軸」あなたは私を許すだろう場合)、あなたはここで式を行うことができますhttp://en.wikipedia.org/wiki/Mel_scale。しかし、X [ k ]の「y値」または振幅はどうでしょうか。それらは同じ値のままですが、新しいメル(x-)軸上の適切なスポットにシフトしますか?私は、実際の値のロギングについての何かがあったいくつかの論文で見たXは、[ K ]その後、もしのでX [ K ] = A [ Kこれらの信号の1つが望ましくないノイズであると推定される場合、この方程式の対数演算は乗算ノイズを加算ノイズに変換します。
最後のステップは、変更された DCTを上から取得することです(ただし、最終的に変更されます)。次に、この最終結果の振幅を取得します。これがMFCCです。高周波値を捨てることについて何かを読みました。
だから私は本当にこれらの人たちを段階的に計算する方法を実際に解決しようとしています、そして明らかにいくつかのものが上から私を避けています。
また、「フィルターバンク」(基本的にバンドパスフィルターの配列)の使用について聞いたことがありますが、これが元の信号からフレームを作成するのか、それともFFTの後にフレームを作成するのかわかりませんか?
最後に、MFCCに13個の係数があることについて見たことがありますか?