メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

impz

デジタル フィルターのインパルス応答

説明

[h,t] = impz(b,a) は、指定されたデジタル フィルターのインパルス応答を返します。分子係数 b と分母係数 a をもつデジタル フィルターを指定します。関数は、サンプル数を選択し、h の応答係数と t のサンプル時間を返します。

[h,t] = impz(B,A,"ctf") は、分子係数 B と分母係数 A をもつCascaded Transfer Functions (CTF) として表されるデジタル フィルターのインパルス応答を返します。 (R2024b 以降)

[h,t] = impz({B,A,g},"ctf") は、デジタル フィルターのインパルス応答を CTF 形式で返します。分子係数 B、分母係数 A、およびフィルター セクション全体のスケーリング値 g を使用してフィルターを指定します。 (R2024b 以降)

[h,t] = impz(d) では、デジタル フィルター d のインパルス応答が返されます。d を周波数応答仕様に基づいて生成するには、関数 designfilt を使用します。

[h,t] = impz(sos) では、2 次セクション行列 sos によって指定されたフィルターのインパルス応答が返されます。

[h,t] = impz(___,n) は、計算するインパルス応答のサンプルを指定します。これまでに説明したどの構文を使用してもフィルターを指定できます。

[h,t] = impz(___,n,fs) では、1/fs 単位離れた連続するサンプル間隔のベクトル t が返されます。

出力引数なしで impz(___) を使用すると、フィルターのインパルス応答がプロットされます。

すべて折りたたむ

正規化された通過帯域周波数 0.4 ラジアン/サンプルをもつ 4 次のローパス楕円フィルターを設計します。0.5 dB の通過帯域リップルと 20 dB の阻止帯域の減衰量を指定します。インパルス応答の最初の 50 個のサンプルをプロットします。

[b,a] = ellip(4,0.5,20,0.4);
impz(b,a,50)

Figure contains an axes object. The axes object with title Impulse Response, xlabel n (samples), ylabel Amplitude contains an object of type stem.

designfilt を使用して同じフィルターを設計します。インパルス応答の最初の 50 個のサンプルをプロットします。

d = designfilt('lowpassiir','DesignMethod','ellip','FilterOrder',4, ...
               'PassbandFrequency',0.4, ...
               'PassbandRipple',0.5,'StopbandAttenuation',20);
p = impz(d,50);
stem(p,"Filled")

Figure contains an axes object. The axes object contains an object of type stem.

β=4 のカイザー ウィンドウを使用して次数 18 の FIR ハイパス フィルターを設計します。100 Hz のサンプル レートおよび 30 Hz のカットオフ周波数を指定します。フィルターのインパルス応答を表示します。

b = fir1(18,30/(100/2),'high',kaiser(19,4));
impz(b,1,[],100)

Figure contains an axes object. The axes object with title Impulse Response, xlabel nT (ms), ylabel Amplitude contains an object of type stem.

designfilt を使用して同じフィルターを設計し、そのインパルス応答をプロットします。

d = designfilt('highpassfir','FilterOrder',18,'SampleRate',100, ...
               'CutoffFrequency',30,'Window',{'kaiser',4});
[p,t] = impz(d,[],100);
stem(t,p,"filled")

Figure contains an axes object. The axes object contains an object of type stem.

R2024b 以降

阻止帯域エッジ周波数が 0.4、阻止帯域の減衰量が 50 dB の 40 次ローパス チェビシェフ II 型デジタル フィルターを設計します。CTF 形式のフィルター係数を使用して、フィルターのインパルス応答に含まれる最初の 64 個のサンプルをプロットします。

[B,A] = cheby2(40,50,0.4,"ctf");

impz(B,A,"ctf",64)

Figure contains an axes object. The axes object with title Impulse Response, xlabel n (samples), ylabel Amplitude contains an object of type stem.

通過帯域エッジ周波数が 0.3 と 0.7、通過帯域リップルが 0.1 dB、阻止帯域の減衰量が 50 dB の 30 次バンドパス楕円デジタル フィルターを設計します。CTF 形式のフィルター係数とゲインを使用して、フィルターのインパルス応答に含まれる最初の 64 個のサンプルをプロットします。

[B,A,g] = ellip(30,0.1,50,[0.3 0.7],"ctf");
impz({B,A,g},"ctf",64)

Figure contains an axes object. The axes object with title Impulse Response, xlabel n (samples), ylabel Amplitude contains an object of type stem.

入力引数

すべて折りたたむ

伝達関数の係数。ベクトルで指定します。ba によるこの伝達関数式は次になります。

H(z)=B(z)A(z)=b1+b2z1+bnz(n1)+bn+1zna1+a2z1+amz(m1)+am+1zm

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

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

R2024b 以降

