ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fdesign

フィルター仕様オブジェクト

構文

filtSpecs = fdesign.response
filtSpecs = fdesign.response(spec)
filtSpecs = fdesign.response(...,Fs)
filtSpecs = fdesign.response(...,magunits)

説明

フィルター仕様オブジェクト

filtSpecs = fdesign.response では、フィルター応答 response のフィルター仕様オブジェクト filtSpecs が返されます。filtSpecs からフィルターを作成するには、仕様オブジェクトを使用するフィルター設計法の使用に記述されている設計法のいずれかを使用します。

    メモ:   以下で説明するフィルター応答タイプの一部は、ご使用のシステムに DSP System Toolbox™ が含まれている場合にのみ利用できます。DSP System Toolbox は、フィルターの仕様、設計、分析のための機能を大幅に拡張するものです。

ここでは、fdesign を使用したフィルター設計について説明します。

  1. フィルター仕様オブジェクトを作成するには、fdesign.response を使用します。

  2. 新規のフィルター仕様オブジェクトに対して適切なフィルター設計法を判断するには、designmethods を使用します。

  3. ステップ 2 で決定したフィルター設計法を適用して、フィルター仕様からフィルター オブジェクトを作成するには、design を使用します。

  4. フィルター オブジェクトの検査や解析には FVTool を使用します。

    メモ:   fdesign ではフィルターの作成は行われません。fdesign では、通過帯域のカットオフや、阻止帯域の減衰量などの、フィルターの仕様を含むフィルター仕様オブジェクトが返されます。フィルター仕様オブジェクト filtSpecs からフィルターを設計するには、butterIIRbutter = design(filtSpecs,'butter','SystemObject',true) などのフィルター設計法で filtSpecs を使用します。

response には、バンドストップ フィルターや内挿器などの、希望するフィルター応答を指定する次の表のエントリのいずれかを使用できます。

fdesign Response 文字列

説明

arbgrpdelay

fdesign.arbgrpdelay は、オールパス任意群遅延フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

arbmag

fdesign.arbmag は、入力引数によって定義された任意振幅応答をもつ IIR フィルターを指定するためのオブジェクトを作成します。

arbmagnphase

fdesign.arbmagnphase は、入力引数によって定義された任意振幅位相応答をもつ IIR フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

audioweighting

fdesign.audioweighting は、オーディオの重み付けフィルター用のフィルター仕様オブジェクトを作成します。サポートされているオーディオの重み付けタイプは、A、C、C メッセージ、ITU-T 0.41 および ITU-R 468-4 の重み付けです。DSP System Toolbox が必要です。

bandpass

fdesign.bandpass は、バンドパス フィルターを指定するためのオブジェクトを作成します。

bandstop

fdesign.bandstop は、バンドストップ フィルターを指定するためのオブジェクトを作成します。

ciccomp

fdesign.ciccomp は、CIC 間引きまたは内挿の応答曲線の補正を行うフィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

comb

fdesign.comb は、ノッチまたはピークの櫛形フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

decimator

fdesign.decimator は、間引きを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

differentiator

fdesign.differentiator は、FIR 微分器フィルターを指定するためのオブジェクトを作成します。

fracdelay

fdesign.fracdelay は、非整数遅延フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

halfband

fdesign.halfband は、ハーフバンド フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

highpass

fdesign.highpass は、ハイパス フィルターを指定するためのオブジェクトを作成します。

hilbert

fdesign.hilbert は、FIR ヒルベルト変換器を指定するためのオブジェクトを作成します。

interpolator

fdesign.interpolator は、内挿を指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

isinchp

fdesign.isinchp は、逆 sinc ハイパス フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

isinclp

fdesign.isinclp は、逆 sinc ローパス フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

lowpass

fdesign.lowpass は、ローパス フィルターを指定するためのオブジェクトを作成します。

notch

fdesign.notch は、ノッチ フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

nyquist

fdesign.nyquist は、ナイキスト フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

octave

