このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 ... ] (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 '
フィルターの周波数応答を可視化します。
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 9.6719e-04 -0.0032 … ] InitialConditions: 0 Show all properties
lpIIR = design(filtSpecs,'ellip','SystemObject',true)
lpIIR = dsp.BiquadFilter with properties: Structure: 'Direct form II' SOSMatrixSource: 'Property' SOSMatrix: [5×6 double] ScaleValues: [6×1 double] InitialConditions: 0 OptimizeUnityScaleValues: true 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')
ローパス バタワース フィルターの仕様と設計
通過帯域エッジ周波数が ラジアン/サンプル、阻止帯域周波数が ラジアン/サンプル、通過帯域リップルが 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
フィルターの振幅応答を可視化します。
filterAnalyzer(IIRbutter)
入力引数
response
— 目的のフィルター応答
応答エントリ
次の表に、可能なフィルター応答を示します。
fdesign 応答メソッド | 説明 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MATLAB プロンプトで doc fdesign.
response
の構文を使用して、特定の構造に関するヘルプを表示することができます。たとえば、次のコマンドはローパス仕様オブジェクトに関する詳細情報を提供します。
doc fdesign.lowpass
各 response
には、フィルターの設計に使用する仕様を定義する Specification
プロパティがあります。仕様オブジェクトを作成する際には、既定値を使用するか、Specification
プロパティを指定します。
Specification
プロパティを使用して、仕様オブジェクトからフィルターを作成する際に使用する、フィルター次数や通過帯域の減衰量などのフィルターの制約を指定できます。
spec
— フィルター設計仕様
文字ベクトル
フィルター設計仕様。文字ベクトルを指定します。使用可能な仕様オプションは、関数 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'
はローパス オブジェクトの既定値です。
Fs
— サンプル レート
スカラー
フィルター仕様で使用するサンプル レート。Hz 単位で指定します。サンプル レートのスカラーは、最後の入力引数でなければなりません。サンプル レートを指定した場合、すべての周波数仕様は Hz 単位になります。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
magunits
— 振幅仕様の単位
'dB'
(既定値) | 'linear'
| 'squared'
振幅仕様の単位。以下を指定します。
'dB'
–– デシベル'linear'
–– 線形単位'squared'
–– パワー単位
引数 magunits
が省略された場合、fdesign
はすべての振幅を dB 単位として扱います。fdesign
はすべての振幅仕様を dB 単位で格納することに注意してください。magunits
を 'dB'
以外のオプションに設定した場合、単位が 'dB'
に変換されます。
出力引数
designSpecs
— フィルター設計仕様オブジェクト
fdesign.response
オブジェクト
response
fdesign
は、フィルター設計仕様オブジェクトを返します。すべてのフィルター設計仕様オブジェクトに、以下のプロパティがあります。
プロパティ名 | 既定値 | 説明 |
---|---|---|
| 選択したタイプにより異なる | 内挿器やバンドパス フィルターなどの、設計するフィルターのタイプを定義。この値は読み取り専用です。 |
| 選択したタイプにより異なる | カットオフ周波数 |
| 選択したフィルター タイプにより異なる | オブジェクトの定義に使用するフィルター仕様の記述と、オブジェクトからフィルターを作成する際に使用するフィルター仕様を含む。この値は読み取り専用です。 |
| logical | フィルターの計算で、0 ~ 1 の正規化周波数と 0 ~ Fs/2 の周波数帯域のどちらをサンプリング周波数として使用するかを決定します。 |
フィルター仕様設計オブジェクトには、シングルレート フィルターとマルチレート フィルターのどちらを設計するかによって、これらのプロパティ以外のプロパティも含めることができます。
マルチレート フィルターの場合に追加されるプロパティ | 説明 |
---|---|
| サンプリング レートを下げるための量を指定します。常に正の整数です。 |
| サンプリング レートを上げるための量を指定します。常に正の整数です。 |
| ポリフェーズの長さは、間引きフィルター、内挿フィルターまたはレート変換率フィルターを構成する各ポリフェーズ サブフィルターの長さです。フィルター全体の長さは |
詳細
フィルターの設計手順
フィルターを設計および解析するための全体的な手順のワークフロー図は、次のようになります。
詳細なステップは以下のとおりです。
fdesign.
仕様オブジェクトを作成して、設計パラメーターを指定します。response
designmethods
を使用して、新しいフィルター仕様オブジェクトに適したフィルター設計法を決定します。既定の設計法を使用する場合、このステップはオプションです。設計オプションを変更する場合、使用可能なオプションの一覧を表示するには、仕様オブジェクトに対して関数
designoptions
を実行します。この出力には、フィルターで使用する既定の設計オプションも表示されます。design
を使用して、フィルター仕様オブジェクトからフィルターを設計します。(ステップ 2 で決定した) 設計法を入力として指定します。設計オプションを既定値から変更しなければならない場合は、設計法に続けて名前と値のペアとして指定します。出力引数なしで関数
design
を呼び出した場合、FVTool が起動し、設計したフィルターの振幅応答が表示されます。あるいは、関数
fvtool
を使用します。フィルターの周波数応答の表示、フィルターの実装コストの計算、フィルターの応答特性の測定など、さらに解析を行うには、サポートされているいずれかのAnalysis Functions for Filter System Objectsを使用できます。
フィルターを解析して、フィルターが設計の制約を満たすと判断できたら、フィルター オブジェクトをストリーミング入力データに適用できます。データをフィルター オブジェクトに渡す方法の詳細については、対応するフィルター System object™ のリファレンス ページを参照してください。
設計と解析に関する詳細な例については、ローパス バタワース フィルターの仕様と設計を参照してください。
バージョン履歴
R2009a で導入
参考
アプリ
関数
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)