MATLABのfiltfilt
は、フォワードバックワードフィルタリングを実行します。つまり、フィルター処理、信号の反転、再度フィルター処理、そして再度反転します。これは、位相遅れを減らすために行われたようです。このようなフィルタリングを使用することの長所/短所は何ですか(結果として生じると思います)フィルタの順序を効果的に増やします)。
filter
の代わりに常にfiltfilt
を使用することをお勧めします(つまり、フォワードフィルタリングのみ)?これを使用する必要があり、使用してはならないアプリケーションはありますか?
コメント
回答
周波数領域で最もよく見ることができます。 $ x [n] $が入力シーケンスで、$ h [n] $がフィルターのインパルス応答である場合、最初のフィルターパスの結果は
$$ X(e ^ {j \ omega})H(e ^ {j \ omega})$$
$ X(e ^ {j \ omega})$および$ H(e ^ {j \ omega})$それぞれ$ x [n] $と$ h [n] $のフーリエ変換。時間反転は、周波数領域で$ \ omega $を$-\ omega $に置き換えることに対応するため、時間反転後に次のようになります。
$$ X(e ^ {-j \ omega})H(e ^ {-j \ omega})$$
2番目のフィルターパスは、$ H(e ^ {j \ omega})$:
$$ X(e ^ {-j \ omega})H(e ^ {j \ omega})H(e ^ {-j \ omega})$ $
時間反転後、最終的に出力信号のスペクトルが得られます
$$ Y(e ^ {j \ omega})= X(e ^ {j \ omega })H(e ^ {j \ omega})H(e ^ {-j \ omega})= X(e ^ {j \ omega})| H(e ^ {j \ omega})| ^ 2 \ tag {1} $$
実数値のフィルター係数の場合、$ H(e ^ {-j \ omega})= H ^ {*}(e ^ {j \ omega})$があるためです。式(1)は、出力スペクトルが周波数応答$ | H(e ^ {j \ omega})| ^ 2 $のフィルターでフィルター処理することによって得られることを示しています。 chは純粋に実数値です。つまり、その位相はゼロであるため、位相の歪みはありません。
これは理論です。リアルタイム処理では、もちろん、入力ブロックの長さに対応するレイテンシーを許可した場合にのみ時間反転が機能するため、非常に大きな遅延が発生します。ただし、これによって位相歪みがないという事実は変わりません。出力データの遅延が追加されるだけです。FIRフィルタリングの場合、新しいフィルター$ \ hat {hを定義した方がよいため、このアプローチは特に有用ではありません。 } [n] = h [n] * h [-n] $であり、通常のフィルタリングで同じ結果が得られます。IIRフィルターではゼロ位相(または線形位相、つまり線形位相)を持つことができないため、この方法を使用する方が興味深いです。純粋な遅延)。
要約:
-
IIRフィルターが必要な場合、または位相歪みをゼロにしたい場合、処理遅延は問題ありません。この方法は便利です
-
処理の遅延が問題になる場合は、使用しないでください
-
FIRフィルターがある場合、この方法を使用するのと同等の新しいFIRフィルター応答を簡単に計算できます。 FIRフィルターを使用すると、常に正確な線形位相を実現できることに注意してください。
コメント
- という名前のタグを作成しました
maximum-aposteriori-estimation
。名前をmaximum-a-posteriori-estimation
に変更してください。誤って、a
の後に-
を忘れてしまいました。ありがとうございます。
回答
この動画を見つけました非常に役立つ(マットの回答について詳しく説明します)。
ビデオからの重要なアイデアは次のとおりです。
- ゼロフェーズは位相歪みは発生しませんが、因果的フィルターは発生しません。これは、データが収集されたときにフィルター処理されている場合、これはオプションではないことを意味します(後処理できる保存データに対してのみ有効) 。
- 非因果的フィルターを実装すると、トランジェントが前後にぼやけます(たとえば、2dBのリップルが必要な場合、事実フィルタを使用して順方向および逆方向の実行を行うということは、これらのそれぞれに1dBを持たせることを意味します。
- 離散時間フーリエ変換の時間反転プロパティを使用します。
- FILTFILTによって引き起こされる有効周波数応答は、一方向の周波数応答の大きさの2乗です。入力信号
x[n]
を取得し、それをフィルタリングし、結果を反転し、再度フィルタリングし、再度反転します(時間反転ステップでは、すべてのデータが使用可能である必要があります)。
プリリンギング"奇妙に聞こえます。最小位相フィルタリングはより自然です。 ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html