Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

filtfilt

ゼロ位相デジタル フィルター処理

説明

y= filtfilt (b,a,x)は,入力データxを順方向と逆方向の両方で処理することにより、ゼロ位相デジタル フィルター処理を実行します。データを順方向でフィルター処理した後、関数filtfiltではフィルター処理したシーケンスを逆にして、逆方向にフィルター処理が行われます。この結果には、以下の特性があります。

  • ゼロ位相の歪み

  • 元のフィルター伝達関数の二乗振幅と等しい、フィルター伝達関数

  • baにより指定されるフィルターの次数の倍のフィルター次数

filtfiltは、初期条件を一致させることにより、処理の実行開始時と終了時の過渡状態が最小化します。微分器フィルターやヒルベルト FIR フィルターの演算は位相応答に大きく依存しているため、関数filtfiltをこれらのフィルターと共に使うことは避けてください。

y= filtfilt (sos,g,x)ゼロ位相は、行列sosおよびスケール値gで表される 2 次セクション型 (双二次) フィルターを使用して入力データxをフィルター処理します。

y= filtfilt (d,x)はデジタル フィルターdを使用して、入力データxにゼロ位相フィルターを適用します。dを周波数応答仕様に基づいて生成するには、関数designfiltを使用します。

すべて折りたたむ

ゼロ位相フィルター処理は、フィルター処理された時間波形の特徴を、フィルター処理されていない信号で現れる場所にそのまま保持する上で役立ちます。

filtfiltを使用して、合成心電図 (ECG) 波形をゼロ位相フィルター処理します。波形を生成する関数は、例の最後にあります。QRS 群は心電図波形の重要な特徴です。この例では時点 160 あたりから始まっています。

wform = ecg(500); plot(wform) axis([0 500 -1.25 1.25]) text(155,-0.4,'Q') text(180,1.1,'R') text(205,-1,'S')

Figure contains an axes. The axes contains 4 objects of type line, text.

心電図を加法性ノイズで乱します。再現可能な結果が必要な場合は、乱数発生器をリセットします。ローパス FIR 等リップル フィルターを作成し、ゼロ位相のフィルターと通常のフィルターの両方を使用してノイズの多い波形をフィルター処理します。

rngdefaultx = wform' + 0.25*randn(500,1); d = designfilt('lowpassfir',...'PassbandFrequency',0.15,'StopbandFrequency',0.2,...'PassbandRipple',1,'StopbandAttenuation',60,...'DesignMethod','equiripple'); y = filtfilt(d,x); y1 = filter(d,x); subplot(2,1,1) plot([y y1]) title('Filtered Waveforms') legend('Zero-phase Filtering','Conventional Filtering') subplot(2,1,2) plot(wform) title('Original Waveform')

Figure contains 2 axes. Axes 1 with title Filtered Waveforms contains 2 objects of type line. These objects represent Zero-phase Filtering, Conventional Filtering. Axes 2 with title Original Waveform contains an object of type line.

ゼロ位相フィルター処理では信号のノイズが低減し、QRS 群は元々の発生と同じ時点に保持されます。通常のフィルター処理では信号のノイズは低減しますが、QRS 群に遅延が生じます。

バタワース 2 次セクション型フィルターを使用して上記の手順を繰り返します。

d1 = designfilt('lowpassiir','FilterOrder',12,...'HalfPowerFrequency',0.15,'DesignMethod','butter'); y = filtfilt(d1,x); subplot(1,1,1) plot(x) holdonplot(y,'LineWidth',3) legend('Noisy ECG','Zero-Phase Filtering')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Noisy ECG, Zero-Phase Filtering.

これは、ECG 波形を生成する関数です。

functionx = ecg(L)%ECG Electrocardiogram (ECG) signal generator.% ECG(L) generates a piecewise linear ECG signal of length L.%% EXAMPLE:% x = ecg(500).';% y = sgolayfilt(x,0,3); % Typical values are: d=0 and F=3,5,9, etc.% y5 = sgolayfilt(x,0,5);% y15 = sgolayfilt(x,0,15);% plot(1:length(x),[x y y5 y15]);% Copyright 1988-2002 The MathWorks, Inc.a0 = [0,1,40,1,0,-34,118,-99,0,2,21,2,0,0,0];% Templated0 = [0,27,59,91,131,141,163,185,195,275,307,339,357,390,440]; a = a0 / max(a0); d = round(d0 * L / d0(15));% Scale them to fit in length Ld(15)=L;fori=1:14, m = d(i) : d(i+1) - 1; slope = (a(i+1) - a(i)) / (d(i+1) - d(i)); x(m+1) = a(i) + slope * (m - d(i));endend

入力引数

すべて折りたたむ

伝達関数の係数。ベクトルで指定します。全極フィルターを使用する場合は、bに対し1を入力します。全零 (FIR) フィルターを使用する場合は、aに対し1を入力します。

例:b = [1 3 3 1] / 6a = [3 0 1 0]/3は、正規化された 3dB の周波数 0.5π ラジアン/サンプルをもつ 3 次のバタワース フィルターを指定します。

データ型:double

入力信号。実数値または複素数値のベクトル、行列、または N 次元配列として指定します。xは有限の値でなければなりません。filtfiltは、サイズが 1 より大きい最初の配列次元xに沿って動作します。

例:cos(pi/4*(0:159))+randn(1,160)は単一チャネルの行ベクトル信号です。

例:cos(pi./[4;2]*(0:159))'+randn(160,2)は 2 チャネル信号です。

データ型:double
複素数のサポート:あり

2次セクション型の係数。行列として指定します。sosは K 行 6 列の行列で、セクション数 K が 2 以上でなければなりません。セクション数が 2 未満の場合、filtfiltは入力を分子ベクトルとして扱います。sosの各行は 2 次 (双二次) フィルターの係数に対応しています。sosの i 行目は(bi (1) bi (2) bi(3) ai(1) ai(2) ai(3)]に対応しています。

例:s = [2 4 2 6 0 2;3 3 0 6 0 0]は、正規化された 3 dB の周波数 0.5π ラジアン/サンプルをもつ 3 次のバタワース フィルターを指定します。

データ型:double

スケール係数。ベクトルとして指定します。

データ型:double

デジタル フィルター。digitalFilterオブジェクトで指定します。デジタル フィルターを周波数応答仕様に基づいて生成するには、関数designfiltを使用します。

例:d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5)は、正規化された 3 dB の周波数 0.5π ラジアン/サンプルをもつ 3 次のバタワース フィルターを指定します。

データ型:double

出力引数

すべて折りたたむ

フィルター処理された信号。ベクトル、行列、または N 次元配列として返されます。

参照

[1] Gustafsson, F. “Determining the initial states in forward-backward filtering.” IEEE®Transactions on Signal Processing. Vol. 44, April 1996, pp. 988–992.

[2] Mitra, Sanjit K. Digital Signal Processing. 2nd Ed. New York: McGraw-Hill, 2001.

[3] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

拡張機能

R2006a より前に導入