これは実際にはMATLAB固有の問題ではありません。より一般的な質問がいくつかあります。
デジタルIIRフィルターをどのように実装しますか?
あなたは、ことによって、任意の一般的なデジタルフィルタを適用することができ畳み込むそのインパルス応答あなたがフィルタリングしたいという信号とを。それは次のようになります:
y[n]=∑k=0N−1x[k]h[n−k]
これはFIRフィルターには最適ですが、インパルス応答が無限に長いため、IIRシステムでは複雑になります(N→∞上記の合計)。そのため、上記の簡単な畳み込み和を使用してフィルター出力を計算することが困難になります。IIRフィルターを実際に実装するには、フィルターの出力をより計算しやすい方法で表現する方法が必要です。
インパルス応答を無限に長くするIIRフィルターの属性は、システムの再帰的な性質です。出力からフィルター入力へのフィードバックがあります。つまり、任意の時点でのIIRフィルターの出力は、2つの別々の情報源に依存する可能性があります。
フィルターへの入力信号、過去と現在、および
フィルター出力信号の過去の値。
これは、IIRシステムの微分方程式表現につながります。
a0y[n]=∑k=1M−1aky[n−k]+∑k=0N−1bkx[n−k]
この表現は、次の加重和を計算することで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
したがって、双線形変換を使用して、バターワースフィルターのプロトタイプをデジタルフィルターの実現にマップしているようです。