Main Content

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

firpmord

Parks-McClellan 最適 FIR フィルターの次数推定

説明

[n,fo,ao,w] = firpmord(f,a,dev) では、入力仕様 fa、および dev を満たす近似次数 n、正規化周波数帯域エッジ fo、周波数帯域振幅 ao、および重み w が返されます。

[___] = firpmord(___,fs) はサンプリング周波数 fs を指定します。fs の既定の設定は 2 Hz であり、これはナイキスト周波数が 1 Hz であることを示します。特定のアプリケーションのサンプル レートにスケーリングした帯域エッジを指定できます。前の入力構文のいずれでもこれを使用できます。

c = firpmord(___,'cell') では、要素がfirpmに対するパラメーターとなる cell 配列 c が返されます。

すべて折りたたむ

500 Hz の通過帯域カットオフ周波数および 600 Hz の阻止帯域カットオフ周波数をもつ最小次数ローパス フィルターを設計します。サンプリング周波数を 2,000 Hz に指定します。阻止帯域の減衰量を 40 dB 以上、通過帯域のリップルを 3 dB 未満に指定する必要があります。

rp = 3;           % Passband ripple in dB 
rs = 40;          % Stopband ripple in dB
fs = 2000;        % Sampling frequency
f = [500 600];    % Cutoff frequencies
a = [1 0];        % Desired amplitudes

偏差を線形単位に変換します。フィルターを設計し、その振幅応答と位相応答を可視化します。

dev = [(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)]; 
[n,fo,ao,w] = firpmord(f,a,dev,fs);
b = firpm(n,fo,ao,w);
freqz(b,1,1024,fs)
title('Lowpass Filter Designed to Specifications')

Figure contains 2 axes. Axes 1 with title Lowpass Filter Designed to Specifications contains an object of type line. Axes 2 contains an object of type line.

このフィルターでは、阻止帯域の減衰量および通過帯域のリップルがわずかに仕様を満たしていません。firpm への呼び出しに n の代わりに n+1 を使用すると、目的の振幅特性を実現できます。

1,500 Hz の通過帯域カットオフ周波数および 2,000 Hz の阻止帯域カットオフ周波数をもつローパス フィルターを設計します。サンプリング周波数を 8,000 Hz に指定します。最大阻止帯域振幅を 0.1、最大通過帯域誤差 (リップル) を 0.01 に指定する必要があります。

[n,fo,ao,w] = firpmord([1500 2000],[1 0],[0.01 0.1],8000);
b = firpm(n,fo,ao,w);

firpmord を使用して cell 配列を生成しても同じ結果を得ることができます。フィルターの周波数応答を可視化します。

c = firpmord([1500 2000],[1 0],[0.01 0.1],8000,'cell');
B = firpm(c{:});
freqz(B,1,1024,8000)

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

入力引数

すべて折りたたむ

周波数帯域エッジ。実数値のベクトルとして指定します。引数は、[0, Fs/2] の範囲でなければなりません。ここで、Fs はナイキスト周波数です。ベクトルの要素数は、常に 2 の倍数になります。周波数は増加する順でなければなりません。

f に含まれる点での目的の振幅。ベクトルとして指定します。f および a は条件 length(f) = 2length(a)–2 を満たさなければなりません。希望する関数は区分定数です。

最大許容偏差。ベクトルとして指定します。deva と同じサイズになります。周波数応答と各帯域に対する出力フィルターの目的の振幅間の最大許容偏差またはリップルを指定します。

サンプル レート。実数スカラーとして指定します。

出力引数

すべて折りたたむ

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

正規化周波数点。実数値のベクトルとして指定します。引数は、[0, 1] の範囲でなければなりません。ここで、1 はナイキスト周波数に対応します。ベクトルの要素数は、常に 2 の倍数になります。周波数は増加する順でなければなりません。

振幅応答。実数値のベクトルとして返されます。

各周波数帯域の適合の調整に使用される重み付け。実数値ベクトルとして指定します。w の長さは、f および a の長さの半分になるため、帯域ごとに厳密に 1 つの重みが存在します。

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

アルゴリズム

firpmord では、参考文献[1]に記述されているアルゴリズムが使用されます。この関数は、0 またはナイキスト周波数 fs/2 の近くの帯域エッジでは不正確な結果を生成します。

メモ

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

参照

[1] Rabiner, Lawrence R., and Otto Herrmann. “The Predictability of Certain Optimum Finite-Impulse-Response Digital Filters.” IEEE® Transactions on Circuit Theory. Vol. 20, Number 4, 1973, pp. 401–408.

[2] Rabiner, Lawrence R., and Bernard Gold. Theory and Application of Digital Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1975, pp. 156–157.

拡張機能

R2006a より前に導入