ドキュメンテーション

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

kaiserord

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

構文

[n,Wn,beta,ftype] = kaiserord(f,a,dev)
[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)
c = kaiserord(f,a,dev,fs,'cell')

説明

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

[n,Wn,beta,ftype] = kaiserord(f,a,dev) は、入力仕様 fa および dev を満たす近似次数 n、正規化周波数帯域エッジ Wn および重みを求めます。f は帯域エッジを表すベクトルであり、af で定義される帯域における目的の振幅を指定するベクトルです。f の長さは、a の長さの 2 倍から 2 を引いたものです。fa の双方によって、任意の一定区分における応答関数が定義されます。deva と同じサイズのベクトルで、これは出力フィルターの周波数応答と望ましい振幅との間の誤差または偏移の最大許容範囲を各帯域に対し指定します。dev では、通過帯域のリップルと阻止帯域の減衰量を指定します。dev の各エントリは正の数で、フィルターのゲインの絶対値を表します (デシベル単位ではありません)。

メモ:

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

fir1 では、結果として得られる次数 n、周波数ベクトル Wn、マルチバンドの振幅タイプ ftype、およびカイザー ウィンドウ パラメーター beta を使用できます。出力引数 ftype は、fir1 と共に使用し、ハイパス フィルターの場合は 'high'、帯域遮断フィルターの場合は 'stop' です。マルチバンド フィルターの場合、最初の帯域が阻止帯域 (f = 0 で始まる) の場合は 'DC-0'、最初の帯域が通過帯域の場合は 'DC-1' です。

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

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

メモ:

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

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

すべて折りたたむ

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)

奇数長のバンドパス フィルターを設計します。奇数長は偶数の次数を意味するため、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 のサンプルレートをもつローパス フィルターを設計します。'cell' オプションを使用して等価フィルターを設計します。

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

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

hfvt = fvtool(b,1,bcell,1);
legend(hfvt,'b','bcell')

ヒント

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

アルゴリズム

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

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

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

ここで、α = –20log10δ は、デシベル単位表記の阻止帯域の減衰量です (δp = δs が必要であることに注意してください)。

設計公式は、次のように表されます。

n=α7.952.285(Δω)

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

参考文献

[1] 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.

[2] 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, pp. 123–126.

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

拡張機能

参考

| |

R2006a より前に導入