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

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

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

パラメトリック イコライザーの設計

この例では、パラメトリック イコライザー フィルターの設計法を示します。パラメトリック イコライザーは、音声信号の周波数成分を調整するためにオーディオで使用されるデジタル フィルターです。パラメトリック イコライザーは、ゲイン、中心周波数、および各フィルターの帯域幅を調整できるようにすることによって、グラフィック イコライザーよりも優れた機能を提供します。一方、グラフィック イコライザーは各フィルターのゲインのみ調整することができます。

通常、パラメトリック イコライザーは、2 次型 IIR フィルターとして設計されています。これらのフィルターには低次による欠点があります。フィルターは比較的大きいリップルまたは遷移領域を表すことができ、いずれかが直列に接続されている場合に、お互いに重複する場合があります。DSP System Toolbox™ には、高次 IIR パラメトリック イコライザーを設計する機能が用意されています。そのような高次設計では、各フィルターの形状をより詳細に管理できます。また、フィルターの次数が 2 に設定されている場合、設計は従来の 2 次型パラメトリック イコライザーに対して特殊なケースとなります。

標準設計

次の 2 つのパラメトリック イコライザーの設計を考えてみましょう。フィルターの次数を除いて、設計仕様は同じです。最初の設計は、信号を 6 dB で約 0.5*pi ラジアン/サンプル増加させる典型的な 2 次型パラメトリック イコライザーです。2 番目の設計は、4 次型フィルターと同じです。2 次型設計と比較した場合、4 次型フィルターが理想的な、急峻な特性をもつフィルターにどれだけ近づくかに注目してください。明らかに、フィルター次数をさらに増加することによって近似は改善されます。そのような改善された近似へ支払う代償として、乗数が必要になるほど実装コストは上がります。

f = fdesign.parameq('N,F0,BW,Gref,G0,GBW',2,0.5,0.2,0,6,6+10*log10(.5))
h = design(f);
f.FilterOrder = 4;
h1 = design(f);
hfvt = fvtool(h,h1,'Color','white');
legend(hfvt,'2nd-Order Design','4th-Order Design');
 
f =
 
               Response: 'Parametric Equalizer'
          Specification: 'N,F0,BW,Gref,G0,GBW' 
            Description: {6x1 cell}            
    NormalizedFrequency: true                  
            FilterOrder: 2                     
                     F0: 0.5                   
                     BW: 0.2                   
                   Gref: 0                     
                     G0: 6                     
                    GBW: 2.98970004336019      
                                               

設計パラメーターの 1 つは、フィルター帯域幅 BW です。ただし、希望の帯域幅だけでなく、この帯域幅が定義される参照ゲイン GBW も指定することに注意してください。この場合、フィルターのピーク振幅の 2 乗ゲインの半分、つまり 6 dB ゲインより小さい約 3.0103 dB になるように GBW を設定します。これは、振幅の 2 乗フィルター応答をプロットし、フィルターの帯域幅が 0.2*pi であるゲインがピーク振幅 2 乗の半分と等しいことを確かめることでわかります。

set(hfvt,'Filters',[h h1],'MagnitudeDisplay','Magnitude squared');
legend(hfvt,'2nd-Order Design','4th-Order Design');

クオリティ ファクターに基づく設計

別の共通設計パラメーターは、クオリティ ファクター Qa です。最初の例として、2 次型ピーク フィルターをクオリティ ファクター Qa=5 を使用して設計します。

N = 2;             % Filter Order
F0 = 0.2;          % Center Frequency
Qa = 5;            % Quality Factor
Gref = 0;          % Reference Gain (dB)
G0 = 10; % Gain at Center Frequency or Boost Gain (dB)

f = fdesign.parameq('N,F0,Qa,Gref,G0',N,F0,Qa,Gref,G0)
h1 = design(f);
 
f =
 
               Response: 'Parametric Equalizer'
          Specification: 'N,F0,Qa,Gref,G0'     
            Description: {5x1 cell}            
    NormalizedFrequency: true                  
            FilterOrder: 2                     
                     F0: 0.2                   
                     Qa: 5                     
                   Gref: 0                     
                     G0: 10                    
                                               