fdesign.octave は、オクターブ フィルターおよび 1/N オクターブ フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

parameq

fdesign.parameq は、パラメトリック イコライザー フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

peak

fdesign.peak は、ピーク フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

polysrc

fdesign.polysrc は、多項式サンプルレート変換フィルターを指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

rsrc

fdesign.rsrc は、有理ファクター サンプルレート変換を指定するためのオブジェクトを作成します。DSP System Toolbox が必要です。

MATLAB プロンプトで doc fdesign.response の構文を使用して、特定の構造に関するヘルプを表示することができます。以下のような doc 構文を使用します。

doc fdesign.lowpass
doc fdesign.bandstop

すると、ローパスまたはバンドストップ構造オブジェクトに関する詳細情報が表示されます。

response は、フィルター設計で使われる仕様を定義する Specification プロパティをもちます。仕様オブジェクトを作成する際には、既定値を使用するか、Specification プロパティを指定します。

Specification プロパティの文字列を使用して、仕様オブジェクトからフィルターを作成する際に使用する、フィルター次数や通過帯域の減衰量などのフィルターの制約を指定します。

プロパティ

fdesign からは、フィルター仕様オブジェクトが返されます。各フィルター仕様オブジェクトは以下のプロパティをもちます。

プロパティ名

既定値

説明

Response

選択したタイプにより異なる

内挿器やバンドパス フィルターなどの、設計するフィルターのタイプを定義。この値は読み取り専用です。

Specification

選択したタイプにより異なる

カットオフ周波数 Fc やフィルター次数 N などの、希望するフィルター性能の定義に使用するフィルターの特性を定義。

Description

選択したフィルター タイプにより異なる

オブジェクトの定義に使用するフィルター仕様の記述と、オブジェクトからフィルターを作成する際に使用するフィルター仕様を含む。この値は読み取り専用です。

NormalizedFrequency

論理 true

フィルターの計算で、サンプリング周波数として 0 ~ 1 の正規化周波数と、0 ~ Fs/2 の周波数帯域のいずれを使用するかを決定します。true または false (単一引用符なし) を受け入れます。オーディオ重み付けフィルターは、正規化周波数をサポートしていません。

これらのプロパティに加え、フィルター仕様オブジェクトには、シングルレート フィルターを設計するかマルチレート フィルターを設計するかによって、その他のプロパティも含まれる場合があります。

マルチレート フィルターの場合に追加されるプロパティ

説明

DecimationFactor

サンプルレートの減少量を指定します。常に正の整数です。

InterpolationFactor

サンプルレートの増加量を指定します。常に正の整数です。

PolyphaseLength

ポリフェーズの長さは、間引きフィルター、内挿フィルターまたはレート変換率フィルターを構成する各ポリフェーズ サブフィルターの長さです。フィルター全体の長さは pl とレート変換率の積です。pl は偶数の整数でなければなりません。

filtSpecs = fdesign.response(spec)spec では、通過帯域の周波数や阻止帯域の減衰量のような、フィルター設計を定義するための変数を指定します。これらの仕様はフィルター設計用に選択した設計法に適用されます。

たとえば、既定のローパス フィルター仕様オブジェクトを作成する場合、fdesign.lowpass では通過帯域周波数 Fp、阻止帯域周波数 Fst、阻止帯域の減衰量 Ast、通過帯域のリップル Ap が設定されます。

filtSpecs = fdesign.lowpass

終端のセミコロンなしで使用すると、フィルターの仕様が表示されます。

既定の仕様 'Fp,Fst,Ap,Ast' は、fdesign.lowpass の仕様の 1 つにすぎません。利用可能な仕様をすべて表示するには、以下を入力します。

filtSpecs = fdesign.lowpass;
set(filtSpecs,'Specification')

DSP System Toolbox ソフトウェアは利用可能なすべての仕様文字列をサポートしています。Signal Processing Toolbox™ はその仕様文字列のサブセットの 1 つをサポートしています。インストール済み環境でどの仕様文字列がサポートされているかを確認するには、フィルター仕様オブジェクトの参照ページをご覧ください。

