37

フーリエ変換を行うコードを使用しています (オーディオ サンプルのケプストラムを計算するため)。フーリエ変換を計算する前に、ハミング ウィンドウをサンプルに適用します。

for(int i = 0; i < SEGMENTATION_LENGTH;i++){
    timeDomain[i] = (float) (( 0.53836 - ( 0.46164 * Math.cos( TWOPI * (double)i  / (double)( SEGMENTATION_LENGTH - 1 ) ) ) ) * frameBuffer[i]);
}

なぜこれを行うのですか?コードまたはオンラインでこれを行う理由が見つかりません。

4

4 に答える 4

42

有限フーリエ変換を行うときはいつでも、それを無限に繰り返す信号に暗黙的に適用しています。したがって、たとえば、有限サンプルの開始と終了が一致しない場合、それは信号の不連続のように見え、フーリエ変換で多くの高周波ナンセンスとして表示されますが、これはありません。本当に欲しい。サンプルがたまたま美しい正弦波であるが、整数の周期がたまたま有限サンプルに正確に収まらない場合、FT は実際の周波数に近いあらゆる場所でかなりのエネルギーを示します。あなたはそれを望んでいません。

データをウィンドウ化することで、すべてを適度に滑らかに保ちながら、端が一致するようにします。これにより、前の段落で説明した「スペクトル漏れ」の種類が大幅に減少します。

于 2011-03-24T12:33:13.177 に答える
11

私が音について知っていることと迅速な調査によると、ハミング ウィンドウは信号のサイド ローブ (不要な放射) を最小限に抑えるためにここにあるようです。したがって、音の質または高調波を改善します。また、このタイプのウィンドウ関数が DTFT に適していることも理解しています。

数学の準備ができている場合は、スタンフォード研究者のページまたはウィキペディア、およびハリスの論文で、優れた技術的説明を見つけることができます:D.

于 2011-03-24T12:36:59.777 に答える
9

正弦波の有限長セグメントの FT は、正弦波の周波数ピークに対してウィンドウのフーリエ変換を畳み込みます。FFT の特性は、一方のドメインでのベクトル乗算が他方のドメインでの畳み込みであるためです。矩形ウィンドウの FT (FFT で修正されていない有限長のサンプルが意味するもの) は、周波数スペクトル全体にわたってウィンドウ内で正確に周期的ではない信号を飛散させる乱雑に見える Sinc 関数です。

ハミング形状のウィンドウの FT は、この「飛び散り」を (Sinc 関数よりも) 畳み込み後の周波数ピークの近くに集中させます。その結果、周波数ピークは太く滑らかになりますが、周波数ピークから離れた周波数での飛び散りははるかに少なくなります。これにより、スペクトルがきれいに見えるだけでなく、目的の信号に対する遠く離れた周波数からの干渉も少なくなります。

この解釈 (「無限に繰り返す」解釈とは対照的に) は、ハミングとは異なる形状のウィンドウがより少ない「漏れ」でより良い結果をもたらす理由をより明確にします。特に、ハミング ウィンドウは、関心のある周波数から離れた実際のより多くの「漏れ」(または畳み込みスプラッタ) と引き換えに、周波数ピークのすぐ隣にある「漏れ」の最初の Sinc サイド ローブのサイズを縮小します。別のトレードオフが必要な場合は、他のウィンドウの方が適している場合があります。上記の別の回答にリンクされているHarrisの論文(pdfはこちら)は、これらの異なるウィンドウのいくつかの例を示しています。

于 2011-03-24T14:10:16.927 に答える