Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

fdesign.bandpass

バンドパス フィルター設計仕様オブジェクト

説明

関数 fdesign.bandpass は、通過帯域周波数、阻止帯域周波数、通過帯域リップル、フィルター次数などのフィルターの仕様が含まれている bandpass フィルター設計仕様オブジェクトを返します。関数 design を使用して、フィルター設計仕様オブジェクトからフィルターを設計します。

制御オプションの詳細については、フィルターの設計手順を参照してください。完全なワークフローについては、Fdesign でのフィルターの設計 — プロセスの概要を参照してください。

bandpassSpecs = fdesign.bandpass は、次の既定の値をもつバンドパス フィルター設計仕様オブジェクトを構築します。

  • 最初の阻止帯域周波数を 0.35 に設定。

  • 最初の通過帯域周波数を 0.45 に設定。

  • 2 番目の通過帯域周波数を 0.55 に設定。

  • 2 番目の阻止帯域周波数を 0.65 に設定。

  • 最初の阻止帯域の減衰量を 60 dB に設定。

  • 通過帯域リップルを 1 dB に設定。

  • 2 番目の阻止帯域の減衰量を 60 dB に設定。

bandpassSpecs = fdesign.bandpass(spec,value1,...,valueN) は、特定のフィルター次数、阻止帯域周波数、通過帯域周波数、および仕様オプションをもつ、バンドパス フィルター仕様オブジェクトを構築します。指定するオプションを式 spec で表します。式の後で、各オプションの値を指定します。spec 引数の後に値を指定しない場合、関数は既定値を仮定します。

bandpassSpecs = fdesign.bandpass(___,Fs) では、フィルターを適用する信号のサンプル レートを Hz で指定します。Fs は、指定する他の数値の後でスカラーとして指定しなければなりません。この場合は、仕様内のすべての周波数も Hz です。

設計仕様 fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',.4,.5,.6,.7,60,1,80) は同じフィルターを fdesign.bandstop('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',1600,2000,2400,2800,60,1,80,8000) として設計します。

bandpassSpecs = fdesign.bandpass(___,magunits) では、指定した振幅の単位を指定します。magunits は、'linear''dB'、または 'squared' のいずれかになります。この引数を省略すると、オブジェクトは、振幅の指定の単位を 'dB' と仮定します。振幅仕様は、指定方法にかかわらず、常にデシベル単位に変換されて格納されます。Fs が指定された場合、magunits は入力引数リストの Fs に従わなければなりません。

すべて折りたたむ

[1, 1.4] kHz の通過帯域をもち、次数が 100 の制約付き帯域 FIR 等リップル フィルターを設計します。阻止帯域の減衰量の値は両方とも 60 dB に制約されます。サンプル レートは 10 kHz です。

関数 fdesign.bandpass を使用し、次の設計パラメーターを指定して、bandpass フィルター設計仕様オブジェクトを作成します。

bandpassSpecs = fdesign.bandpass('N,Fst1,Fp1,Fp2,Fst2,C',100,800,1e3,1.4e3,1.6e3,1e4);

2 つの阻止帯域を 60 dB の阻止帯域の減衰量で制約します。

bandpassSpecs.Stopband1Constrained = true;
bandpassSpecs.Astop1 = 60;
bandpassSpecs.Stopband2Constrained = true;
bandpassSpecs.Astop2 = 60;

関数 design を使用してバンドパス フィルターを設計します。生成されるフィルターは、dsp.FIRFilter System object™ です。このフィルターをストリーミング データに適用する方法の詳細については、dsp.FIRFilterを参照してください。

bandpassFilt = design(bandpassSpecs,Systemobject=true)
bandpassFilt = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [5.5055e-04 5.4751e-05 -2.2052e-05 6.5244e-05 3.6129e-04 5.7237e-04 1.9824e-04 -9.8650e-04 -0.0025 -0.0030 -0.0014 0.0023 0.0062 0.0075 0.0040 -0.0034 -0.0109 -0.0135 -0.0082 0.0031 0.0142 0.0181 0.0119 -0.0012 ... ] (1x101 double)
    InitialConditions: 0

  Use get to show all properties

設計したフィルターの周波数応答を可視化します。

filterAnalyzer(bandpassFilt)

