fdesign
フィルター設計仕様オブジェクト
構文
説明
関数 fdesign を使用して、通過帯域リップル、阻止帯域の減衰量、フィルター次数などのフィルターの仕様が含まれているフィルター設計仕様オブジェクトを作成します。その後、関数 design を使用して、フィルター設計仕様オブジェクトからフィルターを設計します。例については、ローパス間引きの設計を参照してください。
次のワークフロー図に、ストリーミング データに対するフィルターを設計、解析および適用するためのシンプルな手順を示します。

制御オプションの詳細については、フィルターの設計手順を参照してください。完全なワークフローについては、Fdesign でのフィルターの設計 — プロセスの概要を参照してください。
は、与えられた designSpecs = fdesign.response をもつフィルターに対する設計仕様オブジェクトを返します。response
では、フィルター設計を定義するために使用する変数を指定します。フィルター設計パラメーターは、使用するフィルターに対して選択したフィルター設計法に適用されます。選択した仕様オプションによって、designSpecs = fdesign.response(spec)fdesign オブジェクトに適用される設計法が決まります。
は、フィルター仕様で使用するサンプル レートを Hz 単位で指定します。サンプル レートのスカラーは、最後の入力引数でなければなりません。サンプル レートを指定した場合、すべての周波数仕様は Hz 単位になります。designSpecs = fdesign.response(___,Fs)
は、入力引数で与える振幅仕様の単位を指定します。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 … ] (1×100 double)
Structure: 'Direct form'
Show all properties
info を使用して、フィルターに関する情報を表示します。
info(decimFIR)
ans = 10×56 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 '
フィルターの周波数応答を可視化します。
freqz(decimFIR,[],Fs)

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 … ] (1×101 double)
InitialConditions: 0
Show all properties
lpIIR = design(filtSpecs,'ellip',SystemObject=true)lpIIR =
dsp.SOSFilter with properties:
Structure: 'Direct form II'
CoefficientSource: 'Property'
Numerator: [5×3 double]
Denominator: [5×3 double]
HasScaleValues: true
ScaleValues: [0.8017 0.7532 0.7030 1.2976 0.0087 1]
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
filterAnalyzer 関数を使用して、生成された設計を可視化し、特性を比較します。
hvft = filterAnalyzer(lpFIR,lpIIR,SampleRates=Fs); setLegendStrings(hvft,["FIR Equiripple","Elliptic IIR"])

通過帯域エッジ周波数が ラジアン/サンプル、阻止帯域周波数が ラジアン/サンプル、通過帯域リップルが 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: [1×1 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: [16×3 double]
Denominator: [16×3 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]
Show all properties
フィルターの振幅応答を可視化します。
filterAnalyzer(IIRbutter)

入力引数
次の表に、可能なフィルター応答を示します。
fdesign 応答メソッド | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MATLAB プロンプトで doc fdesign.response の構文を使用して、特定の構造に関するヘルプを表示することができます。たとえば、次のコマンドはローパス仕様オブジェクトに関する詳細情報を提供します。
doc fdesign.lowpass
各 response には、フィルターの設計に使用する仕様を定義する Specification プロパティがあります。仕様オブジェクトを作成する際には、既定値を使用するか、Specification プロパティを指定します。
Specification プロパティを使用して、仕様オブジェクトからフィルターを作成する際に使用する、フィルター次数や通過帯域の減衰量などのフィルターの制約を指定できます。
フィルター設計仕様。文字ベクトルを指定します。使用可能な仕様オプションは、関数 fdesign. に依存します。詳細については、個々の responsefdesign. のページを参照してください。response
フィルター設計は、fdesign. オブジェクトで与えられた仕様に基づきます。たとえば、既定のローパス フィルター設計仕様オブジェクト responsefdesign.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. に対する最初の入力が有効な responseSpecification オプションではない場合、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 は、フィルター設計仕様オブジェクトを返します。すべてのフィルター設計仕様オブジェクトに、以下のプロパティがあります。
プロパティ名 | 既定値 | 説明 |
|---|---|---|
| 選択したタイプにより異なる | 内挿器やバンドパス フィルターなどの、設計するフィルターのタイプを定義。この値は読み取り専用です。 |
| 選択したタイプにより異なる | カットオフ周波数 |
| 選択したフィルター タイプにより異なる | オブジェクトの定義に使用するフィルター仕様の記述と、オブジェクトからフィルターを作成する際に使用するフィルター仕様を含む。この値は読み取り専用です。 |
| logical | フィルターの計算で、0 ~ 1 の正規化周波数と 0 ~ Fs/2 の周波数帯域のどちらをサンプリング周波数として使用するかを決定します。 |
フィルター仕様設計オブジェクトには、シングルレート フィルターとマルチレート フィルターのどちらを設計するかによって、これらのプロパティ以外のプロパティも含めることができます。
マルチレート フィルターの場合に追加されるプロパティ | 説明 |
|---|---|
| サンプル レートを下げるための量を指定します。常に正の整数です。 |
| サンプル レートを上げるための量を指定します。常に正の整数です。 |
| ポリフェーズの長さは、間引きフィルター、内挿フィルターまたはレート変換率フィルターを構成する各ポリフェーズ サブフィルターの長さです。フィルター全体の長さは |
詳細
フィルターを設計および解析するための全体的な手順のワークフロー図は、次のようになります。

詳細なステップは以下のとおりです。
fdesign.仕様オブジェクトを作成して、設計パラメーターを指定します。responsedesignmethodsを使用して、新しいフィルター仕様オブジェクトに適したフィルター設計法を決定します。既定の設計法を使用する場合、このステップはオプションです。設計オプションを変更する場合、使用可能なオプションの一覧を表示するには、仕様オブジェクトに対して関数
designoptionsを実行します。この出力には、フィルターで使用する既定の設計オプションも表示されます。designを使用して、フィルター仕様オブジェクトからフィルターを設計します。(ステップ 2 で決定した) 設計法を入力として指定します。設計オプションを既定値から変更しなければならない場合は、設計法に続けて名前と値のペアとして指定します。フィルターの周波数応答の表示、フィルターの実装コストの計算、フィルターの応答特性の測定など、さらに解析を行うには、サポートされているいずれかのAnalysis Functions for Filter System Objectsを使用できます。
フィルターを解析して、フィルターが設計の制約を満たすと判断できたら、フィルター オブジェクトをストリーミング入力データに適用できます。データをフィルター オブジェクトに渡す方法の詳細については、対応するフィルター System object™ のリファレンス ページを参照してください。
設計と解析に関する詳細な例については、ローパス バタワース フィルターの仕様と設計を参照してください。
バージョン履歴
R2009a で導入
参考
アプリ
関数
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)