Main Content

design

フィルター仕様オブジェクトに設計法を適用

説明

filt = design(designSpecs,'Systemobject',true) は、フィルター仕様オブジェクト designSpecs を使用してフィルター System object™ filt を生成します。設計法を入力引数として指定しなかった場合、design は既定の設計法を使用します。フィルター設計仕様オブジェクトの既定の設計法を表示するには、designmethods(designSpecs,'default') を使用します。フィルター設計仕様についての詳細は、Design a Filter in Fdesign — Process Overviewを参照してください。

filt = design(designSpecs,method,'Systemobject',true) は、method が指定する設計法を使用します。methoddesignmethods が返すオプションのいずれかでなければなりません。

filt = design(designSpecs,method,PARAM,VALUE,...,'Systemobject',true) は、設計法オプションを指定します。選択可能な設計法オプションの一覧を表示するには、designoptions(designSpecs,method) を使用します。これらの各オプションの詳細ヘルプを表示するには MATLAB® コマンド プロンプトで help(designSpecs,method) と入力します。

filt = design(designSpecs,method,opts,'Systemobject',true) は、構造体 opts を使用して設計法オプションを指定します。通常、opts は関数 designopts から取得され、関数 design への入力として指定されます。オプションの入力の詳細を確認するには、help(designSpecs,method) を使用します。

すべて折りたたむ

FIR 等リップル ローパス フィルターを設計します。通過帯域エッジ周波数を 0.2n ラジアン/サンプル、阻止帯域エッジ周波数を 0.25n ラジアン/サンプルに指定します。通過帯域リップルを 0.5 dB、阻止帯域の減衰量を 40 dB に設定します。

designSpecs = fdesign.lowpass('Fp,Fst,Ap,Ast',0.2,0.25,0.5,40)
designSpecs = 
  lowpass with properties:

               Response: 'Lowpass'
          Specification: 'Fp,Fst,Ap,Ast'
            Description: {4x1 cell}
    NormalizedFrequency: 1
                  Fpass: 0.2000
                  Fstop: 0.2500
                  Apass: 0.5000
                  Astop: 40

既定の等リップル法を使用してフィルターを設計します。

filt = design(designSpecs,'SystemObject',true)
filt = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [-0.0057 -0.0010 0.0010 0.0040 0.0065 0.0073 ... ]
    InitialConditions: 0

  Show all properties

フィルター設計仕様オブジェクト designSpecs で関数 designmethods を実行して、使用可能な設計法を調べます。

designmethods(designSpecs,'SystemObject',true)
Design Methods that support System objects for class fdesign.lowpass (Fp,Fst,Ap,Ast):


butter
cheby1
cheby2
ellip
equiripple
ifir
kaiserwin
multistage

フィルターの設計で使用する設計オプションを指定することもできます。使用可能なオプションの一覧を表示するには、designSpecs に対して関数 designoptions を実行します。

designoptions(designSpecs,'equiripple')
ans = struct with fields:
           FilterStructure: {'dffir'  'dffirt'  'dfsymfir'  'fftfir'}
             DensityFactor: 'double'
                  MinPhase: 'bool'
                  MaxPhase: 'bool'
                  MinOrder: {'any'  'even'  'odd'}
             StopbandShape: {'flat'  'linear'  '1/f'}
             StopbandDecay: 'double'
               UniformGrid: 'bool'
              SystemObject: 'bool'
    DefaultFilterStructure: 'dffir'
      DefaultDensityFactor: 16
           DefaultMaxPhase: 0
           DefaultMinOrder: 'any'
           DefaultMinPhase: 0
      DefaultStopbandDecay: 0
      DefaultStopbandShape: 'flat'
       DefaultSystemObject: 0
        DefaultUniformGrid: 1

'MinPhase'true に設定して、最小位相 FIR 等リップル フィルターを設計します。

filtMin = design(designSpecs,'equiripple','MinPhase',true,'SystemObject',true)
filtMin = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [0.0163 0.0381 0.0724 0.1144 0.1562 0.1875 0.1981 ... ]
    InitialConditions: 0

  Show all properties

既定および最小位相の設計の極-零点プロットを表示します。

fvt = fvtool(filt,filtMin,'Analysis','polezero');
legend(fvt,'Default design','Minimum-phase design')

{"String":"Figure Figure 1: Pole-Zero Plot contains an axes object. The axes object with title Pole-Zero Plot contains 6 objects of type line, text. These objects represent Default design: Zero, Default design: Pole, Minimum-phase design: Zero, Minimum-phase design: Pole.","Tex":"Pole-Zero Plot","LaTex":[]}

楕円法を使用してフィルターを再設計します。楕円法で使用可能な設計オプションを調べます。