設計は、2 次型伝達関数の極から直接得られるフィルターのクオリティ ファクターを測定することで検証できます。測定オブジェクトが、振幅 2 乗値 G0 と Gref の幾何平均に対応する 5dB のゲイン GBW に対して参照された、0.037377 の線形帯域幅 BW をどのように返すかにも注意してください。

m = measure(h1)
 
m =
 
Sampling Frequency     : N/A (normalized frequency)
Center Frequency       : 0.2                       
Bandwidth              : 0.037377                  
Passband Bandwidth     : Unknown                   
Stopband Bandwidth     : Unknown                   
Flow                   : 0.18207                   
Fhigh                  : 0.21944                   
Bandwidth Gain         : 5 dB                      
Low Transition Width   : Unknown                   
High Transition Width  : Unknown                   
Reference Gain         : 0 dB                      
Center Frequency Gain  : 10 dB                     
Passband Gain          : Unknown                   
Stopband Gain          : Unknown                   
Quality Factor (audio) : 5                         
 

2 次型フィルター用の Qa によって定義された帯域幅を使用して、高次フィルターを設計できます。高次設計は、上記の同じゲイン GBW に参照される同じ帯域幅を維持しながら、鋭い遷移帯域をもつ設計になります。たとえば、以前に設計されたピーク フィルターの次数を 4 および 10 に増やします。

f.FilterOrder = 4;
h2 = design(f);
f.FilterOrder = 10;
h3 = design(f);
set(hfvt,'Filters',[h1 h2 h3],'MagnitudeDisplay','Magnitude (dB)');
axis([0 .5 -0.5 10.5])
legend(hfvt,'N=2','N=4','N=10')

オクターブ帯域幅に基づく設計

目的のオクターブ帯域幅は、クオリティ ファクター Qa に変換できます。たとえば、2 つの 2 次型ピーク フィルターをそれぞれ、0.5 および 1 オクターブ帯域幅に設計できます。

BWoct = 0.5; % Desired Octave Bandwidth
f.Qa = 0.5/( sinh(BWoct*(log(2)/2)*(F0*pi)/sin(F0*pi)));
h1 = design(f);

BWoct = 1; % Desired Octave Bandwidth
f.Qa = 0.5/( sinh(BWoct*(log(2)/2)*(F0*pi)/sin(F0*pi)));
h2 = design(f);

set(hfvt,'Filters',[h1 h2]);
legend(hfvt,'Octave BW=0.5','Octave BW=1')

カットするパラメトリック イコライザー

前の設計は、特定の周波数帯域で信号を増幅させるパラメトリック イコライザーの例です。指定した領域で信号をカットする (減衰させる) イコライザーも設計できます。

setspecs(f,'N,F0,BW,Gref,G0,GBW,Gp,Gst',6,0.3,0.1,0,-3,-2,-2.5,-0.5);
h = design(f);
set(hfvt,'Filters',h,'legend','off');
axis([0 1 -3 0.5])

この場合は、通過帯域のゲイン Gp および阻止帯域のゲイン Gst の両方を指定していることに注意してください。このパラメーターによって、通過帯域と阻止帯域間の遷移が急峻になることを利用して、通過帯域や阻止帯域内のリップルに対してフィルターを許可します。比較するために、リップルがない同じ次数のフィルターを考えてみましょう。トレードオフの結果として遷移幅が広くなることに注意してください。

setspecs(f,'N,F0,BW,Gref,G0,GBW',6,0.3,0.1,0,-3,-2);
h1 = design(f);
set(hfvt,'Filters',[h h1]);
axis([0 1 -3 0.5])

通過帯域でのみリップルを指定する、または阻止帯域でのみリップルを指定することも可能です。

最小次数設計

最初の設計に戻り、フィルター次数を手動で増加して急峻な特性をもつフィルターを近似する代わりに、そのような仕様を満たす目的の形状を指定し、最小次数のフィルターを設計することもできます。形状を指定するには、帯域幅 BW および対応するゲイン GBW に加え、通過帯域幅 BWp および対応するゲイン Gp を指定します。阻止帯域幅および対応するゲインを指定することも可能です。

f = fdesign.parameq('F0,BW,BWp,Gref,G0,GBW,Gp',...
    0.5,0.2,0.18,0,6,6+10*log10(.5),5.8);
h = design(f,'butter');

