FFTがスペクトルを変更するのではなく、逆FFTよりも時間領域でウィンドウを使用する理由


16

DSPは、信号の一部のFFTを使用して行われ、FFTから生じるサンプルを修正し(信号とノイズのスペクトルを表すため)、不要な信号を削除し、逆FFTを実行して時間を取得すると考えましたフィルターされた信号のドメイン表現(ノイズは除去されました)。ただし、これは行われず、代わりにウィンドウ関数を使用して時間領域ですべての作業を行います。どうして?

窓関数の周波数応答を周波数領域の信号のスペクトルと畳み込むよりも、時間領域で窓関数を掛ける場合、どうなりますか?つまり、信号にフィルターの周波数応答を乗算することによって、周波数領域ですべての作業を行った場合、それは正しいフィルター処理のようになりますか?しかし、ここでは、ウィンドウを使用する代わりに、時間領域ですべての処理を行います。

->私の混乱がどこから来たのかを見てみましょう。ローパスフィルターなどのアナログフィルターの場合、周波数応答のようなこのパルスがあります。信号をフィルター処理するとき、フィルターの周波数応答のようなパルスで信号のスペクトルを効果的に乗算します。これにより、カットオフより上の信号のすべての周波数が0に減少します。これが、ローパスフィルターの本質的な動作です。デジタルフィルターでも同じことをしてみませんか?


回答:


7

ウィンドウ処理により、スペクトル漏れが減少します。

最初に始めたとします。周期は明らかにです。 y=cosω0t2π/ω0

しかし、周期がと誰も言わず、盲目的に範囲を選択し、この切り捨てられた波形のFFTを取得すると、他のすべての周波数の周波数成分が観測されます周期性のために切り捨てられた波形をコピーして貼り付けることによって作成されたジャンプは、元の信号には実際に存在しないためです。これは、周期間の遷移をスムーズにキャプチャしない不運な切り捨てのアーティファクトです。理想的には、スペクトル成分は1つだけ。 [ 0 1.8 π / ω 0 ] ω = ω 02π/ω[01.8π/ω0]ω=ω0

時間領域でウィンドウ化する目的は、これらすべての架空のスペクトル成分を減らすことです。


12

DFT計算は、入力信号の無限の周期的拡張で動作するため、ウィンドウが使用されます。多くの実際の信号はまったく周期的ではないか、実際の周期とは異なる間隔でサンプリングされるため、漏れと呼ばれる繰り返し間隔の間の人工的な「エッジ」で誤った周波数成分を生成する可能性があります。最初に両端でゼロになるウィンドウ関数を時間領域信号に乗算することにより、無限の周期的な拡張で繰り返される間隔の間に滑らかな遷移を作成し、DFTを取得するときにこれらの人工周波数成分の作成を軽減します。

このホワイトペーパーでは、この現象の詳細と、さまざまなウィンドウ関数の影響についての洞察を提供します。


11

2つの異なる操作を混同していると思います。

時間領域でのウィンドウ処理は@samで説明されているため、繰り返しません。ただし、フィルタリングを実行するためのウィンドウ処理は行われません。信号のFFTにフィルター周波数応答を掛けることによるフィルター処理は、多くの状況で完全に合理的であり、実際に行われています。フィルタリングの代替手段は、時間領域畳み込みです(ウィンドウイングとは異なります)。これには、すべてのデータが保存されるのを待たずに測定されてから変換されるため、「リアルタイム」で信号を操作するなど、独自の利点があります。

それで、「デジタルフィルターでも同じことをしないのはなぜですか」という質問に対する答えは、「必要に応じて行うのです」というだけです。


私はまた、畳み込みとウィンドウイングが問題で混同されたという印象を持っています。よろしくお願いします!
DEVE

11

この質問に対するいくつかの良い答えがありました。しかし、重要な点が完全に明らかにされていないように感じます。質問の一部は、なぜ信号のFFTに必要なフィルター応答を乗算しないのかということでした。たとえば、信号をローパスフィルター処理する場合は、目的のカットオフ周波数よりも高いすべての周波数成分をゼロにすることができます。これは実際、FIRフィルターを設計するためのよく知られた周波数サンプリング法の単純なアプリケーションです。問題は、FFTによって計算された離散周波数成分をゼロにできることです。これらの離散周波数間で何が起こるかを制御することはできません。このような単純なバージョンのフィルタリングでは、(FFTの長さに関係なく)阻止帯域の減衰が低下するだけです。matlabまたはoctaveにアクセスできる場合は、 '

