Main Content

Fdesign でのフィルターの設計 — プロセスの概要

プロセス フロー図とフィルター設計法

メモ

プロセス フロー図の検討

下に示すプロセス フロー図は、フィルター設計プロセスのステップと順番を示しています。

フィルター設計プロセスの最初の 4 ステップは、仕様オブジェクトのフィルター処理に関連するもので、最後の 2 ステップは実装オブジェクトに関連します。これらのオブジェクトについては、以下の節で詳しく説明します。ステップ 5 のフィルターの設計は、フィルターの仕様オブジェクトから実装オブジェクトへの遷移ステップです。分析および検証のステップはオプションです。このステップでは、フィルターの設計者に対し、フィルターがすべての設計基準を確実に満たすような設計法が提供されます。この検証の結果により、ステップ 3 と 4 に戻って他のアルゴリズムを選択するか、現在のアルゴリズムをカスタマイズすることができます。また、設計したフィルターで入力データをフィルター処理 (ステップ 7) した後でも、ステップ 3 または 4 に戻ってフィルターを調整するか、変更することができます。

図には、各ステップに対するヘルプ コマンドを示してあります。MATLAB® コマンド プロンプトでヘルプ行を入力すると、手順の説明を表示したり、特定のステップに対するドキュメンテーションへのリンクが表示されます。すべてのステップを明示的に実行する必要はありません。たとえば、ステップ 1 からステップ 5 に直接進み、省略した 3 つのステップはソフトウェアによって実行することができます。

以下に、上記の各ステップを詳細に説明します。

応答の選択

以下のように入力する場合:

help fdesign/responses
MATLAB コマンド プロンプトで、使用可能なすべてのフィルター応答の一覧が表示されます。

フィルターを初期化するためには応答を選択する必要があります。この例では、次のように入力して、バンドパス フィルター仕様オブジェクトを作成します。

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 が呼び出されたときにのみ作成されます。

設計の解析

フィルターを設計した後で、フィルターが設計基準を満たすかどうかを判断するために解析を行うことができます。フィルター解析は次の主要なセクションに分かれています。

  • 周波数領域解析 — 周波数応答、群遅延、極-零点プロット、関数 freqzgrpdelayzplane、および phasez による位相応答が含まれます。

  • 時間領域解析 — 関数 impz および stepz によるインパルス応答とステップ応答が含まれます。

  • 実装解析 — フィルター実装のコスト推定、丸めノイズによるフィルター出力のパワー スペクトル密度、関数 costnoisepsd、および freqrespest によるフィルターの周波数応答推定が含まれます。

離散時間フィルターの解析法のリストを表示するには、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