選択した仕様文字列によって、フィルター仕様オブジェクトに対して適用される設計法が決まることに注意してください。

仕様にフィルター次数が含まれない場合は、design メソッドを呼び出したときに最小次数設計となります。

filtSpecs = fdesign.lowpass;      % Specification is 'Fp,Fst,Ap,Ast'
FIReq = design(filtSpecs,'equiripple','SystemObject',true);
length(FIReq.Numerator)           % Returns 43. The filter order is 42
fvtool(FIReq)                     % View magnitude

filtSpecs = fdesign.response(...,Fs) では、フィルター仕様で使用するサンプリング周波数を Hz 単位で指定します。サンプリング周波数は他のすべての入力引数に続くスカラーです。サンプリング周波数を指定する場合は、すべての周波数仕様を Hz 単位とします。

filtSpecs = fdesign.response(...,magunits) は、入力引数で指定する振幅仕様の単位を指定します。magunits は、以下のいずれかの文字列となります。

  • 'linear' — 振幅を線形単位で指定

  • 'dB' — 振幅をデシベル単位で指定

  • 'squared' — 振幅をパワー単位で指定

magunits 引数の指定を省略すると、fdesign はすべての振幅をデシベル単位として扱います。fdesign は振幅をどのように指定したかにかかわらず、すべての振幅を (必要に応じて変換して) デシベル単位で格納します。

仕様オブジェクトを使用するフィルター設計法の使用

フィルター仕様オブジェクトの作成後、フィルター設計法を使用して選択したアルゴリズムによりフィルターを実装します。フィルター仕様オブジェクトに対して有効な設計法を確認するには、designmethods を使用します。

filtSpecs = fdesign.lowpass('N,Fc,Ap,Ast',10,0.2,0.5,40);
designmethods(filtSpecs)
% Design FIR equiripple filter
FIReq = design(filtSpecs,'equiripple','SystemObject',true);

出力引数を指定せずにこれらの設計法を使用すると、結果として得られるフィルターが、既定で FVTool に表示されます。

フィルター設計法と共に、fdesign は、フィルター仕様オブジェクトの作成や与えられた仕様オブジェクトで機能する設計法の判定に役立つ補助的なメソッドを扱います。

サポート対象の関数

説明

setspecs

すべての仕様を同時に設定します。

designmethods

設計法を返します。

designopts

入力引数と、仕様オブジェクトとメソッドに適用する既定値を返します。

フィルター仕様の値は、Specification 引数の後に渡すか、Specification 文字列のない値を渡すことによって設定します。

フィルター オブジェクト コンストラクターは、setspecs と同じ順序、かつ Specification の文字列内の順序で入力引数を取ります。setspecs の使用方法の詳細は、プロンプトで「doc setspecs」と入力して参照してください。

fdesign への最初の入力が 'N,Fc' などの有効な Specification 文字列でない場合は、fdesign では入力引数がフィルター仕様であると仮定され、既定の Specification 文字列を使用して適用されます。たとえば、ローパス オブジェクトの場合は 'Fp,Fst,Ap,Ast' などです。

すべて折りたたむ

この例には、DSP System Toolbox 製品が必要です。

96 kHz でサンプリングされた信号上で使用するローパス フィルターを設計します。フィルターの通過帯域は最大 20 kHz まで拡大します。フィルターの阻止帯域は 24 kHz から始まります。0.01 dB の通過帯域リップルと 80 dB の阻止帯域の減衰量を指定します。仕様を満たすために必要な次数が自動的に決まります。

フィルターの設計仕様を設定し、使用可能な設計アルゴリズムを判断します。

Fs = 96e3;
Fpass = 20e3;
Fstop = 24e3;
Apass = 0.01;
Astop = 80;

filtSpecs = fdesign.lowpass(Fpass,Fstop,Apass,Astop,Fs);
designmethods(filtSpecs)

Design Methods for class fdesign.lowpass (Fp,Fst,Ap,Ast):


