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 object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) 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 object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) 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 objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

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

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

Figure Figure 1: Magnitude Response (dB) and Phase Response contains an axes object. The axes object with title Magnitude Response (dB) and Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) 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 objects. Axes object 1 with ylabel Magnitude contains 2 objects of type line. These objects represent Response, Passband. Axes object 2 with xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains 2 objects of type line.

入力引数

すべて折りたたむ

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

評価点の数。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 になります。

周波数。ヘルツ表記でベクトルとして返されます。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 より前に導入

すべて展開する