x=2*rand(1024,1)-1;
X=fft(x);
Y=X.*[ones(200,1);zeros(625,1);ones(199,1)]; % lowpass filter
y=real(ifft(Y)); % real() just to remove numerical errors
Y=fft(y,4096);
plot(20*log10(abs(Y(1:2048)))),axis([0,2048,-30,50])

6

非矩形ウィンドウを使用しない場合、FFTの結果は、周波数ドメインフィルタリングを実行する前にデフォルトの矩形ウィンドウ(周期的なSinc)の変換で既に畳み込まれています。たとえば、2つのフィルターが適用されますが、そのうちの1つはおそらく不要です。

FFTおよび周波数ドメインフィルタリングの前に時間領域でウィンドウ処理することにより、矩形ウィンドウ処理によって行われるフィルタリング(いわゆる「漏れ」)を置き換えるので、追加の不要なフィルタ畳み込みが発生しません。

これを行う別の方法は、連続するウィンドウでオーバーラップ加算またはオーバーラップ保存メソッドを使用することです。この方法では、1つの長方形ウィンドウの効果が、隣接するウィンドウからの同様の効果によってキャンセルされます。


5

時間領域のウィンドウ

  • ウィンドウの端でゼロを保証できます
  • ウィンドウ関数には、空間領域での優れた分析式があります
  • 多くのウィンドウ関数は、近似するのが難しい奇妙な形のスペクトルを持っています
  • 必要なサンプル数は限られています(ウィンドウは信号ストリームとして実行できます)

例:ウィキペディアから

ここに画像の説明を入力してください

ウィンドウ関数のゼロへのハードカットオフは、スペクトル領域で、非常にゆっくりとゼロになるサイドローブがあることを意味します。この制約を取り除くと、ガウスフィルターのように、空間領域とスペクトル領域の両方でコンパクトな関数を使用できます。これは、スペクトル領域を介してフィルタリングできますが、信号全体を把握する必要があることを意味します。

信号全体を既に持っている場合、別の選択肢はウェーブレットを使用することです


2

同じ質問がありました。

畳み込みは、時間領域信号の積分/累積和にウィンドウを掛けたものです。これを「ウィンドウ化された」時間領域信号と混同しないでください。

この記事の終わりは私を大いに助けてくれました。

基本的に、実際の信号は有限であり、実際の信号を突然カットオフすると、周波数領域に多くの不要な周波数/アーチファクトが生じると言われています。

これらのアーティファクトを回避/最小化するために、サンプルがゼロ以外のスカラー値で突然終了するのではなく、ゼロで開始および終了するように、滑らかな(ベル形など)ウィンドウ関数を使用できます。

スムーズなカットオフ

上記のウィンドウ化されたサンプルは、以下の生のサンプルよりも周波数領域でのアーチファクトが少なくなります。

突然の切断


1

FFTには2つのカテゴリがあり、1)FIRフィルタを実装する効率的な方法、2)スペクトル分析です。

FIRフィルタリングの場合、ウィンドウがフィルターに対応していない限り、ウィンドウについて心配せず、ウィンドウを使用しませんが、それは一般的なことではありません。漏れは気になりません。

スペクトル分析は、ウィンドウを使用する場所です。ここで、大きな産業用機械に取り付けられたセンサーを見て、腸の奥深くでベアリングが機能していないかどうかを調べます。ベアリングは故障すると鳴きますが、通常は機械が発する他の音よりもノイズがはるかに低くなります。これは、漏れと平均化が発生する場所です。強いトーンが与えられると、漏れは、いくつかのビンを探している弱い信号を一掃します。強い信号が存在する場合、弱い信号に対するスペクトル分析の感度が向上します。バックグラウンドノイズが傾斜している場合にも、同様の効果があります。私たちが求める情報は周波数領域にあります。これは、レーダー、ソナー、地球物理学でも同じ問題です。弱い信号を見ることが目標です。


1

時間領域でのウィンドウ処理は、周波数ビンに正確にない単一の周波数がスペクトル全体に広がるのを避けるために必要です。たぶんこのページは役立ちます:http : //www.sm5bsz.com/slfft/slfft.htm Linrad(私の20歳のプロジェクト)は、ウィンドウFFTを使用してから、周波数領域にフィルターを適用します(不要なものをゼロにします)。ウィンドウを適用します。次に、逆方向FFTを適用します-しかし、今でははるかに少数のポイントに適用しています。ゼロであることがわかっているすべての周波数ビンを含める必要はありません!! 結果として、はるかに小さいサイズの時間関数を取得します。つまり、サンプリングレートがはるかに低くなります。この手順では、フィルタリングとデシメーションを1つのステップで実行します。これは、複数のチャンネルを同時に除外したい場合に非常に効率的です。linradホームページはこちら:http ://www.sm5bsz.com/linuxdsp/linrad.htm

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