Main Content

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

designfilt

デジタル フィルターの設計

designfilt は、スクリプトや関数内での関数の呼び出しの修正には使用できなくなりました。詳細については、互換性の考慮事項を参照してください。

説明

d = designfilt(resp,Name,Value) は、応答タイプ respdigitalFilter オブジェクト d を設計します。resp の例には、'lowpassfir''bandstopiir' があります。さらに、名前と値の引数のセットを使用してフィルターを規定します。どのような仕様セットが使用可能であるかは、resp によって異なり、以下の組み合わせにより構成されます。

  • "周波数制約" は、フィルターにより目的の動作が提示される周波数に相当します。例としては 'PassbandFrequency''CutoffFrequency' があります。周波数制約は常に指定しなければなりません。

  • "振幅の制約" では、特定の周波数範囲でのフィルターの動作を記述します。例としては 'PassbandRipple''StopbandAttenuation' があります。未指定の振幅の制約には、designfilt により既定値が設定されます。任意振幅の設計では、目的の振幅のベクトルを必ず指定しなければなりません。

  • フィルター次数:一部の設計法では次数を指定できます。それ以外では最小次数設計が生成されます。つまり、指定された制約を満たす最小のフィルターが生成されます。

  • "設計法" はフィルターの設計に使用されるアルゴリズムです。例としては、制約付き最小二乗 ('cls') とカイザー ウィンドウ処理 ('kaiserwin') があります。仕様セットによっては、選択可能な設計法は複数あります。それ以外の場合、目的の仕様を満たすために利用できる設計法は 1 つのみです。

  • "設計法オプション" は、特定の設計法に特有のパラメーターです。例としては、'window' 法の 'Window' と、任意振幅等リップル設計の最適化用の 'Weights' があります。指定されなかった設計オプションに対しては、designfilt により既定値が設定されます。

  • "サンプル レート" は、フィルター処理の対象となる周波数です。designfilt の既定サンプル レートは 2 Hz です。この値を使用することで、正規化周波数による処理相当になります。

メモ

コマンド ラインに不完全なまたは矛盾する名前と値の引数のセットを指定すると、フィルター設計アシスタントを開くよう、designfilt により提案されます。このアシスタントは、フィルターの設計を支援し、修正した MATLAB® コードをコマンド ラインに貼り付けます。

正しくない仕様セットを使用してスクリプトまたは関数から designfilt を呼び出すと、designfiltフィルター設計アシスタントを開くリンクのついたエラー メッセージを発行します。このアシスタントは、フィルターの設計を支援し、修正した MATLAB コードをコマンド ラインに貼り付けます。設計したフィルターはワークスペースに保存されます。

  • digitalFilter d で入力信号 dataIn をフィルター処理するには、関数 filterdataOut = filter(d,dataIn) の形式で使用します。IIR フィルターの場合、関数 filter は直接型 II の実装を使用します。関数 filtfiltfftfiltdigitalFilter オブジェクトと使用することもできます。

  • フィルター d を可視化するには、FVTool を使用します。

  • d.Coefficients と入力すると digitalFilter d の係数が得られます。IIR フィルターでは、係数は 2 次セクションとして表されます。

  • digitalFilter オブジェクトで使用可能なフィルター処理関数および解析関数のリストについては、digitalFilter を参照してください。

designfilt(d) を使用することにより既存のデジタル フィルター d の編集が可能です。フィルター仕様が読み込まれたフィルター設計アシスタントが開かれ、その内容を変更できます。この方法によってのみ、digitalFilter オブジェクトは編集できます。それ以外の場合、このオブジェクトのプロパティは読み取り専用です。

すべて折りたたむ

低域カットオフ周波数が 400 Hz で、高域カットオフ周波数が 450 Hz である 20 次のバンドパス FIR フィルターを設計します。サンプル レートは 1500 Hz です。

bpfilt = designfilt('bandpassfir', ...
    'FilterOrder',20,'CutoffFrequency1',400, ...
    'CutoffFrequency2',450,'SampleRate',1500);

フィルターの振幅応答を可視化します。

