Main Content

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

kaiserord

カイザー ウィンドウ FIR フィルター設計の推定パラメーター

説明

[n,Wn,beta,ftype] = kaiserord(f,a,dev) では、フィルター次数 n、正規化周波数帯域エッジ Wn、および関数 fir1 で使用するカイザー ウィンドウを指定する形状係数 beta が返されます。fa、および dev によって指定される仕様を近似的に満たす FIR フィルター b を設計するには、b = fir1(n,Wn,kaiser(n+1,beta),ftype,'noscale') を使用します。

[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs) は、fs Hz のサンプル レートを使用します。

c = kaiserord(f,a,dev,fs,'cell') では、要素が fir1 に対するパラメーターとなる cell 配列が返されます。

すべて折りたたむ

0 ~ 1 kHz の通過帯域と 1500 Hz~ 4 kHz の阻止帯域をもつ、ローパス フィルターを設計します。5% の通過帯域リップルと 40 dB の阻止帯域の減衰量を指定します。

fsamp = 8000;
fcuts = [1000 1500];
mags = [1 0];
devs = [0.05 0.01];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');

freqz(hh,1,1024,fsamp)

奇数長のバンドパス フィルターを設計します。奇数長は偶数の次数を意味するため、fir1 への入力は、偶数の整数でなければならないことに注意してください。

fsamp = 8000;
fcuts = [1000 1300 2210 2410];
mags = [0 1 0];
devs = [0.01 0.05 0.01];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
n = n + rem(n,2);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');

[H,f] = freqz(hh,1,1024,fsamp);
plot(f,abs(H))
grid

1500 Hz の通過帯域カットオフ、2000 Hz の阻止帯域カットオフ、0.01 の通過帯域リップル、0.1 の阻止帯域リップルおよび 8000 Hz のサンプル レートをもつローパス フィルターを設計します。

fs = 8000;
[n,Wn,beta,ftype] = kaiserord([1500 2000],[1 0],...
    [0.01 0.1],fs);
b = fir1(n,Wn,ftype,kaiser(n+1,beta),"noscale");
freqz(b,1,[],fs)

"cell" オプションを使用して等価フィルターを設計します。

c = kaiserord([1500 2000],[1 0],[0.01 0.1],fs,"cell");
bcell = fir1(c{:});
freqz(bcell,1,[],fs)

入力引数

すべて折りたたむ

帯域エッジ。ベクトルとして指定します。f の長さは 2*length(a)-2 です。

帯域振幅。ベクトルとして指定します。振幅は f によって定義される帯域で指定されます。fa の双方によって、区分的に一定な応答関数を定義します。

ベクトルとして指定した最大許容偏差。dev は、出力フィルターの周波数応答と各帯域に対するその帯域振幅間の最大許容偏差を指定する、a と同じサイズのベクトルです。dev では、通過帯域のリップルと阻止帯域の減衰量を指定します。dev の各エントリは正の数値として指定し、フィルター ゲインの絶対値を表します (単位なし)。

サンプル レート。Hz 単位で測定される正のスカラーとして指定します。引数 fs を指定しない場合、または、空ベクトル [] として指定した場合、サンプル レートの既定値は 2 Hz、ナイキスト周波数は 1 Hz になります。この構文を使用して、特定のアプリケーションのサンプル レートにスケーリングした帯域エッジを指定します。f の周波数帯域エッジは、0 ~ fs/2 の範囲になければなりません。

出力引数

すべて折りたたむ

フィルター次数。正の整数として返されます。

正規化周波数帯域エッジ。実数ベクトルとして返されます。

形状係数。正の実数のスカラーとして返されます。パラメーター beta はウィンドウのフーリエ変換のサイドローブの減衰に影響を与えます。

フィルター タイプ。fir1 と共に使用します。以下として返されます。

  • 'low' — カットオフ周波数 Wn をもつローパス フィルター。

  • 'high' — カットオフ周波数 Wn をもつハイパス フィルター。

  • 'bandpass' — バンドパス フィルター (Wn が 2 要素ベクトルの場合)。

  • 'stop' — バンドストップ フィルター (Wn が 2 要素ベクトルの場合)。

  • 'DC-0' — マルチバンド フィルターの最初の帯域は阻止帯域です。

  • 'DC-1' — マルチバンド フィルターの最初の帯域は通過帯域です。

FIR パラメーター。cell 配列として返されます。

ヒント

  • フィルターの長さと次数の意味を混同しないように注意してください。フィルターの長さとは、FIR フィルターにおけるインパルス応答のサンプル数です。一般的に、フィルターの長さを L とした場合、インパルス応答のインデックスは n = 0 から n = L – 1 になります。フィルターの "次数" とは、フィルターを Z 変換表記した場合の最大の指数のことです。FIR の伝達関数の場合、この表記は z の多項式になり、最大の指数は zL–1、最小の指数は z0 となります。フィルターの次数は長さ (L – 1) よりも 1 小さく、z の多項式の零点の数と同じになります。

  • ベクトル dev で、帯域ごとに異なるリップルの変動を指定すると、カイザー ウィンドウ法は、全帯域でリップルの変動が最小になるようなフィルターを作成するように制限されているため、指定した最小の変動が使用されます。

  • 場合によっては、kaiserord によって次数 n が大きく、または小さく推定されることがあります。フィルターが仕様を満たさない場合には、n+1n+2 などの高めの次数、あるいは低めの次数を試してください。

  • カットオフ周波数が、0 かナイキスト周波数の近くにある場合、または、dev が大きい (10% を超える) 場合、結果は不正確になります。

アルゴリズム

一連の周波数領域の仕様が設定されると、kaiserord では、仕様を近似的に満たす最小 FIR フィルター次数が求められます。kaiserord では、与えられたフィルター仕様が通過帯域リップルおよび阻止帯域リップルに変換され、カットオフ周波数がウィンドウ適用後の FIR フィルター設計で要求される形式に変換されます。

kaiserord では、微分器やヒルベルト変換器と同様に、ローパス フィルターの次数推定に関する経験的に導かれた公式が使用されます。マルチバンド フィルター (バンドパス フィルターなど) に関する推定は、ローパス設計の公式から導かれます。

カイザー ウィンドウや、FIR フィルター設計への同ウィンドウの応用の基礎となる設計公式は、次のとおりです。

β={0.1102(α8.7),α>500.5842(α21)0.4+0.07886(α21),21α500,α<21

ここで、α = –20log10δ は、デシベル単位で表記される阻止帯域の減衰量です。

n=α7.952.285(Δω)

ここで、n はフィルター次数で、Δω は遷移領域の最小幅です。

参照

[1] Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds. Selected Papers in Digital Signal Processing. Vol. II. New York: IEEE Press, 1976.

[2] Kaiser, James F. “Nonrecursive Digital Filter Design Using the I0-Sinh Window Function.” Proceedings of the 1974 IEEE International Symposium on Circuits and Systems. 1974, pp. 20–23.

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

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入

参考

| |