ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

ミニマックス FIR フィルターの設計

この例では、一般化された Remez FIR フィルター設計関数の主要機能のいくつかの使い方を示します。この関数は、firpm に含まれているすべての機能に加え、ここに示す多くの追加機能を提供します。

重み付きチェビシェフ設計

これは、重み付きチェビシェフ設計を示したものです。この例は、FIRPM との FIRGR の互換性を示しています。

N = 22;             % Filter order
F = [0 0.4 0.5 1];  % Frequency vector
A = [1 1 0 0];      % Magnitude vector
W = [1 5];          % Weight vector
b = firgr(N,F,A,W);
fvtool(b,'Color','White');

以下は、タイプ 4 フィルター (奇数次数、非対称) が明示的に指定されている重み付きチェビシェフ設計です。

N = 21;             % Filter order
F = [0 0.4 0.5 1];  % Frequency vector
A = [0 0 1 1];      % Magnitude vector
W = [2 1];          % Weight vector
b = firgr(N,F,A,W,'4');
fvtool(b,'Color','White');

"最小二乗法類似" 設計

以下は、"最小二乗類似" 設計を示しています。ユーザーが指定した周波数応答関数 (taperedresp.m) を使用して誤差の重みが付けられます。

N = 53;                                  % Filter order
F = [0 0.3 0.33 0.77 0.8 1];             % Frequency vector
fresp = {@taperedresp, [0 0 1 1 0 0]};  % Frequency response function
W = [2 2 1];                             % Weight vector
b = firgr(N,F,fresp,W);
fvtool(b,'Color','White');

特定の単一点帯域に対して設計されたフィルター

これは、指定された単一点帯域に対して設計されたフィルターを示したものです。周波数点 f=0.25 および f=0.55 は、単一帯域点です。これらの点にはゼロに近づくゲインがあります。

他の帯域エッジは正規です。

N = 42;                               % Filter order
F = [0 0.2 0.25 0.3 0.5 0.55 0.6 1];  % Frequency vector
A = [1 1 0 1 1 0 1 1];                % Magnitude vector
S = {'n' 'n' 's' 'n' 'n' 's' 'n' 'n'};
b = firgr(N,F,A,S);
fvtool(b,'Color','White');

特定の帯域内値に対して設計されたフィルター

これは、指定された帯域内値に対して設計されたフィルターを示したものです。値は、f=0.06 に指定されている値 0.0 に強制的に設定されます。

これは、60 Hz の除去に使用できます (Fs = 2 kHz)。0.055 における帯域エッジは次の帯域に接触するので不定です。

N = 82;                         % Filter order
F = [0 0.055 0.06 0.1 0.15 1];  % Frequency vector
A = [0 0 0 0 1 1];              % Magnitude vector
S = {'n' 'i' 'f' 'n' 'n' 'n'};
b = firgr(N,F,A,S);
fvtool(b,'Color','White', 'MagnitudeDisplay', 'Zero-phase');

特定の複数の独立した近似誤差を使用したフィルター設計

これは、複数の独立した近似誤差を使用したフィルターの設計例です。この手法は、エクストラリップル フィルターや最大リップル フィルターを直接設計するために使用されます。

これらのフィルターの特徴として、局所的に最小な遷移領域幅の存在があります。さらに、これらの設計は一般的に非常にすばやく収束します。

N = 12;             % Filter order
F = [0 0.4 0.5 1];  % Frequency vector
A = [1 1 0 0];      % Magnitude vector
W = [1 1];          % Weight vector
E = {'e1' 'e2'};    % Approximation errors
b = firgr(N,F,A,W,E);
fvtool(b,'Color','White');

エクストラリップル バンドパス フィルター

これは、2 つの独立した近似誤差をもつエクストラリップル バンドパス フィルターを示したものです。1 つの近似誤差は 2 つの通過帯域によって共有されており、もう 1 つは阻止帯域 (青) 用です。比較のため、標準の重み付きチェビシェフ設計もプロットされています (緑)。

N = 28;                     % Filter order
F = [0 0.4 0.5 0.7 0.8 1];  % Frequency vector
A = [1 1 0 0 1 1];          % Magnitude vector
W = [1 1 2];                % Weight vector
E = {'e1','e2','e1'};       % Approximation errors
b1 = firgr(N,F,A,W,E);
b2 = firgr(N,F,A,W);
fvtool(b1,1,b2,1,'Color','White');

3 つの独立した誤差を使用した帯域内ゼロ フィルターの設計

ここでは、3 つの独立した誤差を使用して帯域内ゼロの例を再設計します。

メモ:強制された帯域内値をもつ設計を収束させるには、独立した近似誤差の使用が必要になる場合があります。そうしないと、多項式の近似が非常に劣決定になるためです。前者の設計は緑で表示されています。