measure を使用して、フィルターの周波数応答特性を測定します。通過帯域リップルは 2 dB をわずかに上回ります。この設計ではいずれの阻止帯域も制約されるため、通過帯域リップルを制約することはできません。

measure(bandpassFilt)
ans = 
Sample Rate             : 10 kHz     
First Stopband Edge     : 800 Hz     
First 6-dB Point        : 946.7621 Hz
First 3-dB Point        : 975.1807 Hz
First Passband Edge     : 1 kHz      
Second Passband Edge    : 1.4 kHz    
Second 3-dB Point       : 1.4248 kHz 
Second 6-dB Point       : 1.4533 kHz 
Second Stopband Edge    : 1.6 kHz    
First Stopband Atten.   : 60.0614 dB 
Passband Ripple         : 2.1443 dB  
Second Stopband Atten.  : 60.0399 dB 
First Transition Width  : 200 Hz     
Second Transition Width : 200 Hz     
 

バタワース IIR バンドパス フィルターを設計します。フィルターの設計手順は、次のようになります。

  1. 関数 fdesign を使用して、フィルター設計仕様を指定します。

  2. 関数 designmethods に用意されている設計法を選択します。

  3. 選択できる設計オプションを調べるため、関数 designoptions を使用します。

  4. 関数 design を使用してフィルターを設計します。

fdesign.bandpass を使用して、既定のバンドパス フィルター設計仕様オブジェクトを作成します。

bandpassSpecs = fdesign.bandpass
bandpassSpecs = 
  bandpass with properties:

               Response: 'Bandpass'
          Specification: 'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2'
            Description: {7x1 cell}
    NormalizedFrequency: 1
                 Fstop1: 0.3500
                 Fpass1: 0.4500
                 Fpass2: 0.5500
                 Fstop2: 0.6500
                 Astop1: 60
                  Apass: 1
                 Astop2: 60

関数 designmethods を使用して、使用可能な設計法を調べます。バタワース フィルターを設計するため、butter を選択します。

designmethods(bandpassSpecs,'Systemobject',true)
Design Methods that support System objects for class fdesign.bandpass (Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2):


butter
cheby1
cheby2
ellip
equiripple
kaiserwin

フィルターを設計するときに、追加の設計オプションを指定できます。関数 designoptions を使用して、オプションの一覧を表示します。この関数は、フィルターで使用する既定の設計オプションも表示します。

designoptions(bandpassSpecs,'butter')
ans = struct with fields:
           FilterStructure: {'df1sos'  'df2sos'  'df1tsos'  'df2tsos'  'cascadeallpass'  'cascadewdfallpass'}
              SOSScaleNorm: 'ustring'
              SOSScaleOpts: 'fdopts.sosscaling'
              MatchExactly: {'passband'  'stopband'}
              SystemObject: 'bool'
    DefaultFilterStructure: 'df2sos'
       DefaultMatchExactly: 'stopband'
       DefaultSOSScaleNorm: ''
       DefaultSOSScaleOpts: [1x1 fdopts.sosscaling]
       DefaultSystemObject: 0

関数 design を使用してフィルターを設計します。'butter' と、変数 bandpassSpecs で与えられる仕様を入力引数として渡します。'matchexactly' 設計オプションとして 'passband' を指定します。

bpFilter = design(bandpassSpecs,'butter','matchexactly','passband','SystemObject',true)
bpFilter = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II'
    CoefficientSource: 'Property'
            Numerator: [7x3 double]
          Denominator: [7x3 double]
       HasScaleValues: true
          ScaleValues: [0.1657 0.1657 0.1561 0.1561 0.1504 0.1504 0.1485 1]

  Use get to show all properties

設計したフィルターの周波数応答を可視化します。

freqz(bpFilter)

周波数が 1 kHz、10 kHz、および 15 kHz の 3 つの正弦波で構成される離散時間正弦波信号のバンドパス フィルター処理を行います。

最初にバンドパス フィルター設計仕様オブジェクトを作成し、次いでその仕様を使用してフィルターを設計することで、FIR 等リップル バンドパス フィルターを設計します。

バンドパス フィルターの設計

fdesign.bandpass を使用して、バンドパス フィルター設計仕様オブジェクトを作成します。

bandpassSpecs = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', ...
    1/4,3/8,5/8,6/8,60,1,60);

このオブジェクトの使用可能な設計法を示します。