designoptions(designSpecs,'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

通過帯域が完全に同じになるように、'MatchExactly''passband' に設定します。

filt = design(designSpecs,'ellip','MatchExactly','passband','SystemObject',true)
filt = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II'
    CoefficientSource: 'Property'
            Numerator: [3x3 double]
          Denominator: [3x3 double]
       HasScaleValues: true
          ScaleValues: [0.2868 0.1982 0.2819 1]

  Show all properties

P ノルムによるスケーリングは、2 次セクション型で指定できます。時間領域で L-無限大ノルムによるスケーリングを使用します。

filtL = design(designSpecs,'ellip','MatchExactly','passband','SOSScaleNorm','linf', ...
    'SystemObject',true)
filtL = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II'
    CoefficientSource: 'Property'
            Numerator: [3x3 double]
          Denominator: [3x3 double]
       HasScaleValues: false

  Show all properties

フィルターの周波数応答を表示します。

fvt = fvtool(filt,filtL);
legend(fvt,'Default scaling','L-infinity norm scaling')

{"String":"Figure Figure 2: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 3 objects of type line. These objects represent Default scaling, L-infinity norm scaling.","Tex":"Magnitude Response (dB)","LaTex":[]}

入力引数

すべて折りたたむ

fdesign は、フィルター設計仕様オブジェクトを返します。すべてのフィルター設計仕様オブジェクトに、以下のプロパティがあります。

プロパティ名

既定値

説明

Response

選択したタイプにより異なる

内挿器やバンドパス フィルターなどの、設計するフィルターのタイプを定義。この値は読み取り専用です。

Specification

選択したタイプにより異なる

カットオフ周波数 Fc やフィルター次数 N などの、希望するフィルター性能の定義に使用するフィルターの特性を定義。

Description

選択したフィルター タイプにより異なる

オブジェクトの定義に使用するフィルター仕様の記述と、オブジェクトからフィルターを作成する際に使用するフィルター仕様を含む。この値は読み取り専用です。

NormalizedFrequency

logical true

フィルターの計算で、0 ~ 1 の正規化周波数と 0 ~ Fs/2 の周波数帯域のどちらをサンプリング周波数として使用するかを決定します。true または false (一重引用符なし) を受け入れます。オーディオ重み付けフィルターは、正規化周波数をサポートしていません。

フィルター仕様設計オブジェクトには、シングルレート フィルターとマルチレート フィルターのどちらを設計するかによって、これらのプロパティ以外のプロパティも含まれる場合があります。

マルチレート フィルターの場合に追加されるプロパティ

説明

DecimationFactor

サンプリング レートを下げるための量を指定します。常に正の整数です。

InterpolationFactor

サンプリング レートを上げるための量を指定します。常に正の整数です。

PolyphaseLength

ポリフェーズの長さは、間引きフィルター、内挿フィルターまたはレート変換率フィルターを構成する各ポリフェーズ サブフィルターの長さです。フィルター全体の長さは pl とレート変換率の積です。pl は偶数の整数でなければなりません。

設計法。文字ベクトルとして指定します。入力引数として指定する設計法は、次により返される方法のいずれかでなければなりません。

designmethods(designSpecs,'Systemobject',true)

次の表に、すべての設計法の一覧を示します。使用可能な設計法のサブセットは、フィルター設計仕様オブジェクト designSpecs によって決まります。

設計法

説明

butter

バタワース フィルター

cheby1

チェビシェフ I 型フィルター

cheby2

チェビシェフ II 型フィルター

ellip

楕円フィルター

equiripple

等リップル FIR フィルター

firls

最小二乗線形位相 FIR フィルター

freqsamp

周波数サンプリング FIR フィルター

ifir

内挿 FIR フィルター

iirlinphase

準線形位相 IIR フィルター

iirlpnorm

最小 P ノルム最適 IIR フィルター

iirls

最小二乗 IIR フィルター

fircls

FIR 制約付き最小二乗フィルター

kaiserwin

カイザー ウィンドウ フィルター

maxflat

Maxflat FIR フィルター

multistage

多段フィルター

window

ウィンドウを適用したインパルス応答を使用した FIR フィルター

フィルターの設計をより迅速に行うには、入力引数 methoddesign に異なる動作をさせるさまざまな特別なキーワードを指定します。次の表に、method で使用できるキーワードと、各キーワードに対する design の応答を示します。

設計法キーワード

設計応答の説明

'FIR'

design に強制的に FIR フィルターを生成させます。オブジェクト d に対する FIR 設計法が存在しない場合、design はエラーを返します。

'IIR'

design に強制的に IIR フィルターを生成させます。オブジェクト d に対する IIR 設計法が存在しない場合、design はエラーを返します。

'ALLFIR'

d 内の仕様に適用可能なすべての FIR 設計法からフィルター (1 つの設計法につき 1 つのフィルター) を生成します。そのため、design は出力オブジェクト内に複数のフィルターを返します。

'ALLIIR'

d 内の仕様に適用可能なすべての IIR 設計法からフィルター (1 つの設計法につき 1 つのフィルター) を生成します。そのため、design は出力オブジェクト内に複数のフィルターを返します。

'ALL'

オブジェクト d 内の仕様に適用可能なすべての設計法を使用してフィルターを設計します。そのため、design は複数のフィルター (1 つの設計法につき 1 つのフィルター) を返します。design は、designmethods(D,'Systemobject',true) から返ってきた順に設計法を使用します。

キーワードでは、大文字と小文字は区別されません。

design により、出力オブジェクト内に複数のフィルターが返された場合は、インデックスを使用して個々のフィルターを表示します。たとえば、filt 内の 3 番目のフィルターを表示する場合、次のように入力します。

filt(3)

例: filt = design(designSpecs,'butter','SystemObject',true)

例: filt = design(designSpecs,'ALLFIR','SystemObject',true)

関数 design への入力として構造体 opts を渡すことにより、設計オプションを指定します。構造体 opts は、designopts(designSpecs,method) の実行によって得られます。

designSpecs = fdesign.notch
opts = designopts(designSpecs,'butter')
opts.FilterStructure = 'df1sos'
filt = design(designSpecs,'butter',opts,'SystemObject',true)

バージョン履歴

R2009a で導入