Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

fdesign.bandstop

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

説明

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

制御オプションの詳細については、フィルターの設計手順を参照してください。完全なワークフローについては、Design a Filter in Fdesign — Process Overviewを参照してください。

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

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

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

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

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

  • 最初の通過帯域リップル 1 dB。

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

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

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

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

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

bandstopSpecs = fdesign.bandstop(___,magunits) では、振幅仕様の単位を指定します。magunits は、'linear''dB''squared' のいずれかにすることができます。この引数を省略すると、'dB' であると仮定されます。振幅仕様は指定に関係なく常に dB 単位に変換されて格納されます。Fs が指定された場合、magunits は入力引数リストの Fs に従わなければなりません。

すべて折りたたむ

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

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

bandstopSpecs = fdesign.bandstop('N,Fp1,Fst1,Fst2,Fp2,C',60,9.6e3,12.8e3,22.4e3,25.6e3,64000);

2 つの通過帯域を 1 dB の通過帯域リップルで制限します。

bandstopSpecs.Passband1Constrained = true;
bandstopSpecs.Apass1 = 1;
bandstopSpecs.Passband2Constrained = true;
bandstopSpecs.Apass2 = 1;

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

bandstopFilt = design(bandstopSpecs,'Systemobject',true)
bandstopFilt = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [1x61 double]
    InitialConditions: 0

  Show all properties

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

fvtool(bandstopFilt)

measure を使用して、フィルターの周波数応答特性を測定します。

measure(bandstopFilt)
ans = 
Sample Rate             : 64 kHz     
First Passband Edge     : 9.6 kHz    
First 3-dB Point        : 10.5255 kHz
First 6-dB Point        : 10.9058 kHz
First Stopband Edge     : 12.8 kHz   
Second Stopband Edge    : 22.4 kHz   
Second 6-dB Point       : 24.2866 kHz
Second 3-dB Point       : 24.6685 kHz
Second Passband Edge    : 25.6 kHz   
First Passband Ripple   : 0.11754 dB 
Stopband Atten.         : 69.3934 dB 
Second Passband Ripple  : 0.11761 dB 
First Transition Width  : 3.2 kHz    
Second Transition Width : 3.2 kHz    
 

最小次数の楕円バンドストップ フィルターを設計します。フィルターの設計手順は、次のようになります。

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

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

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

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

fdesign.bandstop をデフォルト ステートで構築し、関数に設計仕様を入力します。

bandstopSpecs = fdesign.bandstop(.3,.4,.6,.7,.5,60,1)
bandstopSpecs = 
  bandstop with properties:

               Response: 'Bandstop'
          Specification: 'Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2'
            Description: {7x1 cell}
    NormalizedFrequency: 1
                 Fpass1: 0.3000
                 Fstop1: 0.4000
                 Fstop2: 0.6000
                 Fpass2: 0.7000
                 Apass1: 0.5000
                  Astop: 60
                 Apass2: 1

関数 designmethods を使用して、使用可能な設計法を調べます。楕円フィルターを設計するには、ellip を選択します。

designmethods(bandstopSpecs,'Systemobject',true)
Design Methods that support System objects for class fdesign.bandstop (Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2):


butter
cheby1
cheby2
ellip
equiripple
kaiserwin

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

designoptions(bandstopSpecs,'ellip')
ans = struct with fields:
           FilterStructure: {1x6 cell}
              SOSScaleNorm: 'ustring'
              SOSScaleOpts: 'fdopts.sosscaling'
              MatchExactly: {'passband'  'stopband'  'both'}
              SystemObject: 'bool'
    DefaultFilterStructure: 'df2sos'
       DefaultMatchExactly: 'both'
       DefaultSOSScaleNorm: ''
       DefaultSOSScaleOpts: [1x1 fdopts.sosscaling]
       DefaultSystemObject: 0

関数 design を使用してフィルターを設計します。'ellip' と、変数 'bandstopSpecs' で与えられる仕様を入力引数として渡します。

bsFilter = design(bandstopSpecs,'ellip','Systemobject',true)
bsFilter = 
  dsp.BiquadFilter with properties:

                   Structure: 'Direct form II'
             SOSMatrixSource: 'Property'
                   SOSMatrix: [5x6 double]
                 ScaleValues: [6x1 double]
           InitialConditions: 0
    OptimizeUnityScaleValues: true

  Show all properties

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

fvtool(bsFilter)

バンドストップ フィルターを作成し、3π/8 ~ 5π/8 ラジアン/サンプルの離散周波数帯域を排除します。48 kHz のサンプリング周波数では、これらの値は [9 15] kHz の周波数範囲に変換されます。3 つの離散時間正弦波の重ね合わせから構成される離散時間信号に対してフィルターを適用します。

最初にバンドストップ フィルター設計仕様オブジェクトを作成し、次いでオブジェクトを入力として関数 design に渡すことで、フィルターを設計します。

バンドストップ フィルターの設計

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