designmethods(bandpassSpecs)
Design Methods for class fdesign.bandpass (Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2):


butter
cheby1
cheby2
ellip
equiripple
kaiserwin

等リップル フィルターを設計するには、'equiripple' を選択します。

bpFilter = design(bandpassSpecs,'equiripple',Systemobject=true)
bpFilter = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [-0.0043 -3.0812e-15 0.0136 3.7820e-15 -0.0180 -4.2321e-15 7.1634e-04 4.0993e-15 0.0373 -4.1057e-15 -0.0579 3.7505e-15 0.0078 -3.4246e-15 0.1244 2.4753e-15 -0.2737 -8.6287e-16 0.3396 -8.6287e-16 -0.2737 ... ] (1x37 double)
    InitialConditions: 0

  Use get to show all properties

設計したフィルターの周波数応答を可視化します。

freqz(bpFilter,[],44100)

正弦波信号の作成

1 kHz、10 kHz、および 15 kHz の周波数をもつ 3 つの正弦波の和である信号を作成します。スペクトル アナライザーを初期化し、元の信号とフィルター処理された信号を表示します。

Sine1 = dsp.SineWave(Frequency=1e3,SampleRate=44.1e3,SamplesPerFrame=4000);
Sine2 = dsp.SineWave(Frequency=10e3,SampleRate=44.1e3,SamplesPerFrame=4000);
Sine3 = dsp.SineWave(Frequency=15e3,SampleRate=44.1e3,SamplesPerFrame=4000);

SpecAna = spectrumAnalyzer(PlotAsTwoSidedSpectrum=false, ...
    SampleRate=Sine1.SampleRate, ...
    ShowLegend=true, ...
    YLimits=[-240,45]);

SpecAna.ChannelNames = {'Original noisy signal','Bandpass filtered signal'};

正弦波信号のフィルター処理

設計したバンドパス フィルターを使用して正弦波信号をフィルター処理します。元の信号とフィルター処理された信号をスペクトル アナライザーで表示します。1 kHz のトーンはフィルターで除外され、減衰します。10 kHz のトーンは影響を受けず、15 kHz のトーンはフィルターの遷移帯域に現れるため、少し減衰します。

for i = 1:5000
    x = Sine1()+Sine2()+Sine3();
    y = bpFilter(x);
    SpecAna(x,y);
end
release(SpecAna)

入力引数

すべて折りたたむ

仕様の式。次のいずれかの文字ベクトルを指定します。

  • 'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2' (既定の設定)

  • 'N,F3dB1,F3dB2'

  • 'N,F3dB1,F3dB2,Ap'

  • 'N,F3dB1,F3dB2,Ast'

  • 'N,F3dB1,F3dB2,Ast1,Ap,Ast2'

  • 'N,F3dB1,F3dB2,BWp'

  • 'N,F3dB1,F3dB2,BWst'

  • 'N,Fc1,Fc2'

  • 'N,Fc1,Fc2,Ast1,Ap,Ast2'

  • 'N,Fp1,Fp2,Ap'

  • 'N,Fp1,Fp2,Ast1,Ap,Ast2'

  • 'N,Fst1,Fp1,Fp2,Fst2'

  • 'N,Fst1,Fp1,Fp2,Fst2,C'

  • 'N,Fst1,Fp1,Fp2,Fst2,Ap'

  • 'N,Fst1,Fst2,Ast'

  • 'Nb,Na,Fst1,Fp1,Fp2,Fst2'

次の表で、式で使用できる各オプションを説明します。

