ドキュメンテーション

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

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)
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 の場合に、分子と分母の多項式係数がそれぞれ 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 ローパス フィルターの振幅応答を計算し、表示します。

分子と分母を多項式の畳み込みとして表します。単位円全体を 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)')

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

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)')

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

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)

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

入力引数

すべて折りたたむ

伝達関数の係数。ベクトルで指定します。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 をフィルター次数よりも大きい値に設定します。

データ型: double

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
複素数のサポート: あり

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

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

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

データ型: double

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

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

データ型: double

出力引数

すべて折りたたむ

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

ベクトルとして返される角周波数。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 では入れ子の多項式計算の 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.

拡張機能

R2006a より前に導入