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

filter

フィルター オブジェクトをもつフィルター データ

構文

y = filter(hd,x)
y = filter(hd,x,dim)

説明

固定小数点フィルターの構文

y = filter(hd,x) は、固定小数点フィルター hd を使って実数または複素数の入力データのベクトル x をフィルター処理し、フィルター処理された出力データ y を生成します。ベクトル x および y は同じ長さをもち、filter は hdStates プロパティ hd.states にフィルターの最終状態を格納します。

プロパティ PersistentMemoryfalse (既定の設定) に設定すると、フィルター処理を開始する前にフィルターの初期状態がゼロに設定されます。hd で非ゼロの初期状態を使用するには、PersistentMemorytrue に設定します。その後、hd.statesnstates(hd) 要素のベクトルに設定し、各状態に 1 つの要素を設定します。hd.states にスカラーを指定する場合、filter はスカラーを状態に適切な長さのベクトルに展開します。展開されたベクトルのすべての要素はスカラーの値をもちます。

x が行列の場合、y = filter(hd,x) では x の各列に沿ってフィルター処理が行われ、独立したチャネルの行列 y が生成されます。x が多次元配列の場合、y = filter(hd,x) では xx の大きさが 1 でない最初の次元に沿ってフィルター処理します。

行列 x をフィルター処理するときに非ゼロの初期条件を使用するには、フィルター状態を初期条件値の行列に設定します。フィルターの States プロパティ (hd.states) を nstates(hd)size(x,2) 列の行列に設定して初期条件を設定します。

y = filter(hd,x,dim) は、dim で指定された x の特定の次元に沿って配置されている入力データにフィルター hd を適用します。

マルチチャネル データをフィルター処理する場合、dim によってフィルター処理を行う入力行列の次元 (チャネルを行で表すか列で表すか) を指定できます。dim 入力引数を指定すると、フィルターは dim で指定された次元に沿って処理を行います。入力データ x がベクトルまたは行列で dim が 1 の場合、x の各列は 1 つの入力チャネルとして扱われます。dim が 2 の場合、フィルターは入力 x の各行をチャネルとして扱います。

ループ環境でマルチチャネル データをフィルター処理する場合、dim 入力引数を使用して適切な処理次元を設定しなければなりません。

必要に応じて、hm.states を行数が nstates(hd) (1 行が入力データの 1 チャネルの状態を含む) で列数が size(x,2) (1 列が各チャネルのフィルター状態を含む) の行列に設定して、各チャネルに個別に初期条件を指定します。

すべて折りたたむ

フィルターをさまざまな初期条件 (IC) または初期条件なしで使用して信号をフィルター処理します。

x = randn(100,1);    % Original signal.
b = fir1(50,.4);     % 50th-order linear-phase FIR filter.
hd = dfilt.dffir(b);    % Direct-form FIR implementation.

特定の初期条件は設定しません。

y1 = filter(hd,x);   % 'PersistentMemory'='false'(default).
zf = hd.states;      % Final conditions.

フィルター処理の前に IC を設定して非ゼロの初期条件を使用します。

hd.persistentmemory = true;
hd.states = 1;      % Uses scalar expansion.
y2 = filter(hd,x);
stem([y1 y2])       % Different sequences at beginning.
legend('y1','y2');

ステム プロットを見てみると、シーケンスがフィルター処理の最初で異なっていることが分かります。

以下に、フィルターをストリーミング データで使用する方法の 1 つを示します。

reset(hd);           % Clear filter history.
y3 = filter(hd,x);   % Filter entire signal in one block.

実験的に、処理を繰り返してデータをストリーミング形式ではなくセクションとしてフィルター処理してみます。

reset(hd);              % Clear filter history.
yloop = zeros(20,5);    % Preallocate output array.
xblock = reshape(x,[20 5]);
for i=1:5
   yloop(:,i) = filter(hd,xblock(:,i));
end

ステム プロットを使用してストリーミング フィルター処理とブロックごとのフィルター処理の比較を表示します。

stem([y3 yloop(:)]);
legend('y3','yloop')

信号のセクションごとのフィルター処理は、信号全体を一度にフィルター処理することと同じです。

アルゴリズム

すべて折りたたむ

量子化フィルター

filter コマンドは、指定された量子化フィルター構造で固定小数点または浮動小数点の演算を実装します。

入力信号で離散時間フィルター オブジェクトを使用するときに filter によって適用されるアルゴリズムは、ローパス、ナイキストあるいはバンドストップなどフィルターで選択する応答によって異なります。各フィルターのアルゴリズムの詳細については、適切な離散時間フィルターのリファレンス ページで提供される参考文献を参照してください。

メモ:

dfilt/filter はフィルター係数を自動的に正規化しません。MATLAB で提供される関数 filter は係数を正規化します。

適応フィルター

適応フィルター オブジェクトを信号に適用するときに filter によって使用されるアルゴリズムは、適応フィルターに選択したアルゴリズムによって異なります。各適応フィルターのアルゴリズムの詳細については、該当する適応フィルター オブジェクトのリファレンス ページで示される参考文献を参照してください。

参照

[1] Oppenheim, A.V., and R.W. Schafer, Discrete-Time Signal Processing, Prentice-Hall, 1989.

参考

関数

R2011a で導入