2の累乗ではないサイズのFFT


9

私の質問は、2の累乗ではない信号の入力サイズに関するものであり、そのfftを取得する必要があります。一部のソリューションでは、1800のfftを取得したい場合、2の累乗にするために2048の長さまでゼロパッドし、基数2のアルゴリズムを適用するとします。ただし、ゼロパディングなしで異なるアルゴリズムの組み合わせを適用し、必要なFFTを計算する他のソリューションもあります。私の質問は、サイズ1800のFFTを計算するために異なるアルゴリズムの組み合わせを使用する場合、1800のFFTをとる必要がある場合に、信号を2048の長さにゼロパディングすることは結果に違いを生じますか。違いがあるか、または結果は同じになります。


結果のFFTは異なりますの周波数でFFTを計算する代わりに、の周波数で計算します。ただし、情報の劣化はありません。2π/1800=017992π/2048=02047
Peter K.

それで、両方のアプローチが正しいということですか?しかし、実用性の点でどちらがより良いとお勧めですか?
DX

はい、どちらのアプローチも正しいです。「最小エネルギーソリューション」(つまり、最も単純で最も遅延したソリューション)を使用します。これは通常、2048長さ変換を使用します。
Peter K.

文献や本で、2のべき乗にするためにゼロパッドを推奨しています。
DX

2
データがにあると仮定しますx。フォームX = fft(x,123456);(または他の奇妙な長さ)。検索しますxx = ifft(X);。何であるか見てくださいsum(abs(x-xx(1:length(x))));
Peter K.

回答:


6

結果のFFTは異なります。周波数でFFTを計算する代わりに 2π/1800   ために =01799  、あなたはそれらを計算します 2π/2048   ために =02047  。ただし、情報の劣化はありません。

どちらのアプローチも正しいです。1800または2048を使用します。「最小エネルギーソリューション」(つまり、最も単純で最も遅延したソリューション)を使用します。これは通常、2048長さ変換を使用します。

人々は、何もよく知らないため、基数2の変換を使用する傾向があります。2のべき乗であるFFTについての多くの誤った情報があるようです。そのような制約はありません。また、FFTWやその他のライブラリで利用できるような、基数2でない適切なアルゴリズムについてはおそらく知らないでしょう。

任意の長さのFFTが情報を保持していることを確認するには:

長さが1800のデータがにあると仮定しますx。フォームX = fft(x,2048);(または1800とは異なる他の長さ)。
検索しますxx = ifft(X);
何であるか見てくださいsum(abs(x-xx(1:1800)));

この質問とその回答もご覧ください。


私がそれをするとき...それは私に数を与えますが、グラフによる比較はしません。私は申し訳ありませんが、私はCですべてを実装したので、私はMathWorks社のMATLABで非常によくないよ
DX

0

結果(およびソース)は目立たないため、FFTは実際にはフーリエ変換ではなく、実際にはフーリエ級数展開であることを理解する必要があります。つまり、FFTの結果は単一のデータブロックの変換ではなく、同じデータブロックの無限連結で構成される周期的な信号の変換であり、パディング長で構成される分離がある場合とない場合があります。 。(分析したデータが«m»のように見えるとすると、変換は«... mmmmm ...»または«... mmmmm ...»の展開になりますが、これらは同じ信号ではありません。)

結果として、パディングがないことは、1つのブロックの終わりと次のブロックの始まり(同じ)の結合の不連続から生じるソースデータの高周波グリッチを暗黙的に追加または削除することを意味します。極端な例は、すべて同じ値を含むブロックを分析することです。パディングなしのパディングは、連続信号と矩形信号の違いになります。

これのもう1つの結果は、パディングが長いほど、データの単一バーストの変換からの結果が近くなり、変換の解像度が高くなることです。通過しても、情報の劣化はないと言うのは完全に正確ではありません。(限られた方法で)丸めエラーが発生し、より長いバッファーを使用すると、(これも非常に限られた方法で)それを防ぐのに役立つ可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.