フーリエ変換を行う前に、なぜ信号をゼロパッドする必要があるのですか?


77

前の質問への回答では、1

入力信号をゼロで埋めます(波の少なくとも半分が「空白」になるように最後にゼロを追加します)

この理由は何ですか?


それはあなたが何をしているかに依存します。これは私の答えに対するコメントかもしれません。説明を追加しました。
エンドリス

@endolith:最初はコメントとして考えていましたが、質問は一般的な関心事であり、それに対する良い答えがどこかにコメントに埋もれていたら残念だと思います。同意できない場合は、この質問を削除します。
ジョナス

9
それは非常に一般的な質問です。あなたはなどなど、あなたが周波数分解能を変更するには、信号を再サンプリングするためにそれを行うことができ、非円形の変換のように振る舞う変換円形にするためにパッドをゼロにすることができ、何かパワーの-2を作るためにパッドをゼロにすることができます
endolith

回答:


82

ゼロパディングにより、長いFFTを使用できるようになり、長いFFT結果ベクトルが生成されます。

FFTの結果が長いほど、周波数の間隔が狭くなる周波数ビンが多くなります。ただし、元のデータのゼロ以外の短いFFTの高品質のSinc補間と本質的に同じ結果が得られます。

これにより、さらに補間せずにプロットすると、スペクトルがより滑らかに見える場合があります。

この補間は、隣接するまたは近くの周波数の解決または解像度の改善には役立ちませんが、スペクトル内に重要な隣接信号またはノイズがない単一の分離された周波数のピークを視覚的に簡単に解決できる可能性があります。統計的には、FFT結果ビンの密度が高いほど、ピーク振幅ビンがランダムな隔離された入力周波数正弦波の周波数に近くなり、さらに補間する必要がなくなる可能性が高くなります(放物線など)。

しかし、本質的に、DFT / FFTの前のゼロパディングは、多数のポイントを補間する計算的に効率的な方法です。

相互相関、自己相関、または畳み込みフィルタリングのゼロパディングは、畳み込みの結果を混合しないために使用されます(循環畳み込みのため)。線形畳み込みの完全な結果は、2つの入力ベクトルのいずれよりも長くなります。このより長い畳み込み結果の終わりを置く場所を提供しない場合、FFT高速畳み込みはそれを単に混ぜ合わせて、希望する結果を作り上げます。ゼロパディングは、より長い結果を混合するためのバンチゼロを提供します。また、ゼロのベクトルとのみ混合/合計されたものを混合解除する方がはるかに簡単です。


12
最後の段落は元の質問に対する重要な答えですが、もっと明確に述べることができると思います。相関または畳み込みのコンテキストでゼロパディングを行うと、周波数領域でプロセスを実装することで、循環畳み込み/相関ではなく線形が得られます。ただし、オーバーラップ保存アルゴリズムやオーバーラップ追加アルゴリズムのように、サイドでブックキーピング作業を行う場合は、そうする必要はありません。
ジェイソンR

4
@Jason R:実際には、どちらも循環たたみ込みです。通常の(枝刈りされていない)FFTは、すべての乗算を行い、結果の一部をラップアラウンドします。十分にゼロが埋め込まれた場合、それらの乗算と加算はすべて値ゼロであるため、計算されて円の周りにラップされる何も気にしません。
hotpaw2

9
確かに; 2つの信号のDFTの乗算は、常に巡回畳み込みを実装します。別の言い方をする必要があります:循環畳み込みによって得られる結果が線形畳み込みの場合に得られる結果と同じになるように、1つの信号の最後にゼロを詰めます(線形畳み込みが必要なものと仮定します通常はそうです)。
ジェイソンR

27

時間領域信号のゼロパッドを決定する前に、考慮すべきことがいくつかあります。信号をゼロパッドする必要はまったくありません!

1)時間領域データ(ゼロパディングではない)を長くして、周波数領域でより良い解像度を取得します。

2)FFTビンのより良い定義を確認したい場合、時間領域の信号長(ゼロパディング)を超えてFFTポイントの数を増やしますが、それ以上の真の解像度は得られません。また、2の累乗数のFFTポイントになるようにパディングすることもできます。

3)FFTポイント(前のポイント)をいじるときは、周波数ポイントが目的の場所になることを確認してください。ポイントの間隔は。ここで、はサンプリング周波数で、はFFTポイントの数です。fs/NfsN

http://www.bitweenie.com/listings/fft-zero-padding/にこれらのポイントを示す素晴らしい数字があります

最後に、時間領域で信号をゼロパッドし、ウィンドウ関数を使用する場合は、ゼロパッドする前に信号をウィンドウ処理してください。ゼロパディングの後にウィンドウ関数を適用すると、ウィンドウが達成するはずのことを達成できません。具体的には、スムーズにゼロに移行する代わりに、信号からゼロに急激に移行します。


8

一般に、DFTの前のゼロパディングは、変換されたドメインでの補間、またはより頻繁なサンプリングと同等です。

以下に、逆の仕組みを簡単に視覚化します。帯域制限された信号をより高いレートで時間内にサンプリングすると、より「押しつぶされた」スペクトル、つまり両端にゼロが多いスペクトルが得られます。言い換えると、DFTを行った後に周波数をゼロでパディングし、ゼロでパディングした結果をIDFTするだけで、より多くのサンプルを時間内に取得できます。

ゼロパディングが時間内に発生すると、同じ効果が逆に保持されます。これは、信号が帯域制限され、少なくともナイキストレートでサンプリングされる限り、完全な信号再構成が可能なためです。

