例: フィルタゲイン
gain関数は、1 つの周波数におけるゲインを返します。周波数をベクトルで指定した場合、ゲインのベクトル (変換関数) が返ります。これはプロットに便利です。
ローパスフィルタのゲイン
1. iirlow関数を使用して、カットオフ周波数 f の 2 次アナログ Butterworth ローパス IIR フィルタの係数を取得します。
行列 A にはフィルタの係数が格納されているので、変換関数は次のようになります。
2. gain 関数を使用して、周波数 x におけるフィルタゲインを計算します。
3. サンプリング周波数の比 (0 から 0.5) で表した周波数に対してゲインのマグニチュードをプロットします。
カットオフ周波数でゲインは 0.707 に低下しています。
4. サンプリング周波数が 2π で表されるように周波数を尺度化し、ゲイン関数への周波数の引数を 2π で割ります。
フル x スケールで 0.2 のカットオフ周波数がフルωスケールでは 0.2 つまり 0.4 π になっています。
高次ローパスフィルタ
1. iirlow 関数を使用して、カットオフ周波数 f の 6 次アナログ Butterworth ローパス IIR フィルタの係数を取得します。
2. gain 関数を使用して、周波数 x におけるフィルタゲインを計算します。
3. サンプリング周波数の比 (0 から 0.5) で表した周波数に対してゲインのマグニチュードをプロットします。
4. 2 つのフィルタの応答を同じグラフにプロットして比較します。
◦ 6 次フィルタの応答は 2 次フィルタの応答よりもはるかに急激に低下しています。
◦ どちらのフィルタもカットオフ周波数 0.2 では同じゲインです。
FIR フィルタのゲインを計算します。
bandpass関数を使用して設計された FIR フィルタのゲインを計算します。
1. Blackman ウィンドウを使用して、通過帯域が f_low から f_high、長さ 51 の帯域通過フィルタの係数を計算します。
F は 51 個の要素から成る配列です。
2. このフィルタのゲインを計算します。
3. ゲインをデシベルでプロットします。
下限カットオフ周波数と上限カットオフ周波数の間でゲインが最大になっています。
関数定義
総和演算子を使用して、変換関数の定義から直接ゲインを計算できます。
周波数 x におけるフィルタ F のゲインを計算します。
これは z = 2πx で計算された変換関数です。
gain は総和演算子よりも高速なので、多数の周波数でのゲインを計算する場合に便利です。たとえば、周波数応答のプロットに gain を使用します。非常に長いフィルタの場合、gain でも計算に時間がかかるので、プロットにはかなり粗いグリッド (0.01 など) を選択してください。
FIR フィルタの位相
複素ゲインの位相はフィルタの位相シフトを表します。
1. FIR フィルタのカットオフ周波数を設定します。
2. lowpass関数で Hanning ウィンドウを使用して (最後の引数が 4)、ローパスフィルタの係数を計算します。
3. arg関数を使用して位相変化をプロットします。この関数は複素数 z の主偏角 (-
π から
π、ただし
π を含む) を返します。
位相は通過帯域 (カットオフ周波数の下) では線形ですが、フィルタ遅延が生じています。
4. 遅延 D の変換関数を除算することで、遅延信号に対する複素ゲインを計算します。
ここで
この長さ 37 のフィルタの遅延 D は 18 なので、相対位相シフトは次のように計算されます。
◦ ゲインが負の実数の場合、ゲイン計算時の丸め誤差によって小さな正または負の虚部が残り、これによって位相が π と -π の間で任意にジャンプすることがあります。
◦ このような値を一律に処理するため、arg を次のように再定義します。
5. ゲインのマグニチュードをデシベルでプロットします。
6. 遅延信号に対する位相シフトをプロットします。