フィルターの実装
畳み込みとフィルター処理
フィルター処理の数学的な基盤は、畳み込みです。有限インパルス応答 (FIR) フィルターの場合、フィルター処理の出力 y(k) は、インパルス応答 h(k):
のある入力信号 x(k) の畳み込みです。
入力信号が有限長でもある場合、MATLAB® 関数 conv
を使用してフィルター処理を実装できます。たとえば、3 次平均化フィルターで 5 サンプルのランダムなベクトルをフィルター処理するには、ベクトル x
に x(k)、ベクトル h
に h(k) を格納して、その 2 つを畳み込むことができます。
x = randn(5,1);
h = [1 1 1 1]/4; % A third-order filter has length 4
y = conv(h,x)
y = -0.3375 0.4213 0.6026 0.5868 1.1030 0.3443 0.1629 0.1787
y
の長さは、x
と h
の長さの合計よりも 1 小さくなります。フィルターと伝達関数
フィルターの伝達関数は、インパルス応答の Z 変換です。FIR フィルターの場合、出力 y の Z 変換、Y(z) は伝達関数の積で、X(z) は入力 x の Z 変換です。
多項式係数 h(1), h(2), …, h(n + 1) は、n 次フィルターのインパルス応答の係数に対応します。
メモ
フィルター係数インデックスは、0 から n ではなく、1 から (n + 1) まで実行します。これは、MATLAB ベクトルに使用される標準インデックス方式を反映しています。
FIR フィルターは、全零、非再帰、または移動平均 (MA) フィルターとも呼ばれます。
無限インパルス応答 (IIR) フィルターの場合、伝達関数は多項式ではなく有理関数です。入力信号と出力信号の Z 変換は、
に関連しています。b(i) と a(i) はフィルター係数です。この場合、フィルターの次数は n と m の最大値です。n = 0 の IIR フィルターは、全極、再帰、または自己回帰 (AR) フィルターとも呼ばれます。n と m の両方が 0 より大きい IIR フィルターの場合、極-零点、再帰、または自己回帰移動平均 (ARMA) フィルターとも呼ばれます。AR、MA、ARMA の頭字語は通常、フィルターされた確率過程に関連するフィルターに適用されます。
関数 filter
を使用したフィルター処理
IIR フィルターの場合、フィルター処理は、単純な畳み込みではなく、伝達-関数関係から見つかる差分方程式で表されます。a(1) = 1 と仮定し、分母を左辺に移項し、逆 Z 変換を実行して
を取得します。
現在と過去の入力、および過去の出力に関して、y(k) は次のようになります。
これは、デジタル フィルターの標準時間領域の表現です。y (1) から始まり、因果システムの初期条件を 0 と仮定しています。表現は
と同等です。
このフィルター処理を実装するには、MATLAB の関数 filter
を使用します。filter
は 2 つの行ベクトルに係数を保存します。一方には分子係数が、もう一方には分母係数が格納されます。たとえば、差分方程式
を解くには、以下を使用します。
b = 1; a = [1 -0.9]; y = filter(b,a,x);
filter
では、入力サンプル数と同数の出力サンプル数が出力されます。つまり、y
の長さは x
の長さと同じです。a の最初の要素が 1 でない場合、filter
によって差分方程式を実装する前に係数が a(1) で除算されます。参考
アプリ
関数
conv
|designfilt
|filter