Main Content

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

fdesign

フィルター設計仕様オブジェクト

説明

関数 fdesign を使用して、通過帯域リップル、阻止帯域の減衰量、フィルター次数などのフィルターの仕様が含まれているフィルター設計仕様オブジェクトを作成します。その後、関数 design を使用して、フィルター設計仕様オブジェクトからフィルターを設計します。例については、ローパス間引きの設計を参照してください。

次のワークフロー図に、ストリーミング データに対するフィルターを設計、解析および適用するためのシンプルな手順を示します。

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

designSpecs = fdesign.response は、与えられた response をもつフィルターに対する設計仕様オブジェクトを返します。

designSpecs = fdesign.response(spec) では、フィルター設計を定義するために使用する変数を指定します。フィルター設計パラメーターは、使用するフィルターに対して選択したフィルター設計法に適用されます。選択した仕様オプションによって、fdesign オブジェクトに適用される設計法が決まります。

designSpecs = fdesign.response(___,Fs) は、フィルター仕様で使用するサンプル レートを Hz 単位で指定します。サンプル レートのスカラーは、最後の入力引数でなければなりません。サンプル レートを指定した場合、すべての周波数仕様は Hz 単位になります。

designSpecs = fdesign.response(___,magunits) は、入力引数で与える振幅仕様の単位を指定します。

すべて折りたたむ

信号のサンプル レートを 60 kHz から 20 kHz に減少させる 100 タップの FIR ローパス間引きフィルターを設計します。このフィルターの通過帯域は、最大 6 kHz まで拡大します。0.01 dB の通過帯域リップルと 100 dB の阻止帯域の減衰量を指定します。

Fs = 60e3;
N = 99;
Fpass = 6e3;
Apass = 0.01;
Astop = 100;
M = Fs/20e3;

関数 fdesign.decimator を使用して、フィルター設計仕様オブジェクトを設定します。

filtSpecs = fdesign.decimator(M,'lowpass','N,Fp,Ap,Ast',N,Fpass,Apass,Astop,Fs);

関数 design を使用して、FIR ローパス間引きを設計します。

生成されるフィルターは、dsp.FIRDecimator System object™ です。このフィルターをストリーミング データに適用する方法の詳細については、dsp.FIRDecimatorを参照してください。

decimFIR = design(filtSpecs,'SystemObject',true)
decimFIR = 
  dsp.FIRDecimator with properties:

   Main
    DecimationFactor: 3
     NumeratorSource: 'Property'
           Numerator: [-1.5100e-05 -2.2164e-05 -9.6058e-06 4.3636e-05 1.3739e-04 2.3440e-04 2.6375e-04 1.5609e-04 -9.9524e-05 -4.1180e-04 -5.9905e-04 -4.7613e-04 1.3485e-05 6.9877e-04 0.0012 0.0011 2.8750e-04 -0.0010 -0.0021 -0.0022 ... ] (1x100 double)
           Structure: 'Direct form'

  Use get to show all properties

info を使用して、フィルターに関する情報を表示します。

info(decimFIR)
ans = 10x56 char array
    'Discrete-Time FIR Multirate Filter (real)               '
    '-----------------------------------------               '
    'Filter Structure   : Direct-Form FIR Polyphase Decimator'
    'Decimation Factor  : 3                                  '
    'Polyphase Length   : 34                                 '
    'Filter Length      : 100                                '
    'Stable             : Yes                                '
    'Linear Phase       : Yes (Type 2)                       '
    '                                                        '
    'Arithmetic         : double                             '

fvtool を使用して、フィルターの振幅応答を可視化します。

fvtool(decimFIR,'Fs',Fs)

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Frequency (kHz), ylabel Magnitude (dB) contains 2 objects of type line.

96 kHz でサンプリングされた信号に対して使用するローパス フィルターを設計します。フィルターの通過帯域は最大 20 kHz まで拡大します。フィルターの阻止帯域は 24 kHz から始まります。0.01 dB の通過帯域リップルと 80 dB の阻止帯域の減衰量を指定します。仕様を満たすために必要な次数が自動的に決まります。

関数 fdesign.lowpass を使用して、フィルター設計仕様オブジェクトを設定します。

Fs = 96e3;
Fpass = 20e3;
Fstop = 24e3;
Apass = 0.01;
Astop = 80;

