例: ゼロ位相フィルタ
filtfilt関数を使用し、前方後方フィルタリングモデルを使用してフィルタのゼロ位相応答を計算します。
1.
butter関数を使用して、2 次アナログ
Butterworth フィルタの係数を取得します。
2.
iirlow関数を使用して、カットオフ周波数 0.25 のローパス IIR フィルタの係数を取得します。
3.
gain関数と
arg関数を使用し、フィルタのマグニチュード応答と位相応答を定義します。
4. p を使用して f のすべての値におけるフィルタのマグニチュード応答と位相応答を再定義します。
5. マグニチュード応答をプロットしてから、マーカーを使用してカットオフ周波数でのマグニチュードを表示します。
6. 位相応答をプロットしてから、マーカーを使用してカットオフ周波数での値を表示します。
7. サンプルパルス信号を定義してプロットします。
この入力は、信号の中点でのインパルスから成ります。
8. filtfilt 関数を使用してゼロ位相出力を計算します。
9.
dft関数を使用して、両方の信号のフーリエ変換を計算することでフィルタが信号に与える影響を確認してから、
Y のマグニチュードと位相をプロットします。
10. mag 関数を使用し、X と Y のマグニチュードの比から求められる変換関数から、カットオフが予想どおり Butterworth の形状になっていることを確認します。
11. マグニチュード応答と変換関数をプロットします。
12. arg 関数を使用して X と Y の主偏角間の位相差を定義します。
13. マグニチュード応答と、X とY の間の位相差をプロットします。
• filtfilt 関数を実行した結果、プロットに示されるように、信号のマグニチュードのフィルタが 2 倍になりますが、元のフィルタでは非線形の位相であるのに対して位相シフトはゼロになります。
• 位相プロットを確認するときには、位相 -2π と位相 0 は等しいということを念頭に置いてください。Y のマグニチュードが非常に小さい箇所では、カットオフよりはるかに高い周波数と同様に、数値ノイズによって位相が無意味になることがあります。