FFTを使用してFIRフィルターを設計する際の問題は何ですか?


15

畳み込みのフィルターカーネルを使用して「第一原理」から設計されたFIRフィルターと、FFTを使用して2つの方法のいずれかで設計されたフィルター(以下を参照)の関係を理解し​​ようとしています。

私の知る限り、FIRフィルターのインパルス応答は、フィルターの畳み込みカーネルと同じです。(間違っている場合は修正してください。)

また、私の理解では、FIRフィルターのインパルス応答の成分周波数(すなわち、フーリエ変換)は、フィルターの周波数応答と同じものです。したがって、逆フーリエ変換によりインパルス応答が返されます(繰り返しますが、間違っている場合は修正してください)。

これにより、2つの結論に導かれます(位相応答を無視するか、線形位相応答を仮定します)。

  1. 目的の周波数応答を「描画」し、IFFTを使用してインパルス応答を取得し、それを畳み込みカーネルとして使用することにより、任意の周波数応答のFIRフィルターを設計できるはずです。

  2. あるいは、入力信号のFFTを取得し、周波数領域で希望する任意の周波数応答を乗算し、結果のIFFTを取得して出力信号を生成することにより、フィルターを作成できる必要があります。

直感的には、1と2は同等のように感じますが、それを証明できるかどうかはわかりません。

人々(およびDSPの文献)は、ChebyshevやRemezなどの複雑な(私にとっては)アルゴリズムを使用して、事前定義された応答を使用してFIRカーネルを設計するためにかなりの時間を費やしているようです。

  • 可能なすべてのFIRカーネルにFFT / IFFT変換が存在する場合、なぜこれらの長さにするのですか?
  • 必要な正確な周波数応答を単純に描画し、IFFTを実行すると、FIRカーネルがあります(上記の方法1)。

興味のある分野は、デジタルオーディオ/デジタル音楽です。
ブリホイット

回答:


13

直接的なアプローチ(1と2の両方)を採用するのではなく、FIRフィルターを設計する人々を見る1つの理由は、直接的なアプローチでは通常、周波数領域の周期性を考慮に入れないことと、FFTを使用し実装された畳み込み循環たたみ込み

これは何を意味するのでしょうか?

信号x = [ 1があるとします ;及びフィルタインパルス応答(もしそれらが同じである正しいコンボリューションカーネル) H = [ 1 1 ]バツ=[1234]h=[11]

畳み込みある[ 1 3 5y=バツh、5-長ベクター。あなたは(間違った長さの、4)FFTを使用する場合は、あなたが得る答えがある [ 3 5 7 5 ]。違いの理由は、これら2つの線形畳み込みの結果は長さ5ですが、循環畳み込みの結果はFFTの長さが何であってもです。[13574][3575]

FFT長が線形畳み込みの結果の長さ以上である場合、2つは同じです。そうでない場合、2つは同じではありません(データが何らかの方法で共謀している場合を除きます。たとえば、1つの信号がゼロの場合)。


もちろん、FFT / IFFTのサイズが最終的な畳み込みの長さに対応していることを確認できなかったのはなぜですか?たとえば、畳み込みの長さはN + M-1であるため、長さM-1のフーリエドメインで周波数応答を「描画」するようにしてください。なぜそれが機能しないのですか?ところで面白いもの。:)
TheGrapeBeyond

1
@TheGrapeBeyond:まったく理由はありません!M - 1だけの応答のフリーハンド描画ですM1ポイントおそらく(ポイント間で)思ったとおりには動作しません。
ピーターK。

2
長さM-1の周波数応答には、無限の長さのインパルス応答があります。つまり、フィルター処理した結果を取得するためにIFFTを実行すると、フィルターのインパルス応答のテールがラップアラウンド(複数回)され、最終的な時間領域の結果が生成されます。おそらく少し。おそらくたくさん。
hotpaw2

10

1つの問題は、有限長のFFTを使用するときにラップアラウンドする無限長の変換を扱うことです。有限長の周波数応答のフーリエ変換は、無限長のインパルス応答またはフィルターカーネルです。ほとんどの人は、フィルターが死ぬかコンピューターのメモリを使い果たす前に終了することを望んでいるので、より短いFIRフィルターを作成するためのトリックが必要です。無限インパルス応答のテールをFFTにラップアラウンドさせるか、一般的な長さに切り詰めると、「古典的な」フィルタープロトタイプの1つと比較して、目的の周波数仕様に対して劣ったFIRフィルターが生成される場合があります。

別の問題は、ランダムな「描画された」周波数応答が、任意の有限解像度で描画されたポイント間で非常に頻繁にひどい応答(ワイルドオーバーシュート)を持つことです。FIRフィルターに変換すると、狂ったように鳴ります。古典的なフィルタープロトタイプは、サンプルポイント間で滑らかな周波数応答関数を持つように設計されています。

あなたの(2)は高速畳み込みと呼ばれ、FFTがデータウィンドウの長さとフィルタカーネルの合計の長さより長く、適切なオーバーラップ追加/保存が各畳み込みセグメントの開始/終了の世話をする場合に一般的に使用されますまたはウィンドウ(FFTの長さは通常ブロック状であるため)。


6

Re 1):はい、周波数応答(振幅と位相の両方)を「描画」することでFIRフィルターを設計できます。ただし、これは非常に非効率になる傾向があります。インパルス応答の長さ(およびフィルター次数)は単にpre -FFTの長さによって決まります。128ポイントFFTを選択した場合、インパルス応答に128タップを取得し、4096ポイントFFTを選択した場合、4096フィルタータップを取得します。

