Main Content

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

freqz

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

説明

[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 でサンプリングした信号をフィルター処理するために設計されたデジタル フィルターに対して周波数応答ベクトル h と対応する物理周波数ベクトル f が返されます。

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

h = freqz(___,w) では、w で提供される正規化周波数で評価された周波数応答ベクトル h が返されます。

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

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

すべて折りたたむ

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

H(z)=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)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

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

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

H(z)=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)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

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

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

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

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

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

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

Figure Filter Visualization Tool - Magnitude Response (dB) and Phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) and Phase Response contains an object of type line.

0.35π0.8π ラジアン/サンプルの通過帯域と 3 dB のリップルをもつ FIR バンドパス フィルターを設計します。最初の阻止帯域は 00.1π ラジアン/サンプルで、減衰量 40 dB をもちます。2 番目の阻止帯域は 0.9π ラジアン/サンプルからナイキスト周波数で、減衰量 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])
legend('Response','Passband','Location','South')
ylabel('Magnitude')

subplot(2,1,2)
plot(w/pi,db(h),pb/pi,db(hpb),'.-')
axis([0 1 -60 10])
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Response, Passband. Axes 2 contains 2 objects of type line.

入力引数

すべて折りたたむ

伝達関数の係数。ベクトルで指定します。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
複素数のサポート: あり

評価点の数。2 以上の正の整数スカラーとして指定します。n がない場合の既定値は 512 です。最適な結果を得るため、n をフィルター次数よりも大きい値に設定します。

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

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

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

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

データ型: double

角周波数。ラジアン/サンプル単位のベクトルとして指定します。w は少なくとも 2 つの要素をもたなければなりません。そうでない場合は関数が n として解釈するためです。w = π はナイキスト周波数に相当します。

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

データ型: double

出力引数

すべて折りたたむ

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

freqz への入力が単精度の場合、関数によって周波数応答が単精度演算で計算されます。出力 h は単精度です。

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

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

アルゴリズム

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

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

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

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

参照

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

拡張機能

R2006a より前に導入