MATLABはIIRフィルターをどのように処理しますか?


8

MATLABには、butter次数と相対カットオフ周波数を指定してバタワースフィルターを作成するがあります。作成されたフィルターは、filter任意の有限信号に使用できます。

フィルターに無限のインパルス応答がある場合、MATLABはこれをどのように行いますか?私はそれが信号をウィンドウ処理する必要があると思います-これはすべての既知の値が使用されるように単純な長方形のウィンドウによって行われますか?

また、連続フィルターはどのように離散化されますか?双一次変換、インパルス応答マッチングなど?

私はMATLABのヘルプテキストがこれを説明しているとは思いません:

Y = FILTER(B,A,X)ベクター内のデータをフィルタリングXベクトルによって記述されるフィルタとAし、Bフィルタリングされたデータを作成しますY。フィルターは、標準差分方程式の「直接型II転置」実装です。

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
                      - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

回答:


8

これは実際にはMATLAB固有の問題ではありません。より一般的な質問がいくつかあります。

デジタルIIRフィルターをどのように実装しますか?

あなたは、ことによって、任意の一般的なデジタルフィルタを適用することができ畳み込むそのインパルス応答あなたがフィルタリングしたいという信号とを。それは次のようになります:

y[n]=k=0N1x[k]h[nk]

これはFIRフィルターには最適ですが、インパルス応答が無限に長いため、IIRシステムでは複雑になります(N上記の合計)。そのため、上記の簡単な畳み込み和を使用してフィルター出力を計算することが困難になります。IIRフィルターを実際に実装するには、フィルターの出力をより計算しやすい方法で表現する方法が必要です。

インパルス応答を無限に長くするIIRフィルターの属性は、システムの再帰的な性質です。出力からフィルター入力へのフィードバックがあります。つまり、任意の時点でのIIRフィルターの出力は、2つの別々の情報源に依存する可能性があります。

  • フィルターへの入力信号、過去と現在、および

  • フィルター出力信号の過去の値。

これは、IIRシステムの微分方程式表現につながります。

a0y[n]=k=1M1aky[nk]+k=0N1bkx[nk]

この表現は、次の加重和を計算することでIIRフィルターを実装できることを示しています。 M フィルターの過去の出力と N フィルターの過去の入力(実際には、 N そして M同じであることができ、しばしば同じです。上記のように定義した場合のフィルターの次数max(M,N)1)。これは、自動実装に適した、フィルターの動作を完全にキャプチャする閉じた形式の式であり、質問で示したMATLABヘルプの抜粋で参照されている方程式です。ご了承くださいa0 ほぼ排他的に等しいと仮定されます 1; 引用されたヘルプテキストにとして示されているので、それだけを含めましたa(1)

したがって、具体的に質問に答えるために、テキストが示唆するように、MATLABは上記の方程式を使用してIIRシステムを実装します。MATLABなどを使用してIIRフィルターを設計すると、2セットの係数(ak そして bkフィルターの実装で過去のフィルターの入力と出力に重みを付ける方法を定義する差分方程式)。時々関連する他のいくつかの微妙な点があります。たとえば、テキストは、フィルターの「直接型II転置」実現の使用に言及しています。次に、目的の出力サンプルごとに上記の差分方程式を計算してフィルターを適用します。

実際デジタルフィルターを実装するために使用できるトポロジは多数あり、それぞれに独自のトレードオフがあります。DF2Tは、より効率的な構造(最小数の遅延要素を含む)と丸め誤差に対する堅牢性の向上(フィードフォワード係数のため)のため、よく使用されます。bk 最初に実装されます)。

MATLABはバタワースフィルターをどのように設計しますか?

butter関数のドキュメントでは、アナログバターワースフィルターのプロトタイプへの離散近似を生成する方法を指定していません。ただし、を覗くとbutter.m、次のことがわかります。

% step 5: Use Bilinear transformation to find discrete equivalent:
if ~analog,
    [a,b,c,d] = bilinear(a,b,c,d,fs);
end

したがって、双線形変換を使用して、バターワースフィルターのプロトタイプをデジタルフィルターの実現にマップしているようです。


2

MATLABのフィルター関数は、直接型II変換フィルターの差分方程式を実装します。フィルターは最初は離散空間で設計されているため、フィルターをデジタル化する理由はありません。filter()の出力は、入力と同じ長さです。その長さを延長するフィルターの部分を切り捨てるので、それは技術的に「間違っています」。尾にアクセスする場合は、入力信号に適切な量のゼロを追加できます。これは「無限」の応答なので、完全に行うことはできませんが、実際にはほとんどのアプリケーションでそれを行うことはそれほど難しくありません。

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