仕様のオプション説明
Ap通過帯域で許容されるリップル量。dB 単位で Apass として指定します。
Ast阻止帯域の減衰量 (dB)。Astop を使用して指定します。
Ast1最初の阻止帯域の減衰量 (dB)。Astop1 を使用して指定します。
Ast22 番目の阻止帯域の減衰量 (dB)。Astop2 を使用して指定します。
BWpフィルター通過帯域の帯域幅。正規化周波数単位で BWpass として指定します。
BWst2 つの阻止帯域周波数の間の周波数の幅。正規化周波数単位で BWstop として指定します。
F3dB1最初のカットオフの通過帯域値より 3 dB 低い位置での周波数。正規化周波数単位で指定します。IIR フィルターに適用されます。
F3dB22 番目のカットオフの通過帯域値より 3 dB 低い位置での周波数。正規化周波数単位で指定します。IIR フィルターに適用されます。
Fc1最初のカットオフ周波数 (正規化周波数単位)。Fcutoff1 を使用して指定します。FIR フィルターに適用されます。
Fc22 番目のカットオフ周波数 (正規化周波数単位)。Fcutoff1 を使用して指定します。FIR フィルターに適用されます。
Fp1通過帯域の先頭のエッジの周波数。正規化周波数単位で Fpass1 として指定します。
Fp2通過帯域の末尾のエッジの周波数。正規化周波数単位で Fpass2 として指定します。
Fst1最初の阻止帯域の末尾のエッジの周波数。正規化周波数単位で Fstop1 として指定します。
Fst22 番目の阻止帯域の先頭のエッジの周波数。正規化周波数単位で Fstop2 として指定します。
NFIR フィルターのフィルター次数。または、Na および Nb が指定されないときの、IIR フィルターの分子および分母の両方の次数。FilterOrder を使用して指定します。
NbIIR フィルターの分子の次数。NumOrder プロパティを使用して指定します。
NaIIR フィルターの分母の次数。DenOrder プロパティを使用して指定します。
C

制約付き帯域フラグ。これにより、3 つの帯域のうちの 1 つまたは 2 つにおいて、固定次設計の通過帯域リップルまたは阻止帯域の減衰量を指定できます。

詳細については、c を参照してください。

フィルターの仕様を図で表すと、以下のようになります。

Fst1Fp1 間などの仕様値間の領域は、フィルター応答が明示的に定義されていない遷移領域です。

フィルターの設計に使用できる設計法は、仕様の式によって異なります。これらの方法は、関数 designmethods を使用して取得できます。次の表は、fdesign.bandpass でサポートされる仕様の式および対応する設計法の一覧です。

仕様の式サポートされる設計法
'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2'butter, cheby1, cheby2, ellip, equiripple, kaiserwin
'N,F3dB1,F3dB2'butter
'N,F3dB1,F3dB2,Ap'cheby1
'N,F3dB1,F3dB2,Ast'cheby2, ellip
'N,F3dB1,F3dB2,Ast1,Ap,Ast2'ellip
'N,F3dB1,F3dB2,BWp'cheby1
'N,F3dB1,F3dB2,BWst'cheby2
'N,Fc1,Fc2'window
'N,Fc1,Fc2,Ast1,Ap,Ast2'fircls
'N,Fp1,Fp2,Ap'cheby1
'N,Fp1,Fp2,Ast1,Ap,Ast2'ellip
'N,Fst1,Fp1,Fp2,Fst2'iirlpnorm, equiripple, firls
'N,Fst1,Fp1,Fp2,Fst2,C'equiripple
'N,Fst1,Fp1,Fp2,Fst2,Ap'ellip
'N,Fst1,Fst2,Ast'cheby2
'Nb,Na,Fst1,Fp1,Fp2,Fst2'iirlpnorm

フィルターを設計するには、次のいずれかの設計法を入力にして関数 design を呼び出します。フィルター応答のタイプは、'FIR' または 'IIR' を関数 design に渡すことにより選択できます。詳細については、design を参照してください。MATLAB® コマンド ラインで「help(bandpassSpecs,'method')」と入力すると、特定の設計法に対する設計オプションの詳細ヘルプを取得できます。

仕様の値。値のコンマ区切りリストを指定します。式に現れる順序で spec の各オプションの値を指定します。

例: bandpassSpecs = fdesign.bandpass('N,Fc1,Fc2,Ast1,Ap,Ast2',n,fc1,fc2,ast1,ap,ast2)

以下の入力引数では、式の各オプションの詳細について説明します。

FIR フィルターのフィルター次数。正の整数として指定します。IIR フィルターの設計の場合、nb および na が指定されないときは、この値は、分子の次数と分母の次数の両方として解釈されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

IIR フィルターの分子の次数。非負の整数として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

IIR フィルターの分母の次数。正の整数として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

これにより、3 つの帯域のうちの 1 つまたは 2 つにおいて、固定次設計の通過帯域リップルまたは阻止帯域の減衰量を指定できます。

仕様 'N,Fst1,Fp1,Fp2,Fst2,C' では、3 つのすべての帯域 (2 つの阻止帯域および 1 つの通過帯域) の制約を同時に指定することはできません。制約は 1 つまたは 2 つの帯域で指定できます。

