ドキュメンテーション

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

freqz

デジタル フィルターの周波数応答

構文

  • [h,w] = freqz(b,a,n)
  • [h,w] = freqz(sos,n)
  • [h,w] = freqz(d,n)
  • [h,w] = freqz(___,n,'whole')
  • [h,f] = freqz(___,n,fs)
  • [h,f] = freqz(___,n,'whole',fs)
  • h = freqz(___,w)
  • h = freqz(___,f,fs)

説明

[h,w] = freqz(b,a,n) では、分子と分母の多項式係数がそれぞれ ba に格納されているデジタル フィルターに対し、n 点の周波数応答ベクトル h と、それに対応する角周波数ベクトル w が返されます。

[h,w] = freqz(sos,n) では、2 次セクション型行列 sos に対応する n 点の複素周波数応答が返されます。

[h,w] = freqz(d,n) では、デジタル フィルター d に対して n 点の複素周波数応答が返されます。

[h,w] = freqz(___,n,'whole') では、単位円全体を n 個に分割するサンプル点の周波数応答が返されます。

[h,f] = freqz(___,n,fs) では、サンプリング周波数が fs の場合に、分子と分母の多項式係数がそれぞれ ba に格納されているデジタル フィルターに対し、周波数応答ベクトル h と、それに対応する物理周波数ベクトル f が返されます。

[h,f] = freqz(___,n,'whole',fs) では、0 から fsn 個の点における周波数が返されます。

h = freqz(___,w) では、w に格納されている正規化周波数における周波数応答ベクトル h が返されます。

h = freqz(___,f,fs) では、f で提供される物理周波数における周波数における周波数応答ベクトル h が返されます。

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

    メモ:    freqz への入力が単精度の場合、周波数応答は単精度演算で計算されます。出力 h は単精度です。

すべて展開する

伝達関数の周波数応答

次の伝達関数で記述される 3 次の IIR ローパス フィルターの振幅応答を計算し、表示します。

$$H(z)=\frac{0.05634(1+z^{-1})(1-1.0166z^{-1}+z^{-2})}
            {(1-0.683z^{-1})(1-1.4461z^{-1}+0.7957z^{-2})}.$$

分子と分母を多項式のたたみ込みとして表します。単位円全体を 2,001 個に分割する点の周波数応答を求めます。

b0 = 0.05634;
b1 = [1  1];     b2 = [1 -1.0166 1];
a1 = [1 -0.683]; a2 = [1 -1.4461 0.7957];

b = b0*conv(b1,b2); a = conv(a1,a2);

[h,w] = freqz(b,a,'whole',2001);

dB 単位表記の振幅応答をプロットします。

plot(w/pi,20*log10(abs(h)))

set(gca,'ylim',[-100 20],'xtick',0:.5:2)
xlabel 'Normalized Frequency (\times\pi rad/sample)'
ylabel 'Magnitude (dB)'

2 次セクション型の周波数応答

次の伝達関数で記述される 3 次の IIR ローパス フィルターの振幅応答を計算し、表示します。

$$H(z)=\frac{0.05634(1+z^{-1})(1-1.0166z^{-1}+z^{-2})}
            {(1-0.683z^{-1})(1-1.4461z^{-1}+0.7957z^{-2})}.$$

2 次セクション型で伝達関数を表します。単位円全体を 2,001 個に分割する点の周波数応答を求めます。

b0 = 0.05634;
b1 = [1  1];     b2 = [1 -1.0166 1];
a1 = [1 -0.683]; a2 = [1 -1.4461 0.7957];

sos1 = [b0*[b1 0] [a1 0]]; sos2 = [b2 a2];

[h,w] = freqz([sos1;sos2],'whole',2001);

dB 単位表記の振幅応答をプロットします。

plot(w/pi,20*log10(abs(h)))

set(gca,'ylim',[-100 20],'xtick',0:.5:2)
xlabel 'Normalized Frequency (\times\pi rad/sample)'
ylabel 'Magnitude (dB)'

FIR フィルターの周波数応答

$\beta=8$ のカイザー ウィンドウを使用して次数 80 の FIR ローパス フィルターを設計します。正規化されたカットオフ周波数、 $0.5\pi$ ラジアン/サンプルを指定します。フィルターの振幅応答と位相応答を表示します。

b = fir1(80,0.5,kaiser(81,8));
freqz(b,1)

designfilt を使用して同じフィルターを設計します。fvtool を使用して、その振幅応答と位相応答を表示します。

d = designfilt('lowpassfir','FilterOrder',80, ...
               'CutoffFrequency',0.5,'Window',{'kaiser',8});
freqz(d)

FIR バンドパス フィルターの周波数応答

