ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

フィルターの実装と解析

フィルター処理の概要

本節では、MATLAB® の関数 filter やその他の Signal Processing Toolbox™ 関数を使用して、離散信号をフィルター処理する方法について説明します。また、ツールボックス関数を使用して、インパルス応答、振幅と位相の応答、群遅延、零点-極位置などのフィルター特性を分析する方法についても紹介します。

畳み込みとフィルター処理

フィルター処理の数学的な基盤は、畳み込みです。MATLAB の関数 conv では、標準の 1 次元の畳み込みが実行され、あるベクトルと別のベクトルの畳み込みが行われます。

conv([1 1 1],[1 1 1])
ans =
     1     2     3     2     1

メモ:

2 次元の信号処理のために方形行列を畳み込むには、関数 conv2 を使用してください。

デジタル フィルターの出力 y(k) は、入力 x(k) に対してインパルス応答 h(k) との畳み込みを行うことで得られます。

デジタル フィルターのインパルス応答 h(k) と入力 x(k) の両方が有限長の場合、conv を使用してフィルターを実装できます。x(k) をベクトル x、h(k) をベクトル h に保存して、この 2 つのベクトルを畳み込みます。

x = randn(5,1);     % A random vector of length 5
h = [1 1 1 1]/4;    % Length 4 averaging filter
y = conv(h,x);

出力の長さは、有限長の入力ベクトルの和から 1 を減じたものとなります。

フィルターと伝達関数

離散時間フィルターの出力 y(n) の Z 変換 Y(z) は通常、その入力の z 変換 X(z) と次のような関係をもっています。

ここで、H(z) はフィルターの "伝達関数" です。ここで、定数 b(i) および a(i) はフィルター係数であり、フィルターの次数は n と m の最大値になります。

メモ:

フィルター係数の添字は、0 ではなく 1 から始まります。これは、MATLAB ベクトルに使用される標準のインデックス方式を反映します。

MATLAB フィルター関数では、係数が 2 つのベクトル (分子のベクトルと分母のベクトル) に保存されます。慣例により、フィルター係数には行ベクトルが使用されます。

フィルター係数とフィルター名

多くの標準的なフィルター名は、存在する a および b 係数の数を反映しています。

  • n = 0 (つまり、b がスカラー) の場合、フィルターは無限インパルス応答 (IIR) の全極、再帰、または自己回帰 (AR) フィルターです。

  • m = 0 (つまり、a がスカラーの場合)、フィルターは、有限インパルス応答 (FIR) の全極、非再帰、または移動平均 (MA) フィルターです。

  • nm の両方が 0 より大きい場合、フィルターは IIR、極-零点、再帰、または自己回帰移動平均 (ARMA) フィルターです。

AR、MA、ARMA の頭字語は通常、フィルターされた確率過程に関連するフィルターに適用されます。

関数 filter を使用したフィルター処理

既に見たように、Z 変換の関係から差分方程式に戻ることは簡単です。a(1) = 1 と仮定します。分母を左辺に移項し、逆 Z 変換を実行します。

現在と過去の入力、および過去の出力に関して、y(k) は次のようになります。

これは、デジタル フィルターの標準的な時間領域の表現です。計算は y(1) から始まり、因果システムの初期条件を 0 と仮定しています。この表現は、次のように展開できます。

この形式のフィルターは、関数 filter を使用して簡単に実装できます。たとえば、単純な単極フィルター (ローパス) は、次のようになります。

B = 1;          % Numerator
A = [1 -0.9];   % Denominator

ここで、ベクトル BA は、伝達関数形式でのフィルターの係数を表します。A の係数ベクトルは、差分方程式において出力項と入力項が分離しているかのように記述されています。たとえば、上記の係数ベクトルは、

の線形定数係数差分方程式を表しています。係数 A(2) の符号を変更すると、差分方程式

となります。この式の係数は次により表されます。

B = 1; %Numerator
A = [1 0.9]; %Denominator
これはハイパス フィルターとなります。

このフィルターをデータに適用するには、以下を使用します。

y = filter(B,A,x);

関数 filter では、入力サンプル数と同数の出力サンプル数が出力されます。つまり、y の長さは x の長さと同じです。a の最初の要素が 1 でない場合、関数 filter によって差分方程式を実装する前に係数が a(1) で除算されます。