Re 2):はい、周波数領域で乗算することでフィルタリングできます。それが実際に大きなインパルス応答に対して効率的に行う唯一の方法です。ただし、ピーターKが指摘したように、周波数領域での乗算は循環たたみ込みに対応します。線形畳み込みを実装する最も一般的な方法は、「重複追加」または「重複保存」アルゴリズム(簡単にグーグルで検索)です。


3

ここで述べられたことをすべて理解しているのかどうかはわかりませんが、フーリエ変換法のケースを作りたいと思います。

まず、FIRフィルターを設計するための非常に柔軟で簡単な方法です。あなたが言ったように、行う必要があるのは、振幅と位相の応答を定義することだけです。ただし、前述のように、応答をどのように定義するかについて少し注意する必要があります。任意の応答は、ひどい時間領域応答を実装して与えるために、非常に多くのタップが必要になる場合があります。したがって、定義方法に注意してください。

第二に、例えば、パークス・マクレラン法は、特定の要件に対してフーリエ法よりも優れたフィルターを生成できますが、タップ数を制御し、その振幅、位相、およびステップ応答を定義することは簡単ではありません方法。

たとえば、10極IIRベッセルに似た特性を持つFIRフィルターを設計したいが、遷移帯域を少し狭くしたい場合(ステップ応答のオーバーシュートを犠牲にして)とします。次に、フーリエ法により、遷移帯域がどれだけ狭くなるかに応じて、約22タップでこれを簡単に解決できます。

フーリエ法の能力を確認したい場合は、このFIRプログラムhttp://www.iowahills.com/5FIRFiltersPage.html(無料)を試して ください。たとえば、ガウス、ベッセル、バターワース、および逆チェビシェフフィルターに相当するIIRを設計できます。一般に、ほとんどすべてのフィルターの応答を調整できます。これがフーリエ法の長所です。欠点として、フィルターはおそらく特定の要件に最適ではありません。


それは面白そうです。何が起こっているのか本当に頭に浮かぶために、ソフトウェアを試してみる必要があります。Webページは、その方法をあまり詳細に説明していないようです。しかし、私から言えることは、より伝統的な方法で生成されたフィルタープロトタイプの周波数応答を操作する一種のハイブリッドのようです。あれは正しいですか?あなたの言うことは正しいと思います-応答の定義方法に注意する必要があります。そうしないと、膨大な数のタップが発生します。AFAIU、これは周波数応答のみでフィルターを設計する際の大きな問題です。
ブリホイ

1

私の知る限り、これはいわゆる「単純なフィルタリング手法」です。周波数空間の特定のポイントでスペクトルコンテンツに影響を与えることができますが、それらのポイント間の周波数コンテンツに対しては何も便利ではありません。適切なFIRフィルターを設計する場合、実際にはそれらの主要点の間の点も考慮に入れますが、このようなフィルターは最初のフィルターよりはるかに優れています。

よろしく、ブル。

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