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

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

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

FIR ハーフバンド フィルターの設計

この例では、FIR ハーフバンド フィルターの設計法を示します。ハーフバンド フィルターは、マルチレート信号処理アプリケーションにおいて 2 の係数で内挿または間引きする際に幅広く使用されます。ハーフバンド フィルターは、ポリフェーズの形式で効率的に実装されます。その理由は、その係数の約半分がゼロに等しくなるためです。

ハーフバンド フィルターには 2 つの重要な特徴があります。つまり、通過帯域リップルと阻止帯域リップルは同じでなければならず、通過帯域エッジと阻止帯域エッジの周波数はハーフバンド周波数 pi/2 から等距離になければなりません。

この例では、与えられた次数の FIR ハーフバンド フィルターに加え、最小次数と最小位相のフィルターを設計します。最小位相設計は、完全再構成 2 チャネル フィルター バンクに特に役立ちます。

ウィンドウを適用したインパルス応答設計

ウィンドウを適用したインパルス応答設計は、偶数次数と適切な奇数長のウィンドウを単に指定することで得られます。この場合、通過帯域エッジ周波数を指定することはできません。この周波数は、指定した次数とウィンドウの結果によって決定されます。

N = 90;                            % Filter order must be even
d = fdesign.halfband('Type','Lowpass','N',N);
f = design(d,'window','Window','hamming','SystemObject',true);

通過帯域リップルと阻止帯域リップルが同じであることを確認できます。

hfvt = fvtool(f, 'MagnitudeDisplay', 'Zero-phase','Color', [1 1 1]);

1 つおきの係数がゼロに等しい (中央の係数を除く) ことを示したインパルス応答

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

遷移幅の制御

偶数次数のほかに、フィルターの遷移幅も指定できます。

TW = 0.05; % Transition width
d = fdesign.halfband('Type','Lowpass','N,TW',N,TW);
f1 = design(d,'equiripple','SystemObject',true); % Equiripple design
f2 = design(d,'firls','SystemObject',true);      % Least-squares design
f3 = design(d,'kaiserwin','SystemObject',true);  % Kaiser-window design

通過帯域リップルと阻止帯域リップルが同じであることを確認できます。

hfvt = fvtool(f1,f2,f3,'Color','white', ...
    'MagnitudeDisplay', 'Magnitude');
legend(hfvt, 'Equiripple design', 'Least-squares design', ...
    'Kaiser-window design')

1 つおきの係数がゼロのインパルス応答

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

阻止帯域の減衰の制御

代わりに次数と阻止帯域の減衰を指定することもできます。たとえば、以下のようなものがあります。

Ast  = 60; % Minimum stopband attenuation
d  = fdesign.halfband('Type','Lowpass','N,Ast',N,Ast);
f1 = design(d,'equiripple','SystemObject',true); % Equiripple design
f2 = design(d,'kaiserwin','SystemObject',true);  % Kaiser-window design
hfvt = fvtool(f1,f2,'Color','white');
legend(hfvt, 'Equiripple design', 'Kaiser-window design')

通過帯域エッジと阻止帯域エッジの周波数は設計の結果として得られます。

set(hfvt, 'MagnitudeDisplay', 'Zero-phase');

1 つおきの係数がゼロのインパルス応答

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

最小次数設計

等リップル ハーフバンド フィルターを設計するもう 1 つの方法として、遷移幅と阻止帯域リップルを指定する方法があります。この場合、フィルターの次数を指定することはできません (自由度が 2 つしかないためです)。代わりに、設計の仕様を満たす最小次数のフィルターが得られます。

TW = 0.02; % Transition width
Ast = 40;  % 40 dB of attenuation in the stopband
d  = fdesign.halfband('Type','Lowpass','TW,Ast',TW,Ast);
f1 = design(d,'equiripple','SystemObject',true); % Equiripple design
f2 = design(d,'kaiserwin','SystemObject',true);  % Kaiser-window design
hfvt = fvtool(f1,f2,'Color','white');
legend(hfvt, 'Equiripple Design', 'Kaiser-window design')

阻止帯域の減衰が増大する等リップル設計

阻止帯域で減衰を増やす必要がある場合は、等リップル設計の設計オプションを使用してこれを達成できます。

f1 = design(d,'equiripple','StopbandShape','1/f','StopbandDecay',4,...
    'SystemObject',true);
f2 = design(d,'equiripple','StopbandShape','linear', ...
    'StopbandDecay',53.333,'SystemObject',true);
hfvt = fvtool(f1,f2,'Color','white');
legend(hfvt,'Stopband decaying as (1/f)^4','Stopband decaying linearly')

ハイパス ハーフバンド フィルター

ハイパス ハーフバンド フィルターは、ローパス ハーフバンド フィルターの 1 つおきの係数の符号を変更することで、ローパス ハーフバンド フィルターから取得できます。あるいは、'Type' プロパティを 'Highpass' に設定することで、ハイパス ハーフバンドを直接設計することもできます。

d  = fdesign.halfband('Type','Highpass','TW,Ast',TW,Ast);
f1 = design(d,'equiripple','StopbandShape','linear', ...
    'StopbandDecay',53.333,'SystemObject',true);
hfvt = fvtool(f1,f2,'Color','white');
legend(hfvt, 'Highpass halfband filter', 'Lowpass halfband filter')

最小位相等リップル設計

最小位相設計は、FIR フィルターのみで構成される完全再構成 2 チャネル フィルター バンクに役立ちます。この場合、最小位相フィルター自体はハーフバンド フィルターではありません。むしろ、ハーフバンド フィルターのスペクトル因子となります。

N = 51;                       % Minimum-phase order must be odd
TW = 0.04;                    % Transition width
d = fdesign.halfband('Type','Lowpass','N,TW',N,TW);
f = design(d,'equiripple','MinPhase',true,'SystemObject',true);

この場合、通過帯域リップルと阻止帯域リップルは異なることに注意してください。

fvtool(f,'Color','white', 'MagnitudeDisplay', 'Zero-phase');

最小位相フィルターのゼロはすべて単位円の中にあります。

fvtool(f,'Color','white', 'Analysis', 'polezero');

最小位相フィルター自体はハーフバンド フィルターではありません。1 つおきの係数がゼロではないためです。

fvtool(f,'Color','white', 'Analysis', 'impulse');

対応するハーフバンド フィルターは、その逆バージョン (最大位相スペクトル因子) を使用してインパルス応答をたたみ込むことで得られます。

fmin = f.Numerator;           % Minimum-phase spectral factor
fmax = fliplr(fmin);          % Maximum-phase spectral factor
hhalf = conv(fmin,fmax);      % Halfband filter with non-negative zerophase

インパルス応答の 1 つおきの係数はゼロになります。

hfvt = fvtool(hhalf, 'Analysis', 'impulse','Color','white');

非負のゼロ位相をもつハーフバンド フィルター

set(hfvt, 'Analysis', 'Magnitude', 'MagnitudeDisplay', 'Zero-phase');

「完全再構成 2 チャネル フィルター バンク」も参照してください。

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