バタワース (可能な限り平坦となる) 設計が必要なことを指定したことに注目してください。通過帯域リップルを可能にする場合は、代わりにチェビシェフ I 型フィルターを設計できます。

h1 = design(f,'cheby1');
set(hfvt,'Filters',[h h1]);
legend(hfvt,'Butterworth Design','Chebyshev Type I Design', ...
    'Location','NorthEast');

この場合、リップルとフィルター次数の間でトレードオフが発生します。

bord = order(h)  % Order of Butterworth design
cord = order(h1) % Order of Chebyshev Type I design
bord =

    32


cord =

    10

ローパスとハイパスの緩い勾配のフィルター

周波数が 0.5*pi (ナイキスト レートの半分) に設定される場合のみ、フィルターの帯域幅 BW は完全に中心周波数 F0 の中心になります。F0 が 0 または pi に近い場合、歪みの効果があるため、中心周波数の一方側に大きな帯域幅が生じます。エッジの場合では、中心周波数が 0 (pi) に設定されると、中心周波数の右 (左) 側にフィルターの全体の帯域幅が生じます。結果は、いわゆる緩い勾配のローパス (ハイパス) フィルターです。

f = fdesign.parameq('F0,BW,BWp,Gref,G0,GBW,Gp,Gst',...
    0, 0.3, 0.2, 0, 4, 2, 3.5, 0.5);
f1 = fdesign.parameq('F0,BW,BWp,Gref,G0,GBW,Gp,Gst',...
    1, 0.3, 0.2, 0, 4, 2, 3.5, 0.5);
h = design(f);
h1 = design(f1);
set(hfvt,'Filters',[h h1]);
legend(hfvt,'Lowpass Shelving Filter','Highpass Shelving Filter');

低周波数と高周波数の指定

上記で説明した周波数の歪みのために、帯域幅が生じる正確な周波数エッジを制御することは一般的に困難です。これを行うには、代わりの仕様を使用します。

f = fdesign.parameq('N,Flow,Fhigh,Gref,G0,GBW,Gst',...
    4,.35,.55,0,-8,-7,-0.5);
h = design(f);
set(hfvt,'Filters',h,'legend','off');

0.35*pi および 0.55*pi ラジアン/サンプルでのゲインは、指定したように正確に -7 dB になることに注意してください。

可変遷移帯域幅または勾配をもつ緩い勾配のフィルター

緩い勾配のフィルターの特徴の 1 つは、穏やかな勾配のパラメーター S で指定される遷移帯域幅 (遷移勾配とも呼ばれます) です。帯域幅の参照ゲイン GBW は、常に緩い勾配のフィルターのブーストまたはカット ゲインの半分に設定されています。一定であるすべての他のパラメーターは、S によって遷移帯域幅減少が増加し (および応答の勾配が増加する) 時に、下の例で示すように、GBW 点の周囲で "勾配回転" を作成します。

F0 = 0;  % F0=0 designs a lowpass filter, F0=1 designs a highpass filter
Fc = .2; % Cutoff Frequency
G0 = 10;
S = 1.5;
f = fdesign.parameq('N,F0,Fc,S,G0',N,F0,Fc,S,G0);
h1 = design(f);

f.S = 2.5;
h2 = design(f);

f.S = 4;
h3 = design(f);

set(hfvt,'Filters',[h1 h2 h3]);
legend(hfvt,'S=1.5','S=2.5','S=4');

S の各値に対応する遷移帯域幅および帯域幅ゲインは、MEASURE メソッドを使用して得ることができます。帯域幅の参照ゲイン GBW が 3 つの設計に対して同じであることを確認し、S が増加するときに減少する遷移幅の量で定量化します。

m = measure([h1 h2 h3]);
get(m,'GBW')
ans = 

    [5]
    [5]
    [5]

get(m,'HighTransitionWidth')
ans = 

    [0.2083]
    [0.0959]
    [0.0539]

緩やかな勾配のパラメーター S が増加するにつれて、フィルターのリップルも増加します。対象となる遷移帯域幅を維持しながら、リップルを減らすフィルター次数を増やすことができます。

h1 = h3;

f.FilterOrder = 3;
h2 = design(f);

f.FilterOrder = 4;
h3 = design(f);