「解像度」という用語は、定義方法によって異なります。私にとって、それは、時間または周波数における隣接する2つの観測点を、確実に(統計的に)識別できることを意味します。この場合、分解能は実際にはスペクトル漏れによるDFTサイズに依存します。つまり、ウィンドウサイズが小さくなり、変換された信号がよりぼやけたり不鮮明になったりします。サンプリングの頻度や、「定義」と呼ぶものとは異なります。たとえば、非常にぼやけた画像を高レート(高解像度)でサンプリングすることはできますが、低レートでサンプリングするよりも多くの情報を取得することはできません。したがって、要約すると、以前より多くの情報を取得しないため、ゼロパディングでは解像度はまったく向上しません。


6

時間領域サンプルの分離に使用されるウィンドウ関数のスペクトルに関心がある場合、ゼロパディングはウィンドウ関数の周波数分解能を向上させます。

時間信号がで、が窓関数の場合、全体のスペクトルはで、畳み込みを示します。 x(t)w(t)w(t)X(f)W(f)

あなたの窓関数は、単純な長方形の値のいくつかの組の(抽出である場合しシンク関数である。したがって、例えば、NFFTはあなたの矩形の幅と同じであり、そしてビン周波数の1つに正弦波があり、そのビンの中心に表示される同期関数のサンプルは、オフピークのゼロ交差で正確に落ち、同期の形状が表示されません。全くのスペクトル。あなたは今、ゼロパッドデータが入る場合にはFFTx(t)X(f)、ピークとゼロ交差以外の場所でいくつかのサンプルが表示され、結果のスペクトルの同期関数の形状が明らかになります。それでは、ゼロパディングの用途は何ですか?通常、ウィンドウ化された信号の離散変換の性質を明らかにする際に、それは教育的に使用されます。これは通常のケースです。実用的な意味では、搬送波に乗っている孤立したエンベロープのスペクトル形状に関心がある場合は、どのような場合にも役立ちます。


4

フーリエ変換の前後に実行されるプロセスに応じて、これにはさまざまな理由があります。最も一般的な理由は、変換結果の周波数分解能を高めることです。つまり、変換で使用されるサンプルの数が多いほど、結果のパワースペクトルのビン幅が狭くなります。要確認:binwidth = sample_frequency / transform_size(多くの場合、ウィンドウサイズと呼ばれます)。これから想像できるように、変換サイズを大きくすると、binwidthが減少します(=より良い周波数解像度)。ゼロパディングは、信号に新しい情報を導入せずに変換サイズを増やす方法です。

それでは、ゼロパディングなしでより大きな変換を行うだけではどうでしょうか。それは同じ効果を達成しませんか?良い質問。多くの場合、短時間フーリエ変換(stft)を使用している可能性のある時間領域データのストリームを分析する必要があります。これには、周波数スペクトルの変化を特徴付けるために必要な時間分解能に従って、Nサンプルごとに変換を行うことが含まれます。ここに問題があります。ウィンドウが大きすぎると時間分解能が失われ、ウィンドウが小さすぎると周波数分解能が失われます。その場合の解決策は、小さな時間領域ウィンドウを使用して、良好な時間分解能を提供し、ゼロパディングして周波数分解能を改善することです。これがあなたに役立つことを願っています

アップデート
私はこれをうまく説明しませんでした。もっと明確にすべきだった。ウィンドウ化された変換を参照すると、実際には「実際の」より高い周波数分解能は得られませんが、視覚化の目的(パワースペクトルを目で読む)ではより明確な結果を得ることができます。クリティカルサンプリングレートを使用すると、各サイドローブは単一のビンを占有します。これは、グラフ化手法によっては誤解を招く可能性があります。ゼロパディングは、より明確な補間周波数スペクトルを提供します。さらに、周波数推定に単純なピーク選択方法を使用している場合、ゼロパディングのスペクトル補間効果により、メインローブの真のピークにより近いスペクトルサンプルが得られます。このリンクはいくつかの有用な図を提供します:http : //www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html


9
この答えは正しくありません。ゼロパディングでは、周波数分解能はまったく向上しません。小さい変換の出力間を補間するだけです。ゼロパディングは、より小さな変換の場合と同じ帯域幅を持つ周波数ビンを追加することと考えることができます。したがって、フィルターバンクの観点から見ると、通過帯域は重なります。
ジェイソンR

1
理解に役立つ場合:逆のこともできます。信号のFFTを取得し、結果にゼロを追加して、逆FFTを実行します。これには、元の信号を補間する効果があります。ただし、当然のことながら、信号は同じナイキスト帯域幅の同じ信号のままです。補間では、元々あったよりも高い周波数情報は得られません。
エンドリス

1
@ジェイソンR-あなたは正しいです、私の答えは誤解を招くものでした、私は元の投稿で上記を明確にしようとしました。ゼロパディングが周波数分解能を高めるとは言わなかったはずです。
ダンバリー

2

これらは以前の良い応答で言及されていなかったので、ゼロパディングの以下の追加の重要な理由を追加します。

Radix-2アルゴリズムはより効率的であるため、次の2のべき乗(またはradix-4の場合は4のべき乗)のゼロパディング、または大きな素因数の大幅な回避により、リアルタイムパフォーマンスが向上します。また、分析にFFTを使用する場合、FIRの周波数応答を決定するなど、DTFTのサンプルを計算するためにゼロパディングが行われることがよくあります。比較fft([1 1 1 1])とfft([1 1 1 1]、 512)これはfreqz([1 1 1 1])と同じです。

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