filtSpecs = fdesign.lowpass(Fpass,Fstop,Apass,Astop,Fs);

関数 designmethods を使用して、使用可能な設計アルゴリズムを調べます。

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


butter
cheby1
cheby2
ellip
equiripple
ifir
kaiserwin
multistage

関数 design を使用して、仕様に適合する等リップル FIR フィルターと楕円 IIR フィルターを設計します。

lpFIR = design(filtSpecs,'equiripple','SystemObject',true)
lpFIR = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [1.0908e-04 2.1016e-05 -2.3369e-04 -2.8798e-04 9.0899e-05 3.6470e-04 -5.3240e-05 -5.8338e-04 -1.6344e-04 7.4544e-04 4.8812e-04 -8.4772e-04 -9.5828e-04 7.9705e-04 0.0015 -5.2252e-04 -0.0022 -4.9607e-05 0.0028 ... ] (1x101 double)
    InitialConditions: 0

  Use get to show all properties

lpIIR = design(filtSpecs,'ellip','SystemObject',true)
lpIIR = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II'
    CoefficientSource: 'Property'
            Numerator: [5x3 double]
          Denominator: [5x3 double]
       HasScaleValues: true
          ScaleValues: [0.8017 0.7532 0.7030 1.2976 0.0087 1]

  Use get to show all properties

設計に対して measure を実行して、フィルターが制約を満たしているかどうかを確認することもできます。

FIRmeas = measure(lpFIR)
FIRmeas = 
Sample Rate      : 96 kHz      
Passband Edge    : 20 kHz      
3-dB Point       : 21.4297 kHz 
6-dB Point       : 21.8447 kHz 
Stopband Edge    : 24 kHz      
Passband Ripple  : 0.0092309 dB
Stopband Atten.  : 80.6014 dB  
Transition Width : 4 kHz       
 
IIRmeas = measure(lpIIR)
IIRmeas = 
Sample Rate      : 96 kHz     
Passband Edge    : 20 kHz     
3-dB Point       : 20.5524 kHz
6-dB Point       : 20.7138 kHz
Stopband Edge    : 24 kHz     
Passband Ripple  : 0.01 dB    
Stopband Atten.  : 80 dB      
Transition Width : 4 kHz      
 

cost を使用して、各フィルターの計算コストを推定して表示します。等リップル FIR フィルターは、楕円 IIR フィルターよりもさらに多くの係数を必要とします。

FIRcost = cost(lpFIR)
FIRcost = struct with fields:
                  NumCoefficients: 101
                        NumStates: 100
    MultiplicationsPerInputSample: 101
          AdditionsPerInputSample: 100

IIRcost = cost(lpIIR)
IIRcost = struct with fields:
                  NumCoefficients: 20
                        NumStates: 10
    MultiplicationsPerInputSample: 20
          AdditionsPerInputSample: 20

関数 fvtool を使用して、生成された設計を可視化し、特性を比較します。

hvft = fvtool(lpFIR,lpIIR,'Fs',Fs);
legend(hvft,'FIR Equiripple','Elliptic IIR')

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Frequency (kHz), ylabel Magnitude (dB) contains 2 objects of type line. These objects represent FIR Equiripple, Elliptic IIR.

通過帯域エッジ周波数が 0.4π ラジアン/サンプル、阻止帯域周波数が 0.5π ラジアン/サンプル、通過帯域リップルが 1 dB、阻止帯域の減衰量が 80 dB であるローパス バタワース フィルターを設計します。

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

lowpassSpecs = fdesign.lowpass(0.4,0.5,1,80);

仕様オブジェクトに対して使用できる設計法の一覧を表示するには、関数 designmethods を使用します。複数の方法を使用できる場合は、設計基準に最適なものを選択します。この例では、'butter' を選択します。

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


butter
cheby1
cheby2
ellip
equiripple
ifir
kaiserwin
multistage

さらに、フィルターの設計で使用する設計オプションを指定できます。使用可能なオプションの一覧を表示するには、lowpassSpecs に対して関数 designoptions を実行します。設計オプションは、選択した設計法によって異なります。設計法 (このケースでは 'butter') を関数 designoptions に対する引数として指定しなければなりません。

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