set(hfvt,'Filters',[h1 h2 h3]);
legend(hfvt,'N=2','N=3','N=4');
hold on;
m = measure(h1);
plot(m.BWpass,m.G0,'k*','markersize',10)
plot(m.BW,m.GBW,'k*','markersize',10)
plot(m.BWstop,m.Gref,'k*','markersize',10)

3 つの応答は、通過帯域幅、帯域幅の参照ゲイン、および阻止帯域幅をそれぞれ定義する 3 つの点 (上の図ではアスタリスク付き) で取り込みます。したがって、すべての 3 つのフィルターは同じ遷移幅および帯域幅になります。ただし、高次フィルターではリップルは比較的少なくなります。

指定されたクオリティ ファクターをもつ緩い勾配のフィルター

クオリティ ファクター Qa は、可変遷移帯域幅をもつ緩い勾配のフィルターを設計するために、緩やかな勾配のパラメーター S の代わりに使用できます。

F0 = 1;    % Highpass Shelving Filter
Fc = .3;
Qa = 0.48;
f = fdesign.parameq('N,F0,Fc,Qa,G0',N,F0,Fc,Qa,G0);
h1 = design(f);

f.Qa = 1/sqrt(2);
h2 = design(f);

f.Qa = 2.0222;
h3 = design(f);

close(hfvt);
hfvt = fvtool([h1 h2 h3],'Color','white');
legend(hfvt,'Qa=0.48','Qa=0.7071','Qa=2.0222');

パラメトリック イコライザーのカスケード

パラメトリック イコライザーは通常、複数のイコライザーが同時に使用されオーディオ信号を均等化するように、直列に接続されます。この方法で複数のイコライザーを接続するには、関数 cascade を使用します。

f1 = fdesign.parameq('N,F0,BW,Gref,G0,GBW',2,.4,.2,0,5,5+10*log10(.5));
f2 = fdesign.parameq('N,F0,BW,Gref,G0,GBW',2,.6,.15,0,-5,-5-10*log10(.5));
h1 = design(f1);
h2 = design(f2);
hc = cascade(h1,h2);
set(hfvt,'Filters',[h1 h2 hc]);
legend(hfvt,'Second-Order Boost Filter','Second-Order Cut Filter',...
    'Cascade of the Two Filters');
axis([0 1 -5.2 5.2]);

上記の 2 次型フィルターのような低次数の設計は、中心周波数が密な間隔の場合、相互に干渉する可能性があります。高次設計は、そのような干渉に陥りにくい傾向があります。

f1.FilterOrder = 8;
f2.FilterOrder = 8;
h3   = design(f1);
h4   = design(f2);
hc2  = cascade(h3,h4);
set(hfvt,'Filters',[h3 h4 hc2]);
legend(hfvt,'Eighth-Order Boost Filter','Eighth-Order Cut Filter',...
    'Cascade of the Two Filters','Location','NorthEast');

相補的なピークおよびノッチのパラメトリック イコライザー

次に、2 次型ピークとノッチのパラメトリック イコライザーの相補的なペアを設計します。これらのフィルターが相補的なため、カスケードされた応答はオールパス フィルターに対応することに注意してください。

N  = 2;
F0 = 0.3;
Qa = 5;
Gref = 0;
G0 = 10;    % Boost Gain (dB)
f = fdesign.parameq('N,F0,Qa,Gref,G0',N,F0,Qa,Gref,G0);
h1 = design(f);

f.G0 = -10; % Cut Gain (dB)
h2 = design(f);
h3 = cascade(h1,h2);
set(hfvt,'Filters',[h1 h2 h3]);
axis([0 1 -10 10]);
legend(hfvt,'Peak parametric equalizer G0=10 dB', ...
            'Notch parametric equalizer G0=-10 dB','Cascaded responses')

従来のフィルターの設計

従来のバンドパス フィルターは、参照ゲインを負の無限大 (dB)、たとえば絶対単位の 0 などに設定することで設計できます。この例は、指定された 3-dB 点を使用した最小次数のローパス楕円の設計を示しています。

f = fdesign.parameq('F0,BW,BWp,Gref,G0,GBW,Gp,Gst',...
    0, 0.2, 0.19, -Inf, 0, 10*log10(0.5),-0.5, -85);
h = design(f);
set(hfvt,'Filters',h,'legend','off');

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