ドキュメンテーション

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

firpmord

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

構文

[n,fo,ao,w] = firpmord(f,a,dev)
[n,fo,ao,w] = firpmord(f,a,dev,fs)
c = firpmord(f,a,dev,fs,'cell')

説明

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

  • f は、周波数帯域エッジ (0 ~ Fs/2 で Fs はサンプリング周波数) のベクトルであり、af によって定義される帯域上の希望する振幅を指定するベクトルです。f の長さは a の長さの 2 倍から 2 を引いたものです。希望する関数は区分定数です。

  • dev は、周波数応答と各帯域に対する出力フィルターの希望する振幅間の最大許容偏差またはリップルを指定する、a と同じサイズのベクトルです。

firpmord の入力パラメーター fa、および dev によって与えられる仕様をほぼ満たすフィルター b を設計するには、結果として得られる次数 n、周波数ベクトル fo、振幅応答ベクトル ao、および重み w で、firpm を使用します。

b = firpm(n,fo,ao,w)

[n,fo,ao,w] = firpmord(f,a,dev,fs) はサンプリング周波数 fs を指定します。fs の既定の設定は 2 Hz であり、これはナイキスト周波数が 1 Hz であることを示します。特定のアプリケーションのサンプリング周波数に対してスケーリングされた帯域エッジを指定することができます。

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

メモ:

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

すべて折りたたむ

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

rp = 3;           % Passband ripple
rs = 40;          % Stopband ripple
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')

このフィルターでは、阻止帯域の減衰量および通過帯域のリップルがわずかに仕様を満たしていません。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)

アルゴリズム

firpmord では、参考文献 [1] に記述されているアルゴリズムが使用されます。この手法は 0 またはナイキスト周波数 fs/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 より前に導入