メインコンテンツ

関数 filter

filter は、直接 II 型転置構成 として実装されます。ここで、n–1 はフィルター次数です。これは最小数の遅延要素をもつ正準形です。

サンプル m において、filter は以下の差分方程式を計算します。

y(m)=b(1)x(m)+z1(m1)z1(m)=b(2)x(m)+z2(m1)a(2)y(m)=zn2(m)=b(n1)x(m)+zn1(m1)a(n1)y(m)zn1(m)=b(n)x(m)a(n)y(m)

最も基本的な型において、関数 filter は、遅延出力 zi(1), i = 1, ..., n-1 を 0 に初期化します。これは、過去の入力と出力が両方ともゼロであるという仮定に相当します。初期の遅延出力を関数 filter の 4 番目の入力パラメーターを使用して設定するか、2 番目の出力パラメーターを使用して最後の遅延出力にアクセスします。

[y,zf] = filter(b,a,x,zi)

初期および最終の状態にアクセスすることは、データをセクションに分けてフィルター処理する場合、特にメモリの制約を考慮しなければならない場合に便利です。たとえば、2 つのセグメントで各 5000 点のデータを収集したとしましょう。

x1 = randn(5000,1);  % Generate two random data sequences.
x2 = randn(5000,1); 

最初のシーケンス x1 は最初の 10 分間のデータに、2 番目のシーケンス x2 はその後 10 分間のデータに対応しています。全体のシーケンスは、x = [x1;x2] です。両方のシーケンスを保持するために十分なメモリがない場合は、サブシーケンス x1x2 を 1 つずつフィルター処理します。フィルター処理されたシーケンスの連続性を確保するために、x1 の最終条件を x2 のフィルター処理における初期条件として使用します。

[y1,zf] = filter(b,a,x1);
y2 = filter(b,a,x2,zf);

関数 filtic は、filter の初期条件を生成します。filtic は、指定した過去の入出力をフィルターの動作に反映させるように、遅延ベクトルを計算します。関数 filtic を使用して上記と同じ出力遅延値 zf を得るには、以下を使用します。

zf = filtic(b,a,flipud(y1),flipud(x1));

これは、適切な初期条件がフィルター処理開始時の過渡的な影響を抑える役目をするため、短いデータ シーケンスをフィルター処理する場合に便利です。