DSPは次の部分のFFTを使用して行われると思いました信号、FFTから生じるサンプルを変更し(信号+ノイズのスペクトルを表すため)、不要な信号を削除し、逆FFTを実行して、フィルター処理された信号の時間領域表現を取得します(ノイズは削除されました)。 。ただし、これは実行されません。代わりに、ウィンドウ関数を使用して時間領域ですべての作業を実行します。なぜですか?
ウィンドウ関数の周波数応答を周波数領域の信号のスペクトルで畳み込むよりも、時間領域でウィンドウ関数を乗算すると、それはどのように機能しますか?信号にフィルターの周波数応答を乗算することによる周波数領域での作業、それは正しくフィルタリングするようなものですか?しかし、ここでは、ウィンドウを使用する代わりに、時間領域ですべての作業を行います。
->場所を見てみましょう私の混乱は原因です。ローパスフィルターなどのアナログフィルターの場合、周波数応答のようなパルスがあります。信号をフィルター処理すると、信号のスペクトルにフィルターの周波数応答のようなパルスが効果的に乗算されます。これにより、カットオフを超える信号のすべての周波数が0に減少します。これが、本質的にローパスフィルターの動作方法です。デジタルフィルターでも同じことをしないのはなぜですか?
コメント
- 重複の可能性なぜですかFFTビンをゼロにしてフィルタリングするのは悪い考えですか?
回答
ウィンドウ処理によりスペクトルが減少します漏れ。
$ \ sin(y)= \ cos(\ omega_0 t)$から始めたとします。期間は明らかに$ 2 \ pi / \ omega_0 $です。
しかし、周期が$ 2 \ pi / \ omega $であると誰も言わず、範囲$ [0、1.8 \ pi / \ omega_0] $を盲目的に選択して、この切り捨てられた波形のFFTを取得すると、切り捨てられた波形をコピーして貼り付けることによって作成されたジャンプが元の信号に実際には存在しないため、他の周波数の周波数成分がすべて偽物であることが観察されます-これは、期間間の遷移をスムーズにキャプチャしない不運な切り捨てのアーティファクトです。理想的には、$ \ omega = \ omega_0 $にスペクトル成分が1つだけあります。
時間領域でのウィンドウ処理の目的は、これらすべての架空のスペクトル成分を減らすことです。
回答
DFT計算は入力信号の無限の周期的拡張に基づいて動作するため、ウィンドウ処理が使用されます。多くの実際の信号はまったく周期的ではないか、実際の周期とは異なる間隔でサンプリングされるため、リーク。最初に時間領域信号に両端でゼロになるウィンドウ関数を乗算することにより、無限周期拡張の繰り返し間隔間のスムーズな遷移を作成し、DFTを取得するときにこれらの人工周波数成分の作成を軽減します。
このペーパーは、この現象の詳細と、さまざまなウィンドウ関数の効果に関する洞察を提供します。
回答
2つの異なる操作を混同していると思います。
時間領域でのウィンドウ処理は@で説明されています。サム、だから繰り返しません。しかし、フィルタリングを実行するためにウィンドウ処理は行われません。信号のFFTにフィルタ周波数応答を掛けることによるフィルタリングは、多くの状況で完全に合理的であり、実際に行われます。フィルタリングの代替手段は時間です。 -ドメインコンボリューション(ウィンドウ処理とは異なります)。これには、「リアルタイムで信号を操作する」などの独自の利点があります。 e」は、すべてが保存されてから変換されるのを待たずに測定されるためです。
「デジタルフィルターでも同じことをしないのはなぜですか?」という質問に対する答えは、単に「 、適切な場合。」
コメント
- また、質問で畳み込みとウィンドウ処理が混同されているという印象もあります。ご指摘いただきありがとうございます。
回答
この質問にはいくつかの良い回答があります。しかし、一つの重要な点が完全には明らかにされていないと感じています。質問の一部は、なぜ信号の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])
回答
非長方形ウィンドウを使用しない場合、FFTの結果は、周波数領域フィルタリングを実行する前に、デフォルトの長方形ウィンドウ(周期的なSinc)の変換で畳み込まれます。例えば2つのフィルターが適用されますが、そのうちの1つはおそらく不要です。
時間領域でウィンドウ処理することにより、FFTおよび周波数領域のフィルタリングの前に、フィルタリング(いわゆる「リーク」)を置き換えます。 )長方形のウィンドウ処理によって行われるため、不要なフィルター畳み込みが追加されることはありません。
これを行うもう1つの方法は、連続するウィンドウでオーバーラップ追加またはオーバーラップ保存メソッドを使用することです。長方形のウィンドウは、隣接するウィンドウからの同様の効果によってキャンセルされます。
回答
時間領域のウィンドウ
- ウィンドウの端でゼロを保証できます
- ウィンドウ関数は空間領域で優れた分析式を持っています
- 多くのウィンドウ関数は奇妙な形のスペクトルを持っています概算するのは難しい
- 必要なサンプル数は限られています(ウィンドウ処理は信号ストリームとして実行できます)
eg ウィキペディア
難しい窓関数のゼロへのカットオフは、スペクトル領域で、非常にゆっくりとゼロになるサイドローブがあることを意味します。この制約を取り除くと、ガウスフィルターのように、空間領域とスペクトル領域の両方でコンパクトな関数を使用できます。つまり、スペクトルドメインを介してフィルタリングできますが、信号全体を知る必要があります。
信号全体がすでにある場合は、ウェーブレット
回答
同じ質問がありました。
畳み込みはウィンドウで乗算された時間領域信号の積分/累積合計。これを「ウィンドウ化された」時間領域信号と混同しないでください。
この記事の終わりは私を大いに助けました。
基本的に、実際の信号は有限であり、実際の信号を突然遮断すると、周波数領域に多くの不要な周波数/アーティファクトが発生します。
これらのアーティファクトを回避/最小化するためスムーズな(ベル型などの)ウィンドウ関数を使用して、サンプルがゼロ以外のスカラー値で突然終了するのではなく、ゼロで開始および終了するようにすることができます。
上のウィンドウ化されたサンプルは、下の生のサンプルよりも周波数領域でのアーティファクトが少なくなります。
回答
FFTには2つの大きなカテゴリがあり、1)FIRフィルタを実装する効率的な方法、および2)スペクトル分析です。
For FIRフィルタリング、ウィンドウがフィルターに対応していない限り、ウィンドウについて心配する必要はなく、ウィンドウを使用しませんが、それは一般的なシンではありません。 gする。漏れは問題ではありません。
スペクトル分析では、ウィンドウを使用します。これは、大きな産業機械に取り付けられたセンサーを見て、その腸の奥深くにあるかどうか、ベアリングが故障しているかどうかを調べようとする場所です。ベアリングは故障すると鳴きますが、通常、ベアリングの騒音は機械が発する他の音よりもはるかに低くなります。ここでリークと平均化が発生します。強いトーンが与えられると、リークは、いくつかのビンを探している弱い信号を圧倒します。強い信号が存在する場合の弱い信号に対するスペクトル分析の感度が向上します。バックグラウンドノイズが傾斜している場合にも同様の効果があります。私たちが求める情報は周波数領域にあります。これは、レーダー、ソナー、地球物理学でも同じ問題です。弱い信号を見ることは目標です。
回答
時間領域でのウィンドウ処理は、周波数ビンに正確に配置されていない単一の周波数が広がるのを防ぐために必要です。スペクトル全体にわたって。このページが役立つかもしれません: http://www.sm5bsz.com/slfft/slfft.htm Linrad(私の20歳のプロジェクト)はウィンドウ化されたFFTを使用し、フィルターを適用します周波数領域で(不要なものをゼロにします。)ウィンドウを適用します-周波数ビンで重み1から重み0に突然移動しないでください。次に、後方FFTを適用しますが、今でははるかに少ない数のポイントに適用します。ゼロであることがわかっているすべての周波数ビンを含める必要はありません!!結果として、はるかに小さいサイズの時間関数が得られます。つまり、サンプリングレートがはるかに低くなります。この手順では、フィルタリングとデシメーションを1つのステップで実行します。これは、複数のチャネルを同時にフィルターで除外する場合に非常に効率的です。 linradのホームページは次のとおりです: http://www.sm5bsz.com/linuxdsp/linrad.htm