設計の一連の制約を満たすために必要なフィルター次数も整数値に切り上げなければなりません。これにより制約の一部が緩和され、結果として、設計仕様を満たすものと超過するものが生じます。'MatchExactly' オプションを使用すると、通過帯域または阻止帯域は仕様に完全に合致するようになりますが、それ以外の帯域では仕様を超過します。通過帯域が完全に仕様を満たすようにフィルターを設計します。

生成されるフィルターは、dsp.SOSFiter System object™ です。このフィルターをストリーミング データに適用する方法の詳細については、dsp.SOSFilterを参照してください。

IIRbutter = design(lowpassSpecs,"butter",MatchExactly="passband", ...
    SystemObject=true)
IIRbutter = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II'
    CoefficientSource: 'Property'
            Numerator: [16x3 double]
          Denominator: [16x3 double]
       HasScaleValues: true
          ScaleValues: [0.3390 0.3104 0.2866 0.2667 0.2500 0.2359 0.2241 0.2142 0.2059 0.1990 0.1935 0.1891 0.1858 0.1834 0.1820 0.4261 1]

  Use get to show all properties

fvtool を使用して、フィルターの振幅応答を可視化します。

fvtool(IIRbutter)

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) contains 2 objects of type line.

入力引数

すべて折りたたむ

次の表に、可能なフィルター応答を示します。

fdesign 応答メソッド

説明

arbgrpdelay

fdesign.arbgrpdelay は、オールパス任意群遅延フィルターを指定するためのオブジェクトを作成します。

arbmag

fdesign.arbmag は、入力引数によって定義された任意振幅応答をもつ IIR フィルターを指定するためのオブジェクトを作成します。

arbmagnphase

fdesign.arbmagnphase は、入力引数によって定義された任意振幅位相応答をもつ IIR フィルターを指定するためのオブジェクトを作成します。

bandpass

fdesign.bandpass は、バンドパス フィルターを指定するためのオブジェクトを作成します。

bandstop

fdesign.bandstop は、バンドストップ フィルターを指定するためのオブジェクトを作成します。

ciccomp

fdesign.ciccomp は、CIC 間引きまたは内挿の応答曲線の補正を行うフィルターを指定するためのオブジェクトを作成します。

comb

fdesign.comb は、ノッチまたはピークの櫛形フィルターを指定するためのオブジェクトを作成します。

decimator

fdesign.decimator は、間引きを指定するためのオブジェクトを作成します。

differentiator

fdesign.differentiator は、FIR 微分器フィルターを指定するためのオブジェクトを作成します。

fracdelay

fdesign.fracdelay は、非整数遅延フィルターを指定するためのオブジェクトを作成します。

halfband

fdesign.halfband は、ハーフバンド フィルターを指定するためのオブジェクトを作成します。

highpass

fdesign.highpass は、ハイパス フィルターを指定するためのオブジェクトを作成します。

hilbert

fdesign.hilbert は、FIR ヒルベルト変換器を指定するためのオブジェクトを作成します。

interpolator

fdesign.interpolator は、内挿を指定するためのオブジェクトを作成します。

isinchp

fdesign.isinchp は、逆 sinc ハイパス フィルターを指定するためのオブジェクトを作成します。

isinclp

fdesign.isinclp は、逆 sinc ローパス フィルターを指定するためのオブジェクトを作成します。

lowpass

fdesign.lowpass は、ローパス フィルターを指定するためのオブジェクトを作成します。

notch

fdesign.notch は、ノッチ フィルターを指定するためのオブジェクトを作成します。

nyquist

fdesign.nyquist は、ナイキスト フィルターを指定するためのオブジェクトを作成します。

peak

fdesign.peak は、ピーク フィルターを指定するためのオブジェクトを作成します。

polysrc

fdesign.polysrc は、多項式サンプルレート変換フィルターを指定するためのオブジェクトを作成します。

rsrc

fdesign.rsrc は、有理ファクター サンプルレート変換を指定するためのオブジェクトを作成します。

MATLAB プロンプトで doc fdesign.response の構文を使用して、特定の構造に関するヘルプを表示することができます。たとえば、次のコマンドはローパス仕様オブジェクトに関する詳細情報を提供します。

doc fdesign.lowpass

response には、フィルターの設計に使用する仕様を定義する Specification プロパティがあります。仕様オブジェクトを作成する際には、既定値を使用するか、Specification プロパティを指定します。

Specification プロパティを使用して、仕様オブジェクトからフィルターを作成する際に使用する、フィルター次数や通過帯域の減衰量などのフィルターの制約を指定できます。