$0.35\pi$ $0.8\pi$ ラジアン/サンプルの通過帯域と 3 dB のリップルをもつ FIR バンドパス フィルターを設計します。最初の阻止帯域は $0$ ~ $0.1\pi$ ラジアン/サンプルで、減衰量 40 dB をもちます。2 番目の阻止帯域は $0.9\pi$ ラジアン/サンプルからナイキスト周波数で、減衰量 30 dB をもちます。周波数応答を計算します。線形単位と dB の両方で振幅をプロットします。通過帯域を強調表示します。

sf1 = 0.1; pf1 = 0.35; pf2 = 0.8; sf2 = 0.9; pb = linspace(pf1,pf2,1e3)*pi;

bp = designfilt('bandpassfir', ...
    'StopbandAttenuation1',40, 'StopbandFrequency1',sf1,...
    'PassbandFrequency1',pf1,'PassbandRipple',3,'PassbandFrequency2',pf2, ...
    'StopbandFrequency2',sf2,'StopbandAttenuation2',30);

[h,w] = freqz(bp,1024); hpb = freqz(bp,pb);

subplot(2,1,1), plot(w/pi,abs(h),pb/pi,abs(hpb),'.-'), axis([0 1 -1 2])
l1 = legend('Response','Passband'); set(l1,'location','south','box','off')
xlabel('Normalized Frequency (\times\pi rad/sample)'), ylabel('Magnitude')

subplot(2,1,2), plot(w/pi,db(h),pb/pi,db(hpb),'.-'), axis([0 1 -60 10])
l2 = legend('Response','Passband'); set(l2,'location','south','box','off')
xlabel('Normalized Frequency (\times\pi rad/sample)'), ylabel('Magnitude (dB)')

入力引数

すべて展開する

b,a — 伝達関数の係数ベクトル

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

H(ejω)=B(ejω)A(ejω)=b(1)+b(2)ejω+b(3)ej2ω++b(M)ej(M1)ωa(1)+a(2)ejω+a(3)ej2ω++a(N)ej(N1)ω.

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

データ型: double | single
複素数のサポート: はい

n — 評価点の数512 (既定値) | 正の整数スカラー

評価点の数。2 以上の正の整数スカラーとして指定。n がない場合の既定値は 512 です。

データ型: double

sos — 2 次セクション型の係数行列

2 次セクション型の係数。行列として指定。sos は K 行 6 列の行列で、セクション数 K が 2 以上でなければなりません。セクション数が 2 未満の場合、freqz は入力を分子ベクトルと見なします。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 | single
複素数のサポート: はい

d — デジタル フィルターdigitalFilter オブジェクト

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

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

fs — サンプルレート正のスカラー

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

データ型: double

w — 角周波数ベクトル

角周波数。ラジアン/サンプル単位のベクトルとして指定。w は少なくとも 2 つの要素をもたなければなりません。w = π はナイキスト周波数に対応します。

f — 周波数ベクトル

周波数。ベクトルとして指定。f は少なくとも 2 つの要素をもたなければなりません。時間の単位が秒の場合、f は Hz で表されます。

データ型: double

出力引数

すべて展開する

h — 周波数応答ベクトル

ベクトルとして返される周波数応答。n を指定している場合は、h の長さは n になります。n を指定していないか、n を空ベクトルとして指定している場合には、h の長さは 512 になります。

w — 角周波数ベクトル

ベクトルとして返される角周波数。w は 0 ~π の値を取ります。入力に 'whole' を指定すると、w の値の範囲は 0 ~ 2π になります。n を指定している場合は、h の長さは n になります。n を指定していないか、n を空ベクトルとして指定している場合には、w の長さは 512 になります。

f — 周波数ベクトル

Hz 表記のベクトルとして返される周波数。f は 0 ~fs/2 Hz の値を取ります。入力に 'whole' を指定している場合、f の値の範囲は 0 ~ fs Hz になります。n を指定している場合は、h の長さは n になります。n を指定していないか、n を空ベクトルとして指定している場合には、f の長さは 512 になります。

詳細

すべて展開する

アルゴリズム

デジタル フィルターの周波数応答は、z = e で計算した伝達関数として解釈されます (参考文献 [1])。

freqz では、ユーザーが指定した実数または複素数の分子多項式や分母多項式から、伝達関数が決定されます。次に、デジタル フィルターの複素周波数応答 H (e) が返されます。周波数応答は、使用した構文によって決定されたサンプル点で計算されます。

freqz では、入力引数として周波数ベクトルを指定しなかった場合、FFT アルゴリズムを使用して周波数応答が計算されます。周波数応答は伝達された分子係数と分母係数の比として計算され、希望する長さになるように 0 が付加されます。

周波数ベクトルを入力引数として指定すると、freqz では入れ子の多項式計算の Horner 法を使用して、各周波数点で多項式が計算され、分子の応答が分母の応答で除算されます。

参照

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

この情報は役に立ちましたか?