butter
cheby1
cheby2
ellip
equiripple
ifir
kaiserwin
multistage

仕様に適合する等リップル FIR フィルターおよび楕円 IIR フィルターを設計します。設計を評価し、フィルターが制約を満たしていることを確認します。

lpFIR = design(filtSpecs,'equiripple','SystemObject',true);
lpIIR = design(filtSpecs,'ellip','SystemObject',true);

FIRmeas = measure(lpFIR)
IIRmeas = measure(lpIIR)
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 = 

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      
 

各フィルターの計算コストを推定して表示します。等リップル FIR フィルターは、楕円 IIR フィルターよりもさらに多くの係数を必要とします。

FIRcost = cost(lpFIR)
IIRcost = cost(lpIIR)
FIRcost = 

                  NumCoefficients: 101
                        NumStates: 100
    MultiplicationsPerInputSample: 101
          AdditionsPerInputSample: 100


IIRcost = 

                  NumCoefficients: 20
                        NumStates: 10
    MultiplicationsPerInputSample: 20
          AdditionsPerInputSample: 20

結果の設計を FVTool で可視化して、両者のプロパティを比較します。

fvtool(lpFIR,lpIIR,'Fs',Fs);
legend('FIR Equiripple','Elliptic IIR')

この例には、DSP System Toolbox 製品が必要です。

信号のサンプルレートを 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;

filtSpecs = fdesign.decimator(M,'lowpass','N,Fp,Ap,Ast',N,Fpass,Apass,Astop,Fs);

フィルターを設計して、フィルターに関する情報を表示します。

decimFIR = design(filtSpecs,'equiripple','SystemObject',true);
info(decimFIR)
ans =

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                             

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

fvtool(decimFIR,'Fs',Fs)

フィルター仕様オブジェクトを使用して、既定の仕様 'Fp,Fst,Ap,Ast' をもつローパス バタワース フィルターを作成します。 $0.4\pi$ ラジアン/サンプルの通過帯域エッジ周波数、 $0.5\pi$ ラジアン/サンプルの阻止帯域周波数、1 dB の通過帯域リップルおよび 80 dB の阻止帯域の減衰量を指定します。

filtSpecs = fdesign.lowpass(0.4,0.5,1,80);

d に適用する設計法を決定します。

designmethods(filtSpecs)

Design Methods for class fdesign.lowpass (Fp,Fst,Ap,Ast):


butter
cheby1
cheby2
ellip
equiripple
ifir
kaiserwin
multistage

d および butter 設計法を使用してバタワース フィルターを設計できます。使用可能な設計オプションを特定します。

designoptions(filtSpecs,'butter')
ans = 

           FilterStructure: {1x6 cell}
              SOSScaleNorm: 'char'
              SOSScaleOpts: 'fdopts.sosscaling'
              MatchExactly: {'passband'  'stopband'}
              SystemObject: 'bool'
    DefaultFilterStructure: 'df2sos'
       DefaultMatchExactly: 'stopband'
       DefaultSOSScaleNorm: ''
       DefaultSOSScaleOpts: [1x1 fdopts.sosscaling]
       DefaultSystemObject: 0

設計の一連の制約を満たすために必要なフィルター次数も整数値に切り上げなければなりません。これにより制約の一部が緩和され、結果として、設計仕様に合致するものと超過するものが生じます。'MatchExactly' オプションを使用すると、通過帯域または阻止帯域は仕様に完全に合致するようになりますが、それ以外の帯域では仕様を超過します。通過帯域が完全に仕様を満たすようにフィルターを設計します。

IIRbutter = design(filtSpecs,'butter','MatchExactly','passband', ...
    'SystemObject',true);

FVTool を使用して、フィルターの振幅応答を可視化します。

fvtool(IIRbutter)

DSP System Toolbox ソフトウェアがインストールされている場合は、上の図はフィルター仕様マスクが付いた状態で表示されます。

R2009a で導入

この情報は役に立ちましたか?