フィルター設計仕様。文字ベクトルを指定します。使用可能な仕様オプションは、関数 fdesign.response に依存します。詳細については、個々の fdesign.response のページを参照してください。

フィルター設計は、fdesign.response オブジェクトで与えられた仕様に基づきます。たとえば、既定のローパス フィルター設計仕様オブジェクト fdesign.lowpass を作成すると、仕様の式が 'Fp,Fst,Ap,Ast' に設定されます。フィルター設計パラメーター Fp (通過帯域周波数)、Fst (阻止帯域周波数)、Ap (通過帯域リップル) および Ast (阻止帯域の減衰量) は、既定値に設定されます。関数 design は、これらのパラメーターに基づいてフィルターを設計します。

フィルター次数が含まれていない仕様で関数 design を呼び出すと、最小次数の設計になります。

d = fdesign.lowpass;      % Specification is 'Fp,Fst,Ap,Ast'
FIReq = design(d,'equiripple','SystemObject',true);
length(FIReq.Numerator)           % Returns 43. The filter order is 42

選択した仕様オプションによって、適用される設計法が決まります。関数 setspecs を使用すると、すべての仕様を同時に設定できます。

フィルター仕様の値は、Specification 引数の後に渡すか、Specification のない値を渡すことによって設定します。

フィルター オブジェクト コンストラクターは、setspecs および Specification と同じ順序で入力引数を取ります。

fdesign.response に対する最初の入力が有効な Specification オプションではない場合、fdesign はこの入力引数がフィルター仕様であると仮定し、既定の Specification オプションを使用して適用します。たとえば、'Fp,Fst,Ap,Ast' はローパス オブジェクトの既定値です。

フィルター仕様で使用するサンプル レート。Hz 単位で指定します。サンプル レートのスカラーは、最後の入力引数でなければなりません。サンプル レートを指定した場合、すべての周波数仕様は Hz 単位になります。

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

振幅仕様の単位。以下を指定します。

  • 'dB' –– デシベル

  • 'linear' –– 線形単位

  • 'squared' –– パワー単位

引数 magunits が省略された場合、fdesign はすべての振幅を dB 単位として扱います。fdesign はすべての振幅仕様を dB 単位で格納することに注意してください。magunits'dB' 以外のオプションに設定した場合、単位が 'dB' に変換されます。

出力引数

すべて折りたたむ

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

プロパティ名

既定値

説明

Response

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

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

Specification

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

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

Description

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

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

NormalizedFrequency

logical true

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

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

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

説明

DecimationFactor

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

InterpolationFactor

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

PolyphaseLength

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

詳細

すべて折りたたむ

フィルターの設計手順

フィルターを設計および解析するための全体的な手順のワークフロー図は、次のようになります。

詳細なステップは以下のとおりです。

  1. fdesign.response 仕様オブジェクトを作成して、設計パラメーターを指定します。

  2. designmethods を使用して、新しいフィルター仕様オブジェクトに適したフィルター設計法を決定します。既定の設計法を使用する場合、このステップはオプションです。

  3. 設計オプションを変更する場合、使用可能なオプションの一覧を表示するには、仕様オブジェクトに対して関数 designoptions を実行します。この出力には、フィルターで使用する既定の設計オプションも表示されます。

  4. design を使用して、フィルター仕様オブジェクトからフィルターを設計します。(ステップ 2 で決定した) 設計法を入力として指定します。設計オプションを既定値から変更しなければならない場合は、設計法に続けて名前と値のペアとして指定します。

    出力引数なしで関数 design を呼び出した場合、FVTool が起動し、設計したフィルターの振幅応答が表示されます。

    あるいは、関数 fvtool を使用します。

  5. フィルターの周波数応答の表示、フィルターの実装コストの計算、フィルターの応答特性の測定など、さらに解析を行うには、サポートされているいずれかのAnalysis Functions for Filter System Objectsを使用できます。

  6. フィルターを解析して、フィルターが設計の制約を満たすと判断できたら、フィルター オブジェクトをストリーミング入力データに適用できます。データをフィルター オブジェクトに渡す方法の詳細については、対応するフィルター System object™ のリファレンス ページを参照してください。

設計と解析に関する詳細な例については、ローパス バタワース フィルターの仕様と設計を参照してください。

バージョン履歴

R2009a で導入