freqz(bpfilt.Coefficients,1,[],1500)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (Hz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

これを使用して、1,000 サンプルのランダム信号をフィルター処理します。

dataIn = randn(1000,1);
dataOut = filter(bpfilt,dataIn);

低域側の 3 dB の周波数が 400 Hz で、高域側の 3 dB の周波数が 450 Hz である 20 次のバンドパス IIR フィルターを設計します。サンプル レートは 1500 Hz です。

bpfilt = designfilt('bandpassiir', ...
    'FilterOrder',20,'HalfPowerFrequency1',400, ...
    'HalfPowerFrequency2',450,'SampleRate',1500);

フィルターの周波数応答を可視化します。

freqz(bpfilt.Coefficients,[],1500)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (Hz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

これを使用して、1,000 サンプルのランダム信号をフィルター処理します。

dataIn = randn(1000,1);
dataOut = filter(bpfilt,dataIn);

入力引数

すべて折りたたむ

フィルター応答およびタイプ。文字ベクトルまたは string スカラーで指定します。

このオプションを選択して有限インパルス応答 (FIR) ローパス フィルターを設計します。次の例では、この表の 5 番目の仕様セットが使用されています。

d = designfilt('lowpassfir', ...        % Response type
       'FilterOrder',25, ...            % Filter order
       'PassbandFrequency',400, ...     % Frequency constraints
       'StopbandFrequency',550, ...
       'DesignMethod','ls', ...         % Design method
       'PassbandWeight',1, ...          % Design method options
       'StopbandWeight',2, ...
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' (必須の場合) またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 振幅の制約を省略すると、designfilt は既定値を使用します。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

このオプションを選択して無限インパルス応答 (IIR) ローパス フィルターを設計します。次の例では、この表の 1 番目の仕様セットが使用されています。

d = designfilt('lowpassiir', ...        % Response type
       'PassbandFrequency',400, ...     % Frequency constraints
       'StopbandFrequency',550, ...
       'PassbandRipple',4, ...          % Magnitude constraints
       'StopbandAttenuation',55, ...
       'DesignMethod','ellip', ...      % Design method
       'MatchExactly','passband', ...   % Design method options
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' (必須の場合) またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 振幅の制約を省略すると、designfilt は既定値を使用します。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

このオプションを選択して有限インパルス応答 (FIR) ハイパス フィルターを設計します。次の例では、この表の 1 番目の仕様セットが使用されています。

d = designfilt('highpassfir', ...       % Response type
       'StopbandFrequency',400, ...     % Frequency constraints
       'PassbandFrequency',550, ...
       'StopbandAttenuation',55, ...    % Magnitude constraints
       'PassbandRipple',4, ...
       'DesignMethod','kaiserwin', ...  % Design method
       'ScalePassband',false, ...       % Design method options
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' (必須の場合) またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 振幅の制約を省略すると、designfilt は既定値を使用します。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

このオプションを選択して無限インパルス応答 (IIR) ハイパス フィルターを設計します。次の例では、この表の 1 番目の仕様セットが使用されています。

d = designfilt('highpassiir', ...       % Response type
       'StopbandFrequency',400, ...     % Frequency constraints
       'PassbandFrequency',550, ...
       'StopbandAttenuation',55, ...    % Magnitude constraints
       'PassbandRipple',4, ...
       'DesignMethod','cheby1', ...     % Design method
       'MatchExactly','stopband', ...   % Design method options
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' (必須の場合) またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 振幅の制約を省略すると、designfilt は既定値を使用します。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

このオプションを選択して有限インパルス応答 (FIR) バンドパス フィルターを設計します。次の例では、この表の 4 番目の仕様セットが使用されています。

d = designfilt('bandpassfir', ...       % Response type
       'FilterOrder',86, ...            % Filter order
       'StopbandFrequency1',400, ...    % Frequency constraints
       'PassbandFrequency1',450, ...
       'PassbandFrequency2',600, ...
       'StopbandFrequency2',650, ...
       'DesignMethod','ls', ...         % Design method
       'StopbandWeight1',1, ...         % Design method options
       'PassbandWeight', 2, ...
       'StopbandWeight2',3, ...
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' (必須の場合) またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 振幅の制約を省略すると、designfilt は既定値を使用します。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

このオプションを選択して無限インパルス応答 (IIR) バンドパス フィルターを設計します。次の例では、この表の 1 番目の仕様セットが使用されています。

d = designfilt('bandpassiir', ...       % Response type
       'StopbandFrequency1',400, ...    % Frequency constraints
       'PassbandFrequency1',450, ...
       'PassbandFrequency2',600, ...
       'StopbandFrequency2',650, ...
       'StopbandAttenuation1',40, ...   % Magnitude constraints
       'PassbandRipple',1, ...
       'StopbandAttenuation2',50, ...
       'DesignMethod','ellip', ...      % Design method
       'MatchExactly','passband', ...   % Design method options
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' (必須の場合) またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 振幅の制約を省略すると、designfilt は既定値を使用します。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

このオプションを選択して有限インパルス応答 (FIR) バンドストップ フィルターを設計します。次の例では、この表の 4 番目の仕様セットが使用されています。

d = designfilt('bandstopfir', ...       % Response type
       'FilterOrder',32, ...            % Filter order
       'PassbandFrequency1',400, ...    % Frequency constraints
       'StopbandFrequency1',500, ...
       'StopbandFrequency2',700, ...
       'PassbandFrequency2',850, ...
       'DesignMethod','ls', ...         % Design method
       'PassbandWeight1',1, ...         % Design method options
       'StopbandWeight', 3, ...
       'PassbandWeight2',5, ...
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' (必須の場合) またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 振幅の制約を省略すると、designfilt は既定値を使用します。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

このオプションを選択して無限インパルス応答 (IIR) バンドストップ フィルターを設計します。次の例では、この表の 1 番目の仕様セットが使用されています。

d = designfilt('bandstopiir', ...       % Response type
       'PassbandFrequency1',400, ...    % Frequency constraints
       'StopbandFrequency1',500, ...
       'StopbandFrequency2',700, ...
       'PassbandFrequency2',850, ...
       'PassbandRipple1',1, ...         % Magnitude constraints
       'StopbandAttenuation',55, ...
       'PassbandRipple2',1, ...
       'DesignMethod','ellip', ...      % Design method
       'MatchExactly','both', ...       % Design method options
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' (必須の場合) またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 振幅の制約を省略すると、designfilt は既定値を使用します。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

このオプションを選択して有限インパルス応答 (FIR) 微分器フィルターを設計します。次の例では、この表の 2 番目の仕様セットが使用されています。

d = designfilt('differentiatorfir', ... % Response type
       'FilterOrder',42, ...            % Filter order
       'PassbandFrequency',400, ...     % Frequency constraints
       'StopbandFrequency',500, ...
       'DesignMethod','equiripple', ... % Design method
       'PassbandWeight',1, ...          % Design method options
       'StopbandWeight',4, ...
       'SampleRate',2000)               % Sample rate

  • 部分バンド微分器を設計する際に 'FilterOrder' またはいずれかの周波数制約を省略すると、designfilt によってエラーがスローされます。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

フィルター次数の引数名周波数制約の引数名振幅の制約の引数名'DesignMethod' の引数値設計オプションの引数名

'FilterOrder'

N/A

N/A

'equiripple' (既定)

N/A

'ls'

N/A

'FilterOrder'

'PassbandFrequency'

'StopbandFrequency'

N/A

'equiripple' (既定)

'PassbandWeight'

'StopbandWeight'

'ls'

N/A

このオプションを選択して有限インパルス応答 (FIR) ヒルベルト変換器フィルターを設計します。次の例では、この表の仕様セットが使用されています。

d = designfilt('hilbertfir', ...        % Response type
       'FilterOrder',12, ...            % Filter order
       'TransitionWidth',400, ...       % Frequency constraints
       'DesignMethod','ls', ...         % Design method
       'SampleRate',2000)               % Sample rate

  • 'FilterOrder' または 'TransitionWidth' を省略すると、designfilt によってエラーがスローされます。

  • 'DesignMethod' を省略すると、designfilt はヒルベルト変換器に対応する既定の設計法を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

フィルター次数の引数名周波数制約の引数名振幅の制約の引数名'DesignMethod' の引数値設計オプションの引数名

'FilterOrder'

'TransitionWidth'

N/A

'equiripple' (既定)

N/A

'ls'

N/A

このオプションを選択して任意振幅応答の有限インパルス応答 (FIR) フィルターを設計します。次の例では、この表の 2 番目の仕様セットが使用されています。

d = designfilt('arbmagfir', ...         % Response type
       'FilterOrder',88, ...            % Filter order
       'NumBands',4, ...                % Frequency constraints
       'BandFrequencies1',[0 20], ...
       'BandFrequencies2',[25 40], ...
       'BandFrequencies3',[45 65], ...
       'BandFrequencies4',[70 100], ...
       'BandAmplitudes1',[2 2], ...     % Magnitude constraints
       'BandAmplitudes2',[0 0], ...
       'BandAmplitudes3',[1 1], ...
       'BandAmplitudes4',[0 0], ...
       'DesignMethod','ls', ...         % Design method
       'BandWeights1',[1 1]/10, ...     % Design method options
       'BandWeights2',[3 1], ...
       'BandWeights3',[2 4], ...
       'BandWeights4',[5 1], ...
       'SampleRate',200)                % Sample rate

  • 'FilterOrder'、周波数制約または振幅の制約のいずれかが省略されると、designfilt によってエラーがスローされます。

  • 'DesignMethod' を省略すると、designfilt は仕様セットに対応する既定の設計法を使用します。

  • 設計法オプションを省略すると、designfilt は選択された設計法に対応する既定値を使用します。

  • 'SampleRate' を省略すると、designfilt により 2 Hz に設定されます。

フィルター次数の引数名周波数制約の引数名振幅の制約の引数名'DesignMethod' の引数値設計オプションの引数名

'FilterOrder'

'Frequencies'

'Amplitudes'

'freqsamp' (既定)

'Window'

'equiripple'

'Weights'

'ls'

'Weights'

'FilterOrder'

'NumBands'

'BandFrequencies1'

'BandFrequenciesN'

'BandAmplitudes1'

'BandAmplitudesN'

'equiripple' (既定)

'BandWeights1'

'BandWeightsN'

'ls'

'BandWeights1'

'BandWeightsN'

データ型: char | string

デジタル フィルター。designfilt によって生成される digitalFilter オブジェクトで指定します。この入力を使用して、既存の digitalFilter の仕様を変更します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: ローパス FIR フィルターを指定する場合は、FilterOrder=20,CutoffFrequency=0.4 で十分です。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: ローパス FIR フィルターを指定する場合は、'FilterOrder',20,'CutoffFrequency',0.4 で十分です。

すべての名前と値の組み合わせが有効なわけではありません。有効な組み合わせは、必要とするフィルター応答と設計の周波数および振幅の制約によって異なります。

フィルター次数

すべて折りたたむ

フィルター次数。正の整数スカラーとして指定します。

データ型: double

IIR 設計の分子次数。正の整数スカラーとして指定します。

データ型: double

IIR 設計の分母次数。正の整数スカラーとして指定します。

データ型: double

周波数制約

すべて折りたたむ

通過帯域周波数。正のスカラーとして指定します。周波数値はナイキスト範囲内になければなりません。

'PassbandFrequency1' はバンドパスまたはバンドストップ設計の低域側の通過帯域周波数です。

'PassbandFrequency2' はバンドパスまたはバンドストップ設計の高域側の通過帯域周波数です。

データ型: double

阻止帯域周波数。正のスカラーとして指定します。周波数値はナイキスト範囲内になければなりません。

'StopbandFrequency1' はバンドパスまたはバンドストップ設計の低域側の阻止帯域周波数です。

'StopbandFrequency2' はバンドパスまたはバンドストップ設計の高域側の阻止帯域周波数です。

データ型: double

6 dB の周波数。正のスカラーとして指定します。周波数値はナイキスト範囲内になければなりません。

'CutoffFrequency1' はバンドパスまたはバンドストップ設計の低域側の 6 dB の周波数です。

'CutoffFrequency2' はバンドパスまたはバンドストップ設計の高域側の 6 dB の周波数です。

データ型: double

3 dB の周波数。正のスカラーとして指定します。周波数値はナイキスト範囲内になければなりません。

'HalfPowerFrequency1' はバンドパスまたはバンドストップ設計の低域側の 3 dB の周波数です。

'HalfPowerFrequency2' はバンドパスまたはバンドストップ設計の高域側の 3 dB の周波数です。

データ型: double

ヒルベルト変換器の通過帯域と阻止帯域の間の遷移領域の幅。正のスカラーとして指定します。

データ型: double

応答周波数。ベクトルとして指定します。この変数を使用して、任意振幅応答のフィルターにより目的の振幅が得られる周波数をリストします。周波数は単調増加し、ナイキスト範囲内になければなりません。ベクトルの最初の要素は 0 または –fs/2 でなければなりません。ここで、fs はサンプル レートです。また、最後の要素は fs/2 でなければなりません。サンプル レートを指定しない場合は、designfilt は既定値の 2 Hz を使用します。

データ型: double

マルチバンド設計の帯域数。10 以下の正の整数スカラーとして指定します。

データ型: double

マルチバンド応答周波数。数値ベクトルとして指定します。ここで、'BandFrequenciesi' (i は 1 から 'NumBands' まで変化) は、マルチバンド設計の i 番目の帯域がそこで目的の値 'BandAmplitudesi' をもつ周波数を含むベクトルです。可能な 'NumBands' は最大 10 です。周波数はナイキスト範囲内になければならず、単調増加の順に指定しなければなりません。隣接する周波数帯域はジャンクションで振幅が同じになっていなければなりません。

データ型: double

振幅の制約

すべて折りたたむ

通過帯域リップル。正のスカラーをデシベル単位で指定します。

'PassbandRipple1' はバンドストップ設計の低域側の通過帯域リップルです。

'PassbandRipple2' はバンドストップ設計の高域側の通過帯域リップルです。

データ型: double

阻止帯域の減衰量。正のスカラーをデシベル単位で指定します。

'StopbandAttenuation1' はバンドパス設計の低域側の阻止帯域の減衰量です。

'StopbandAttenuation2' はバンドパス設計の高域側の阻止帯域の減衰量です。

データ型: double

目的とする、任意振幅応答フィルターの応答振幅。ベクトルとして指定します。振幅は線形単位で指定します。ベクトルは、'Frequencies' と同じ長さでなければなりません。

データ型: double

マルチバンド応答振幅。数値ベクトルとして指定します。ここで、'BandAmplitudesi' (i は 1 から 'NumBands' まで変化) は、マルチバンド設計の i 番目の帯域に目的の振幅を含むベクトルです。可能な 'NumBands' は最大 10 です。振幅は線形単位で指定します。'BandAmplitudesi' は、'BandFrequenciesi' と同じ長さでなければなりません。隣接する周波数帯域はジャンクションで振幅が同じになっていなければなりません。

データ型: double

設計法

すべて折りたたむ

設計法。文字ベクトルまたは string スカラーとして指定します。設計法の選択は、指定する周波数と振幅の制約の組み合わせによって決まります。

  • 'butter' はバタワース IIR フィルターを設計します。バタワース フィルターでは、通過帯域で最大フラットであり、滑らかで単調な周波数応答になります。平坦さのために、急峻なロールオフを得ることができません。

  • 'cheby1' はチェビシェフ I 型 IIR フィルターを設計します。チェビシェフ I 型フィルターでは、通過帯域では等リップル、阻止帯域では最大フラットの周波数応答になります。ロールオフが急峻になると共に、この通過帯域リップルも増加します。

  • 'cheby2' はチェビシェフ II 型 IIR フィルターを設計します。チェビシェフ II 型フィルターでは、通過帯域では最大フラット、阻止帯域では等リップルの周波数応答になります。

  • 'cls' は制約付き最小二乗を使用する FIR フィルターを設計します。この設計法では、指定した任意の区分線形関数とフィルターの振幅応答との誤差が最小限になります。同時に、通過帯域のリップルと阻止帯域の減衰量に制約を設定することができます。

  • 'ellip' は楕円 IIR フィルターを設計します。楕円フィルターでは、通過帯域と阻止帯域の両方で等リップルである周波数応答になります。

  • 'equiripple' は、Parks-McClellan アルゴリズムを使用して、等リップル FIR フィルターを設計します。等リップル フィルターでは、すべての帯域のリップル最大振幅を最小限にする周波数応答になります。

  • 'freqsamp' は、周波数応答を等間隔にサンプリングし、逆フーリエ変換を行う、任意振幅応答の FIR フィルターを設計します。

  • 'kaiserwin' はカイザー ウィンドウ法を使用する FIR フィルターを設計します。この設計法では、理想的なフィルターのインパルス応答を切り捨て、カイザー ウィンドウを使用して切り捨て後の振動を減衰させます。

  • 'ls' では最小二乗を使用した FIR フィルターを設計します。この設計法では、指定した任意の区分線形関数とフィルターの振幅応答との誤差が最小限になります。

  • 'maxflat' は、最大フラット FIR フィルターを設計します。このフィルターでは、通過帯域で最大フラットであり、滑らかで単調な周波数応答になります。

  • 'window' は、最小二乗近似を使用して、フィルター係数を計算し、'Window' によりインパルス応答を平滑化します。

データ型: char | string

設計法オプション

すべて折りたたむ

'kaiserwin' 設計の最小次数のパリティ。'any' または 'even' で指定します。'MinOrder''even' に設定すると、designfilt は偶数の次数をもつ最小次数フィルターを返します。'MinOrder''any' に設定すると、返されるフィルターは偶数または奇数の次数のうち、小さい方をもつことができます。

データ型: char | string

ウィンドウ。長さ N + 1 のベクトルとして指定します。ここで N はフィルター次数です。'Window' とペアにする相手には、ウィンドウ名か、ウィンドウの生成に使用する関数を指定する関数ハンドルを設定できます。その場合、関数はすべて最初の入力として N + 1 を取らなければなりません。追加の入力は、cell 配列の指定により渡すことができます。既定では、'Window' は、'freqsamp' 設計法では空ベクトルで、'window' 設計法では @hamming です。

利用可能なウィンドウのリストについては、ウィンドウを参照してください。

例: 'Window',hann(N+1)'Window',(1-cos(2*pi*(0:N)'/N))/2 はいずれも次数 N のフィルターと共に使用するハン ウィンドウを指定します。

例: 'Window','hamming' は、必要な次数のハミング ウィンドウを指定します。

例: 'Window',@mywindow では独自のウィンドウ関数が定義できます。

例: 'Window',{@kaiser,0.5} は、形状パラメーター 0.5 を使用して、必要な次数のカイザー ウィンドウを指定します。

データ型: double | char | string | function_handle | cell

厳密に一致する帯域。'stopband''passband'、または 'both' で指定します。'both' は楕円設計法でのみ利用可能で、その既定の設定です。'stopband''butter' および 'cheby2' 設計法の既定の設定です。'passband''cheby1' の既定の設定です。

データ型: char | string

通過帯域オフセット。正のスカラーをデシベル単位で指定します。'PassbandOffset' は通過帯域のフィルター ゲインを指定します。

例: 'PassbandOffset',0 では、通過帯域の単位ゲインを得るフィルターが設計されます。

例: 'PassbandOffset',2 では 2 dB または 1.259 の通過帯域ゲインを得るフィルターが設計されます。

データ型: double

通過帯域のスケーリング。logical スカラーで指定します。'ScalePassband'true に設定すると、ウィンドウ処理後に、フィルターがゼロ周波数で単位ゲインを得るように、通過帯域がスケーリングされます。

例: 'Window',{@kaiser,0.1},'ScalePassband',true により、ゼロ周波数での振幅応答が厳密に 0 dB になるフィルターを指定できます。これは、'ScalePassband',false を指定した場合には該当しません。検証するには、fvtool を使用してフィルターを可視化し、拡大します。

データ型: logical

ゼロ位相。logical スカラーで指定します。'ZeroPhase'true に設定すると、設計されるフィルターのゼロ位相応答が常に正になります。これにより、結果に対してスペクトル分解を実行し、その結果から最小位相フィルターを得ることができます。

データ型: logical

通過帯域の最適化の重み。正のスカラーで指定します。

'PassbandWeight1' はバンドストップ FIR 設計の低域通過帯域の最適化の重みです。

'PassbandWeight2' はバンドストップ FIR 設計の高域通過帯域の最適化の重みです。

データ型: double

阻止帯域の最適化の重み。正のスカラーで指定します。

'StopbandWeight1' はバンドパス FIR 設計の低域側阻止帯域の最適化の重みです。

'StopbandWeight2' はバンドパス FIR 設計の高域側阻止帯域の最適化の重みです。

データ型: double

最適化の重み。正のスカラーまたは 'Amplitudes' と同じ長さのベクトルとして指定します。

データ型: double

マルチバンドの重み。一連の正のスカラーまたはベクトルとして指定します。ここで、'BandWeightsi' (i は 1 から 'NumBands' まで変化) は、マルチバンド設計の i 番目の帯域の最適化重みを含むスカラーまたはベクトルです。ベクトルとして指定する場合、'BandWeightsi''BandAmplitudesi' と同じ長さでなければなりません。

データ型: double

サンプル レート

すべて折りたたむ

サンプル レート。正のスカラーとしてヘルツ単位で指定します。正規化周波数を使用するには、'SampleRate' を 2 に設定するか、単に省略します。

データ型: double

出力引数

すべて折りたたむ

デジタル フィルター。digitalFilter オブジェクトとして返されます。

詳細

すべて折りたたむ

フィルター設計アシスタント

一連の設計パラメーターの指定に記入漏れや矛盾があると、designfilt によりフィルター設計アシスタントの開始が提案されます。

(resp の引数の説明内に、利用可能な全応答タイプに対応する有効な仕様セットの一覧があります。)

アシスタントは、designfilt をコマンド ラインまたはスクリプトや関数のいずれで呼び出すかによって動作が異なります。

コマンド ラインでのフィルター設計アシスタント

2 kHz でサンプリングされた信号があると仮定します。650 Hz より高い周波数成分を抑えるローパス FIR フィルターを設計するとします。仕様パラメーターとして、"CutoffFrequency"が適切と考えられます。MATLAB コマンド ラインでこのコードを入力します。

Fsamp = 2e3;
Fctff = 650;
dee = designfilt('lowpassfir','CutoffFrequency',Fctff, ...
    'SampleRate',Fsamp);

何かが間違っているらしく、次のダイアログ ボックスが画面に表示されます。

Filter Design Assistant dialog window

[はい] をクリックすると、コード生成を提案する新しいダイアログ ボックスが表示されます。前に定義した変数が予想した場所に挿入されています。

Filter Design Assistant dialog for lowpass FIR design

提案されたオプションをいくつか調べた後、修正したフィルターをテストします。[OK] をクリックすると、コマンド ラインにこのコードが表示されます。

designfilt('lowpassfir','FilterOrder', 10, ...
    'CutoffFrequency',Fctff,'SampleRate',2000);

フィルターの名前を入力すると、ダイアログ ボックス内の情報が再び繰り返されます。

dee
dee = 
 digitalFilter with properties:

    Coefficients: [-0.0036 0.0127 -0.0066 -0.0881 0.2595 ...
                   0.6521 0.2595 -0.0881 -0.0066 0.0127 -0.0036]
    Specifications:
    FrequencyResponse: 'lowpass'
      ImpulseResponse: 'fir'
           SampleRate: 2000
      CutoffFrequency: 650
          FilterOrder: 10
         DesignMethod: 'window'

 Use fvtool to visualize filter
 Use designfilt to edit filter
 Use filter to filter data

FVTool を呼び出し、dee の周波数応答をプロットします。

fvtool(dee)

Magnitude response plot using Filter Visualization Tool

カットオフ周波数は特に急峻には見えません。周波数の大部分で、応答が 40 dB を超えています。アシスタントには、[振幅の制約] に [阻止帯域の減衰量] を設定するオプションがあります。フィルター名を入力として designfilt を呼び出し、アシスタントを開きます。

designfilt(dee)

[振幅の制約] ドロップダウン メニューをクリックし、[通過帯域リップルと阻止帯域の減衰量] を選択します。設計法が [ウィンドウ] から [FIR 制約付き最小二乗] に変わります。減衰量の既定値は 60 dB で 40 より高くなっています。[OK] をクリックし、結果のフィルターを可視化します。

dee = designfilt('lowpassfir','FilterOrder',10, ...
    'CutoffFrequency',650,'PassbandRipple',1, ...
    'StopbandAttenuation',60,'SampleRate',2000);
fvtool(dee)

Magnitude response with passband ripple and stopband attenuation using Filter Visualization Tool

カットオフ周波数は依然として急峻には見えません。減衰量は実際に 60 dB になっていますが、900 Hz を超える周波数に対してのみです。

再びフィルター名を入力に指定して designfilt を呼び出します。

designfilt(dee)

再度アシスタントが表示されます。

Filter Design Assistant dialog for modified lowpass FIR design

受け取る周波数と阻止する周波数の差を縮めるには、フィルターの次数を大きくするか、あるいは [周波数制約][カットオフ (6 dB) 周波数] から [通過帯域周波数と阻止帯域周波数] に変更します。フィルター次数を 10 から 50 に変更すると、急峻なフィルターが得られます。

dee = designfilt('lowpassfir','FilterOrder',50, ...
    'CutoffFrequency',650,'PassbandRipple',1, ...
    'StopbandAttenuation',60,'SampleRate',2000);
fvtool(dee)

Magnitude response with increased filter order using Filter Visualization Tool

実験的に、通過帯域周波数および阻止帯域周波数をそれぞれ 600 Hz および 700 Hz に設定すると、類似のフィルターが得られることがわかります。

dee = designfilt('lowpassfir','PassbandFrequency',600, ...
    'StopbandFrequency',700,'PassbandRipple',1, ...
    'StopbandAttenuation',60,'SampleRate',2000);
fvtool(dee)

Magnitude response with modified passband and stopband frequencies using Filter Visualization Tool

スクリプトまたは関数内でのフィルター設計アシスタント

2 kHz でサンプリングされた信号があると仮定します。700 Hz を下回る周波数成分を阻止するハイパス フィルターを設計するとします。信号の位相は対象にしていません。低次のフィルターを使用する必要があります。したがって、IIR フィルターが適切であると思われます。最適なフィルター次数が不明なため、入力として次数をとる関数を記述します。MATLAB エディターを開き、次のファイルを作成します。

function dataOut = hipassfilt(Order,dataIn)
hpFilter = designfilt('highpassiir','FilterOrder',N);
dataOut = filter(hpFilter,dataIn);
end

関数をテストするには、周波数が 500 Hz と 800 Hz の 2 つの正弦波で構成される信号を作成し、0.1 秒間のサンプルを生成します。初期推定として 5 次のフィルターが妥当と考えられます。driveHPfilt.m というスクリプトを作成します。

% script driveHPfilt.m
Fsamp = 2e3;
Fsm = 500;
Fbg = 800;
t = 0:1/Fsamp:0.1;
sgin = sin(2*pi*Fsm*t)+sin(2*pi*Fbg*t);
N = 5;
sgout = hipassfilt(N,sgin);

コマンド ラインでこのスクリプトを実行すると、エラー メッセージが表示されます。

エラー メッセージから、アシスタントを開いて MATLAB コードを訂正することを選択できます。Click here をクリックすると、フィルター設計アシスタントが表示されます。

Filter Design Assistant dialog for highpass IIR design

問題点がわかります。周波数制約が指定されていません。サンプル レートも設定されていません。試した後、[周波数単位][Hz][通過帯域周波数] に 700 Hz、[入力サンプルレート] に 2,000 Hz を指定できることがわかります。[設計法][バタワース] から [チェビシェフ I 型] に変わります。[OK] をクリックすると、コマンド ラインにこれが表示されます。

hp = designfilt('highpassiir','FilterOrder',N, ...
    'PassbandFrequency',700,'PassbandRipple',1, ...
    'SampleRate',2000);

新しい digitalFilter オブジェクト hp がワークスペースに保存されます。設計の制約によっては、仕様セットを変更できます。

フィルター設計アシスタントの基本設定

フィルター設計アシスタントを表示しないように designfilt を設定できます。このアクションは、setpref を使用して MATLAB の特定の基本設定を解除する設定を行います。

  • 毎回アシスタントを表示するには、setpref('dontshowmeagain','filterDesignAssistant',false) を使用します。このコマンドにより、アシスタントを無効にした後に、再表示できます。

  • アシスタントを常に無効にするには、setpref('dontshowmeagain','filterDesignAssistant',true) を使用します。最初のダイアログ ボックスにある [次回からこのメッセージを表示しない] をクリックすることもできます。

欠陥のある仕様を常に確認なしで訂正するよう designfilt を設定できます。このアクションは、setpref を使用してMATLAB の特定の基本設定を解除する設定を行います。

  • 確認を求めずに MATLAB コードを訂正するよう designfilt を設定するには、setpref('dontshowmeagain','filterDesignAssistantCodeCorrection',false) を使用します。確認ダイアログ ボックスの [常に受け入れる] をクリックすることもできます。

  • 変更を確定した場合にのみ designfilt により MATLAB コードが訂正されるようにするには、setpref('dontshowmeagain','filterDesignAssistantCodeCorrection',true) を使用します。このコマンドでは、確認ダイアログ ボックスの [常に受け入れる] のクリックによる作用を取り消すことができます。

トラブルシューティング

不適切な仕様セットの指定に対し、designfilt により、ダイアログ ボックスまたはエラー メッセージ内のリンクを介したフィルター設計アシスタントの提案が行われない場合があります。

  • コード セクション評価の使用時は、それが MATLAB ツールストリップからか Ctrl+Enter キーを押すことによるかにかかわらず、アシスタントは提案されません (詳細については、ファイルをセクションに分割を参照)。

  • コードに designfilt への呼び出しが複数あり、その中に正しくないものが含まれる場合、以下の状況ではアシスタントは提案されません。

    • コマンド ラインにコードを貼り付け、Enter キーを押して実行する場合

    • エディターでコードを選択し、F9 キーを押して実行する場合

  • 無名関数を使用して designfilt を実行する場合、アシスタントは提案されません。(詳細については、無名関数を参照)。たとえば、次の入力ではアシスタントが提案されます。

    d = designfilt('lowpassfir','CutoffFrequency',0.6)
    こちらの入力ではそうなりません。
    myFilterDesigner = @designfilt;
    d = myFilterDesigner('lowpassfir','CutoffFrequency',0.6)

  • eval を使用して designfilt を実行する場合、アシスタントは提案されません。たとえば、次の入力ではアシスタントが提案されます。

    d = designfilt('lowpassfir','CutoffFrequency',0.6)
    こちらの入力ではそうなりません。
    myFilterDesigner = ...
        sprintf('designfilt(''%s'',''CutoffFrequency'',%f)', ...
        'lowpassfir',0.6);
    d = eval(myFilterDesigner)

フィルター設計アシスタントでは、Java® ソフトウェアと MATLAB デスクトップを実行する必要があります。-nojvm-nodisplay または -nodesktop オプションを指定して MATLAB を実行する場合には、アシスタントはサポートされません。

バージョン履歴

R2014a で導入

すべて展開する