N = 82;                         % Filter order
F = [0 0.055 0.06 0.1 0.15 1];  % Frequency vector
A = [0 0 0 0 1 1];              % Magnitude vector
S = {'n' 'i' 'f' 'n' 'n' 'n'};
W = [10 1 1];                   % Weight vector
E = {'e1' 'e2' 'e3'};           % Approximation errors
b1 = firgr(N,F,A,S,W,E);
b2 = firgr(N,F,A,S);
fvtool(b1,1,b2,1,'Color','White');

遷移領域異常の確認

'check' オプションを使用すると、設計中のフィルターの遷移領域の異常に気付くことができます。ここでは、異常のあるフィルター例を示しています。'check' オプションは、この異常のいずれかを警告します。結果としてベクトル res.edgeCheck も得られます。このベクトル内のゼロの値の要素は、異常の可能性がある位置を示しています。"-1" のエントリは、確認されなかったエッジに対するものです (f=0 または f=1 での異常はあり得ません。)。

N = 44;                     % Filter order
F = [0 0.3 0.4 0.6 0.8 1];  % Frequency vector
A = [1 1 0 0 1 1];          % Magnitude vector
b = firgr(N,F,A,'check');
fvtool(b,'Color','White');
Warning: Probable transition-region anomalies.  Verify with freqz. 

最小フィルター次数の判断

FIRPM アルゴリズムは、仕様を満たした最初の反復に到達するまで繰り返しフィルターを設計します。仕様は、必要な制約をすべて満足したときに満たされます。'minorder' を指定すると、FIRPMORD を使用して初期推定が求められます。最小、偶数次数または最小、奇数次数フィルター設計をそれぞれ取得するための 'mineven' と 'minodd' も用意されています。

F = [0 0.4 0.5 1];  % Frequency vector
A = [1 1 0 0];      % Magnitude vector
R = [0.1 0.02];     % Deviation (ripple) vector
b = firgr('minorder',F,A,R);
fvtool(b,'Color','White', 'MagnitudeDisplay', 'Zero-phase');

微分器とヒルベルト変換器

最小次数機能を使用する場合は、フィルター次数の初期推定を行うことができます。その場合、FIRPMORD は使用されません。これは、微分器やヒルベルト変換器などの、firpmord がサポートしていないフィルターや、ユーザーの指定した周波数応答関数に必要になります。

N = {'mineven',18}; % Minimum even-order, start order estimate at 18
F = [0.1 0.9];      % Frequency vector
A = [1 1];          % Magnitude vector
R = 0.1;            % Deviation (ripple)
b = firgr(N,F,A,R,'hilbert');
fvtool(b,'Color','White', 'FrequencyRange', '[0, 2pi)');

内挿フィルターの設計

この節では、内挿フィルターを使用して、帯域制限された信号を整数ファクターによってアップサンプリングする例を示します。通常、この目的には Signal Processing Toolbox™ の INTFILT(R,L,ALPHA) を使用します。ただし、INTFILT には FIRGR のような柔軟性が設計にもたらされません。

N = 30;                     % Filter order
F = [0 0.1 0.4 0.6 0.9 1];  % Frequency vector
A = [4 4 0 0 0 0];          % Magnitude vector
W = [1 100 100];            % Weight vector
b = firgr(N,F,A,W);
fvtool(b,'Color','White');

FIRPM と INTFILT の比較

ここでは、FIRPM を使用して設計されたフィルター (青) と、INTFILT を使用して設計された 30 次のフィルター (緑) を示しています。

firpm で重み付き関数を使用することで、最小の阻止帯域の減衰を 20dB 近く改善できることに注目してください。

b2=intfilt(4, 4, 0.4);
fvtool(b,1,b2,1,'Color','White');

ここで、2 番目の阻止帯域の等リップル減衰は、INTFILT を使用して設計されたフィルターの最小の阻止帯域の減衰よりも約 6dB 大きいことに注目してください。

また、通過帯域リップルは、INTFILT を使用して設計されたフィルターのリップルよりは大きいですが、それでも非常に小さいことにも注目してください。

最小位相ローパス フィルターの設計

ここでは最小位相ローパス フィルターを示しています。

N = 42;             % Filter order
F = [0 0.4 0.5 1];  % Frequency vector
A = [1 1 0 0];      % Magnitude vector
W = [1 10];        % Weight-constraint vector
b = firgr(N,F,A,W, {64},'minphase');
hfvt = fvtool(b,'Color','White');

極/零点プロットは、単位円の外部にルートがないことを示しています。

set(hfvt, 'Analysis', 'polezero');

この情報は役に立ちましたか?