両方の阻止帯域が 60 dB の既定値に制限されている、次のバンドパス設計仕様について考えます。

例: spec = fdesign.bandpass('N,Fst1,Fp1,Fp2,Fst2,C',100,800,1e3,1.4e3,1.6e3,1e4); spec.Stopband1Constrained=true; spec.Stopband2Constrained=true;

通過帯域リップル。dB 単位で正のスカラーを指定します。magunits'linear' または 'squared' である場合、指定に関係なく、通過帯域リップルは関数によって dB 単位に変換されて格納されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

阻止帯域の減衰量。dB 単位で正のスカラーとして指定します。magunits'linear' または 'squared' である場合、指定に関係なく、阻止帯域の減衰量は関数によって dB 単位に変換されて格納されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

最初の阻止帯域の減衰量。dB 単位で正のスカラーとして指定します。magunits'linear' または 'squared' である場合、指定に関係なく、最初の阻止帯域の減衰量は関数によって dB 単位に変換されて格納されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

2 番目の阻止帯域の減衰量。dB 単位で正のスカラーとして指定します。magunits'linear' または 'squared' である場合、指定に関係なく、2 番目の阻止帯域の減衰量は関数によって dB 単位に変換されて格納されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

最初の 3 dB の周波数。正規化周波数単位で正のスカラーとして指定します。

これは最初のカットオフの通過帯域値より 3 dB 低い位置での周波数です。この入力引数は IIR フィルターにのみ適用されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

2 番目の 3 dB の周波数。正規化周波数単位で正のスカラーとして指定します。

これは 2 番目のカットオフの通過帯域値より 3 dB 低い位置での周波数です。この入力引数は IIR フィルターにのみ適用されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

最初のカットオフ周波数。正規化周波数単位で正のスカラーとして指定します。

この入力引数は FIR フィルターにのみ適用されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

2 番目のカットオフ周波数。正規化周波数単位で正のスカラーとして指定します。

この入力引数は FIR フィルターにのみ適用されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

最初の阻止帯域周波数。正規化周波数単位で正のスカラーとして指定します。

これは最初の阻止帯域の末尾のエッジの周波数です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

2 番目の阻止帯域周波数。正規化周波数単位で正のスカラーとして指定します。

これは 2 番目の阻止帯域の先頭のエッジの周波数です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

最初の通過帯域周波数。正規化周波数単位で正のスカラーとして指定します。

これは最初の通過帯域の先頭のエッジの周波数です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

2 番目の通過帯域周波数。正規化周波数単位で正のスカラーとして指定します。

これは通過帯域の末尾のエッジの周波数です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

正規化周波数単位でのフィルター通過帯域の帯域幅。F3dB2F3dB1 より小さい正のスカラーとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

2 つの阻止帯域周波数の間の周波数の幅。正規化周波数単位で正のスカラーとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

フィルターを適用する信号のサンプル レート。Hz 単位でスカラーを指定します。サンプル レートは、指定する他の数値の後でスカラーとして指定します。Fs が指定された場合、他のすべての周波数値と同じように、Fs は Hz 単位であると見なされます。仕様の文字列を変更する必要はないことに注意してください。

次の設計では、仕様文字列を 'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2' に、サンプル レートを 8000 Hz に設定しています。

bandpassSpecs = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',1600,2000,2400,2800,60,1,80,8000); filt = design(bandpassSpecs,'Systemobject',true);

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

振幅仕様の単位。'dB''linear' または 'squared' を指定します。この引数を省略すると、オブジェクトは、振幅の単位を 'dB' と仮定します。振幅仕様は指定に関係なく常に dB 単位に変換されて格納されることに注意してください。Fs が入力引数に含まれている場合、magunits は入力引数リスト内で Fs より後に指定しなければなりません。

出力引数

すべて折りたたむ

バンドパス フィルター設計仕様オブジェクト。bandpass オブジェクトとして返されます。オブジェクトのフィールドは、入力文字ベクトル spec に依存します。

引数 spec'N,Fc1,Fc2' に設定され、対応する値がそれぞれ 100.6、および 0.8 に設定されている例について考えます。bandpass フィルター設計仕様オブジェクトには、次のフィールドが設定されます。

バージョン履歴

R2009a で導入