Fdesign でのフィルターの設計 — プロセスの概要
プロセス フロー図とフィルター設計法
メモ
プロセス フロー図の検討
下に示すプロセス フロー図は、フィルター設計プロセスのステップと順番を示しています。
フィルター設計プロセスの最初の 4 ステップは、仕様オブジェクトのフィルター処理に関連するもので、最後の 2 ステップは実装オブジェクトに関連します。これらのオブジェクトについては、以下の節で詳しく説明します。ステップ 5 のフィルターの設計は、フィルターの仕様オブジェクトから実装オブジェクトへの遷移ステップです。分析および検証のステップはオプションです。このステップでは、フィルターの設計者に対し、フィルターがすべての設計基準を確実に満たすような設計法が提供されます。この検証の結果により、ステップ 3 と 4 に戻って他のアルゴリズムを選択するか、現在のアルゴリズムをカスタマイズすることができます。また、設計したフィルターで入力データをフィルター処理 (ステップ 7) した後でも、ステップ 3 または 4 に戻ってフィルターを調整するか、変更することができます。
図には、各ステップに対するヘルプ コマンドを示してあります。MATLAB® コマンド プロンプトでヘルプ行を入力すると、手順の説明を表示したり、特定のステップに対するドキュメンテーションへのリンクが表示されます。すべてのステップを明示的に実行する必要はありません。たとえば、ステップ 1 からステップ 5 に直接進み、省略した 3 つのステップはソフトウェアによって実行することができます。
以下に、上記の各ステップを詳細に説明します。
応答の選択
以下のように入力する場合:
help fdesign/responses
フィルターを初期化するためには応答を選択する必要があります。この例では、次のように入力して、バンドパス フィルター仕様オブジェクトを作成します。
d = fdesign.bandpass
仕様の選択
"Specification" は、特定のフィルターに対する設計パラメーターの配列です。Specification は、仕様オブジェクトのプロパティです。
メモ
Specification と仕様オブジェクトは同じものではありません。仕様オブジェクトには、specification がプロパティの 1 つとして含まれています。
フィルター応答を選択する際には、さまざまの異なった Specification を使用できます。各 Specification は、異なる組み合わせの設計パラメーターを含みます。フィルターの仕様オブジェクトを作成した後で、その応答に対して使用可能な Specification をクエリできます。アスタリスク付きの Specification では、DSP System Toolbox™ が必要です。
d = fdesign.bandpass; % step 1 - choose the response set (d, 'specification')
ans = 16×1 cell array 'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2' 'N,F3dB1,F3dB2' 'N,F3dB1,F3dB2,Ap' 'N,F3dB1,F3dB2,Ast' 'N,F3dB1,F3dB2,Ast1,Ap,Ast2' 'N,F3dB1,F3dB2,BWp' 'N,F3dB1,F3dB2,BWst' 'N,Fc1,Fc2' 'N,Fc1,Fc2,Ast1,Ap,Ast2' 'N,Fp1,Fp2,Ap' 'N,Fp1,Fp2,Ast1,Ap,Ast2' 'N,Fst1,Fp1,Fp2,Fst2' 'N,Fst1,Fp1,Fp2,Fst2,C' 'N,Fst1,Fp1,Fp2,Fst2,Ap' 'N,Fst1,Fst2,Ast' 'Nb,Na,Fst1,Fp1,Fp2,Fst2'
d = fdesign.arbmag;
set(d,'specification')
ans = 7×1 cell array 'N,F,A' 'F,A,R' 'Nb,Na,F,A' 'N,B,F,A' 'N,B,F,A,C' 'B,F,A,R' 'Nb,Na,B,F,A'
以下に示すように、set
コマンドは使用可能な Specification を選択するために使用できます。
d = fdesign.lowpass; % step 1: get a list of available specifications set (d, 'specification')
ans = 18×1 cell array 'Fp,Fst,Ap,Ast' 'N,F3dB' 'Nb,Na,F3dB' 'N,F3dB,Ap' 'N,F3dB,Ap,Ast' 'N,F3dB,Ast' 'N,F3dB,Fst' 'N,Fc' 'N,Fc,Ap,Ast' 'N,Fp,Ap' 'N,Fp,Ap,Ast' 'N,Fp,F3dB' 'N,Fp,Fst' 'N,Fp,Fst,Ap' 'N,Fp,Fst,Ast' 'N,Fst,Ap,Ast' 'N,Fst,Ast' 'Nb,Na,Fp,Fst'
% step 2: set the required specification set (d, 'specification', 'N,Fc')
fdesign
は応答の選択で選択した応答に既定の Specification を返し、それに含まれるすべての設計パラメーターに対する既定値を提供します。 アルゴリズムの選択
使用できるアルゴリズムは、選択したフィルター応答、設計パラメーター、DSP System Toolbox を使用できるかどうかにより異なります。つまり、同じローパス フィルターでも、Specification エントリを変更すると使用可能なアルゴリズムが変化します。以下の例では、ローパス フィルターおよび 'N, Fc'
の Specification に対し、使用可能なアルゴリズムは window
1 つのみです。
% step 2: set the required specification set (d, 'specification', 'N,Fc') % step 3: get available algorithms designmethods (d,'Systemobject',true)
Design Methods that support System objects for class fdesign.lowpass (N,Fc): window
'Fp,Fst,Ap,Ast'
の Specification に対しては、数多くのアルゴリズムが使用できます。 set(d, 'specification', 'Fp,Fst,Ap,Ast') designmethods(d,'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
を使用して、フィルターを実装します。 filt = design(d,'butter','Systemobject',true)
filt = dsp.SOSFilter with properties: Structure: 'Direct form II' CoefficientSource: 'Property' Numerator: [13×3 double] Denominator: [13×3 double] HasScaleValues: true ScaleValues: [0.4151 0.3718 0.3374 ...] Show all properties
filt
はフィルター実装オブジェクトです。この概念については、次の手順でさらに詳しく説明します。このステップを明示的に行わない場合、関数 design
により、選択した応答と Specification に対して最適のアルゴリズムが自動的に選択されます。
アルゴリズムのカスタマイズ
任意のアルゴリズムについて使用可能なカスタマイズ オプションは、アルゴリズムの選択で選択したアルゴリズム自体だけでなく、仕様の選択で選択した Specification にも依存します。使用可能なすべてのオプションを調べるには、MATLAB コマンド プロンプトで以下のように入力します。
help (d, 'algorithm-name')
d
はフィルター仕様オブジェクト、algorithm-name
は 'butter'
や 'cheby1'
のような一重引用符で囲んだアルゴリズム名です。 これらのカスタマイズ オプションの適用はフィルターの設計で行われます。これらのオプションはフィルターの仕様オブジェクトではなく、実装オブジェクトのプロパティであるためです。
このステップを明示的に行わない場合は、最適なアルゴリズムが選択されます。
フィルターの設計
フィルターを作成するために、design
コマンドを使用します。
% Design filter without specifying the algorithm filt = design(d,'Systemobject',true);
filt
はフィルター オブジェクト、d
は仕様オブジェクトです。このコードでは、アルゴリズムを指定せずにフィルターが作成されます。アルゴリズムが指定されていない場合は、MATLAB によって最適なアルゴリズムが選択されます。 アルゴリズムの選択で選択したアルゴリズムを適用するには、同じ design
コマンドを使用しますが、次のようにアルゴリズムを指定します。
filt = design(d,'butter','Systemobject',true)
filt = dsp.SOSFilter with properties: Structure: 'Direct form II' CoefficientSource: 'Property' Numerator: [13×3 double] Denominator: [13×3 double] HasScaleValues: true ScaleValues: [0.4151 0.3718 0.3374 … ] Show all properties
filt
は新しいフィルター オブジェクト、d
は仕様オブジェクトです。ヘルプを表示し、使用可能なすべてのオプションを調べるには、以下を入力します。
help fdesign/design
design
コマンドのオプションだけでなく、手法やアルゴリズムに関連するオプションについても説明するものです。アルゴリズムをカスタマイズする場合は、これらのオプションをこのステップで適用します。以下の例では、バンドパス フィルターを設計してフィルター構造を変更します。filt = design(d, 'butter', 'filterstructure', 'df2sos','Systemobject',true)
filt = dsp.SOSFilter with properties: Structure: 'Direct form II' CoefficientSource: 'Property' Numerator: [13×3 double] Denominator: [13×3 double] HasScaleValues: true ScaleValues: [0.4151 0.3718 0.3374 … ] Show all properties
フィルター設計のステップは、応答を選択した最初の作業のように、明示的に行われる必要があります。フィルター オブジェクトは、design
が呼び出されたときにのみ作成されます。
設計の解析
フィルターを設計した後で、フィルターが設計基準を満たすかどうかを判断するために解析を行うことができます。フィルター解析は次の主要なセクションに分かれています。
離散時間フィルターの解析法のリストを表示するには、MATLAB コマンド プロンプトで次のように入力します。
dsp.<sysobjName>.helpFilterAnalysis
<sysobjName>
を System object™ の名前に置き換えます。または、フィルター解析カテゴリの下にある解析法のリストを参照することもできます。
フィルターを解析するには、このステップを明示的に行わなければなりません。
フィルターの入力データへの実現または適用
フィルターを設計および最適化したら、実際の入力データのフィルター処理に使用できます。
y = filt(x)
メモ
y = filt(x)
は R2016b 以降でのみ動作します。それ以前のリリースを使用している場合は、y = filt(x)
を y = step(filt,x)
に置き換えます。
メモ
Simulink® を使用している場合は、realizemdl
コマンドを使ってこのフィルターを Simulink ブロックにエクスポートすることもできます。このコマンドのヘルプを表示するには、以下を入力します。
help realizemdl