bandstopSpecs = fdesign.bandstop(1/4,3/8,5/8,6/8,1,60,1)
bandstopSpecs = 
  bandstop with properties:

               Response: 'Bandstop'
          Specification: 'Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2'
            Description: {7x1 cell}
    NormalizedFrequency: 1
                 Fpass1: 0.2500
                 Fstop1: 0.3750
                 Fstop2: 0.6250
                 Fpass2: 0.7500
                 Apass1: 1
                  Astop: 60
                 Apass2: 1

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

designmethods(bandstopSpecs)
Design Methods for class fdesign.bandstop (Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2):


butter
cheby1
cheby2
ellip
equiripple
kaiserwin

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

bsFilter = design(bandstopSpecs,'equiripple','Systemobject',true)
bsFilter = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [1x37 double]
    InitialConditions: 0

  Show all properties

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

fvtool(bsFilter,'Fs',48000)

正弦波信号の作成

1 kHz、12 kHz、および 16 kHz の周波数をもつ 3 つの正弦波の和である信号を作成します。Spectrum Analyzer を初期化し、元の信号とフィルター処理された信号を表示します。

Sine1 = dsp.SineWave('Frequency',1e3,'SampleRate',44.1e3,'SamplesPerFrame',4000);
Sine2 = dsp.SineWave('Frequency',12e3,'SampleRate',44.1e3,'SamplesPerFrame',4000);
Sine3 = dsp.SineWave('Frequency',16e3,'SampleRate',44.1e3,'SamplesPerFrame',4000);

SpecAna = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum',false, ...
    'SampleRate',Sine1.SampleRate, ...
    'NumInputPorts',2,...
    'ShowLegend',true, ...
    'YLimits',[-240,45]);

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

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

設計したバンドストップ フィルターを使用して正弦波信号をフィルター処理します。元の信号とフィルター処理された信号を Spectrum Analyzer で表示します。1 kHz のトーンは影響を受けません。12 kHz のトーンはフィルターで除外されて減衰し、16 kHz のトーンはフィルターの遷移帯域に現れるため、少し減衰します。

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

入力引数

すべて折りたたむ

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

  • 'Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2' (既定の設定)

  • 'N,F3dB1,F3dB2'

  • 'N,F3dB1,F3dB2,Ap' *

  • 'N,F3dB1,F3dB2,Ap,Ast' *

  • 'N,F3dB1,F3dB2,Ast' *

  • 'N,F3dB1,F3dB2,BWp' *

  • 'N,F3dB1,F3dB2,BWst' *

  • 'N,Fc1,Fc2'

  • 'N,Fc1,Fc2,Ap1,Ast,Ap2'

  • 'N,Fp1,Fp2,Ap'

  • 'N,Fp1,Fp2,Ap,Ast'

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

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

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

  • 'N,Fst1,Fst2,Ast'

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

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

仕様のオプション説明
Ap通過帯域で許容されるリップル量。dB 単位で Apass として指定します。
Ap1最初の通過帯域で許容されるリップル量。dB 単位で Apass1 として指定します。
Ap22 番目の通過帯域で許容されるリップル量。dB 単位で Apass2 として指定します。
Ast阻止帯域の減衰量 (dB)。Astop を使用して指定します。
BWpフィルター通過帯域の帯域幅。正規化周波数単位で BWpass として指定します。
BWstフィルター阻止帯域の帯域幅。正規化周波数単位で 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 フィルターの分子の次数。DenOrder プロパティを使用して指定します。
NaIIR フィルターの分母の次数。NumOrder プロパティを使用して指定します。
C

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

仕様 'N,Fp1,Fst1,Fst2,Fp2,C' では、通過帯域と阻止帯域の両方で同時に制約を指定できません。制約は 1 つまたは 2 つの帯域で指定できます。

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

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

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

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

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

手順の詳細については、フィルターの設計手順を参照してください。例としては ノッチ フィルターの設計を参照してください。

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

例: bandstopSpecs = fdesign.bandstop('N,Fp1,Fst1,Fst2,Fp2,C',n,fp1,fst1,fst2,fp2,c)

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

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

両方の通過帯域が 1 dB の既定値に制限されている、次のバンドストップ設計仕様について考えます。

例: spec = fdesign.bandstop('N,Fp1,Fst1,Fst2,Fp2,C',10,0.35,0.45,0.55,0.65); spec.Passband1Constrained=true; spec.Passband2Constrained=true;

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

指定した ap 値は、最初の通過帯域と 2 番目の通過帯域の両方に適用されます。

データ型: 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

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

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

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

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

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

データ型: 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 番目の阻止帯域周波数。正規化周波数単位で正のスカラーとして指定します。

これは、阻止帯域の末尾の周波数です。

データ型: 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

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

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

bandstopSpecs = fdesign.bandstop('Fp1,Fst1,Fst2,Fp2,Ap1,Ast,Ap2',1600,2000,2400,2800,1,80,.5,8000); filt = design(bandstopSpecs,'Systemobject',true);

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

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

出力引数

すべて折りたたむ

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

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

R2009a で導入