カスケード伝達関数 (CTF) 係数。スカラー、ベクトル、または行列として指定します。BA は、それぞれカスケード伝達関数の分子係数と分母係数をリストします。

B のサイズは L 行 (m + 1) 列、A のサイズは L 行 (n + 1) でなければなりません。ここで、

  • L はフィルター セクションの数を表します。

  • m はフィルターの分子の次数を表します。

  • n はフィルターの分母の次数を表します。

カスケード伝達関数の形式と係数行列の詳細については、CTF 形式によるデジタル フィルターの指定を参照してください。

メモ

A(:,1) のいずれかの要素が 1 と等しくない場合、impz はフィルター係数を A(:,1) で正規化します。この場合、A(:,1) はゼロ以外でなければなりません。

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

R2024b 以降

スケール値。実数値のスカラー、または L + 1 個の要素をもつ実数値のベクトルとして指定します。ここで、L は CTF セクションの数です。スケール値は、カスケード フィルター表現のセクション全体にわたるフィルター ゲインの分布を表します。

impz 関数は、g の指定方法に応じて、scaleFilterSections 関数を使用してフィルター セクションにゲインを適用します。

  • スカラー — この関数は、すべてのフィルター セクションにわたってゲインを均一に配分します。

  • ベクトル — この関数は、最初の L 個のゲイン値を対応するフィルター セクションに適用し、最後のゲイン値をすべてのフィルター セクションに均一に配分します。

データ型: double | single

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

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

2 次セクションの係数。行列として指定します。sosK 行 6 列の行列で、セクション数 K が 2 以上でなければなりません。セクション数が 2 未満の場合、関数は入力を分子ベクトルとして扱います。sos の各行は 2 次 (双二次) フィルターの係数に対応しています。sosi 行目は [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 | single
複素数のサポート: あり

応答を求める点の数。正の整数、非負の整数のベクトル、または空のベクトルとして指定します。

  • n が正の整数の場合、impz はインパルス応答の最初の n サンプルを計算して、t(0:n-1)' として返します。

  • n が非負の整数のベクトルの場合、impz では、ベクトルで指定された場所でインパルス応答を計算します。

  • n が空のベクトルの場合、impz は、サンプルの数を自動的に計算します。詳細については、アルゴリズムを参照してください。

例: impz([2 4 2 6 0 2;3 3 0 6 0 0],5) は、バタワース フィルターのインパルス応答の最初の 5 つのサンプルを計算します。

例: impz([2 4 2 6 0 2;3 3 0 6 0 0],[0 3 2 1 4 5]) は、バタワース フィルターのインパルス応答の最初の 6 つのサンプルを計算します。

例: impz([2 4 2 6 0 2;3 3 0 6 0 0],[],5e3) は、5 kHz でサンプリングされた信号をフィルター処理するように設計されたバタワース フィルターのインパルス応答を計算します。

サンプル レート。正のスカラーで指定します。時間の単位が秒の場合、fs は Hz で表されます。

データ型: double

出力引数

すべて折りたたむ

インパルス応答の係数。列ベクトルとして返されます。

サンプル時間。列ベクトルとして返されます。

詳細

すべて折りたたむ

ヒント

  • スケーリング ゲインを含むフィルターを CTF 形式で取得できます。buttercheby1cheby2ellip などのデジタル IIR フィルター設計関数の出力を使用します。これらの関数で、"ctf" フィルタータイプ引数を指定し、スケール値を取得するために BAg を返すように指定します。 (R2024b 以降)

アルゴリズム

impz では、以下のステートメントを使用して、長さ n のインパルス シーケンスがフィルター処理されます。

filter(b,a,[1 zeros(1,n-1)])

stem を使用して、結果をプロットします。

メモ

impz への入力が単精度の場合、関数は、単精度演算を使用してインパルス応答を計算し、単精度出力を返します。

impzn を自動的に計算した場合、アルゴリズムは次のフィルターの特性によって異なります。

  • FIR フィルター — nb の長さです。

  • IIR フィルター — impz は、roots を使用して伝達関数の極を最初に求めます。

    • フィルターが不安定な場合、n は最大の極をもつ項が元の値の 106 倍に達する位置に存在するものとして選択されます。

    • フィルターが安定している場合、n は、振幅が最大の極をもつ項が元の振幅の 5 × 10–5 倍になる位置に存在するものとして選択されます。

    • フィルターが振動する (単位円上の極のみ) 場合、impz では、最も遅い振動の周期の 5 倍が n とされます。

    • フィルターに振動項と減衰項の両方が含まれている場合は、n は、発振が最も遅くなる 5 周期、または最大の極をもつ項が元の振幅の 5 × 10–5 倍になる値の大きい方になります。

impz では、分子多項式に遅延を含むことができます。遅延の数は、サンプル数の計算に組み込まれています。

参照

[1] Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

すべて展開する