Main Content

fvtool

DSP フィルターの周波数応答の可視化

説明

fvtool(sysobj) は、フィルター System object™ の振幅応答を表示します。

fvtool(sysobj,options) は、オプションで指定された応答を表示します。

たとえば、FIR フィルター System object のインパルス応答を可視化するには、options'impulse' に設定します。

Fs = 96e3; filtSpecs = fdesign.lowpass(20e3,22.05e3,1,80,Fs);
    firlp2 = design(filtSpecs,'equiripple','SystemObject',true);
fvtool(firlp2,'impulse');

fvtool(____,Name,Value) は、指定の各プロパティが指定の値に設定されたフィルターの応答を可視化します。

その他の入力オプションについては、Signal Processing Toolbox™ の FVTool を参照してください。

すべて折りたたむ

44.1 kHz でサンプリングされるデータに対する、2 つのローパス ハーフバンド間引きフィルターを作成します。最初のフィルターの設計法が "Equiripple" に設定され、2 番目のフィルターが "Kaiser" に設定されます。

出力データ レートは入力サンプル レートの 1/2、つまり 22.05 kHz です。フィルター次数を 52 に設定し、4.1 kHz の遷移幅を指定します。

Fs = 44.1e3; 
filterspec = "Filter order and transition width";
Order = 52;
TW = 4.1e3; 
firhalfbanddecimEqui = dsp.FIRHalfbandDecimator(...
    Specification=filterspec,...
    FilterOrder=Order,...
    TransitionWidth=TW,...
    DesignMethod="Equiripple",...
    SampleRate=Fs);
firhalfbanddecimKaiser = dsp.FIRHalfbandDecimator(...
    Specification=filterspec,...
    FilterOrder=Order,...
    TransitionWidth=TW,...
    DesignMethod="Kaiser",...
    SampleRate=Fs);

両方のフィルターのインパルス応答をプロットします。ゼロ次係数は、26 サンプル分遅延されます。これは、フィルターの群遅延と等価です。これにより、因果性ハーフバンド フィルターになります。

hfvt = fvtool(firhalfbanddecimEqui,firhalfbanddecimKaiser,...
    Analysis="impulse");
legend(hfvt,{'Equiripple','Kaiser'})

{"String":"Figure Figure 1: Impulse Response contains an axes object. The axes object with title Impulse Response contains 2 objects of type stem. These objects represent Equiripple, Kaiser.","Tex":"Impulse Response","LaTex":[]}

その振幅応答と位相応答を表示します。

フィルター仕様が厳しい場合 (フィルター次数が非常に高く、遷移幅が非常に狭い場合など)、"Kaiser" 法を使用して設計したフィルターはより効果的に収束します。

hvftMag = fvtool(firhalfbanddecimEqui,firhalfbanddecimKaiser,...
    Analysis="Magnitude");
legend(hvftMag,{'Equiripple','Kaiser'})

{"String":"Figure Figure 2: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 3 objects of type line. These objects represent Equiripple, Kaiser.","Tex":"Magnitude Response (dB)","LaTex":[]}

hvftPhase = fvtool(firhalfbanddecimEqui,firhalfbanddecimKaiser,...
    Analysis="Phase");
legend(hvftPhase,{'Equiripple','Kaiser'})

{"String":"Figure Figure 3: Phase Response contains an axes object. The axes object with title Phase Response contains 2 objects of type line. These objects represent Equiripple, Kaiser.","Tex":"Phase Response","LaTex":[]}

44.1 kHz でサンプリングされるデータに対する、最小次数の FIR ローパス フィルターを作成します。8 kHz の通過帯域周波数、12 kHz の阻止帯域周波数、0.1 dB の通過帯域リップル、80 dB の阻止帯域の減衰量を指定します。

Fs = 44.1e3; 
filtertype = 'FIR';
Fpass = 8e3;
Fstop = 12e3; 
Rp = 0.1;
Astop = 80;
FIRLPF = dsp.LowpassFilter('SampleRate',Fs, ...
                             'FilterType',filtertype, ...
                             'PassbandFrequency',Fpass, ...
                             'StopbandFrequency',Fstop, ...
                             'PassbandRipple',Rp, ...
                             'StopbandAttenuation',Astop);

FIR ローパス フィルターと同じプロパティを設定した、最小次数の IIR ローパス フィルター設計します。複製したフィルターの FilterType プロパティを IIR に変更します。

IIRLPF = clone(FIRLPF);
IIRLPF.FilterType = 'IIR';

FIR ローパス フィルターのインパルス応答をプロットします。ゼロ次係数は、19 サンプル分遅延されます。これは、フィルターの群遅延と等価です。FIR ローパス フィルターは因果性 FIR フィルターです。

fvtool(FIRLPF,'Analysis','impulse')

{"String":"Figure Figure 1: Impulse Response contains an axes object. The axes object with title Impulse Response contains an object of type stem.","Tex":"Impulse Response","LaTex":[]}

IIR ローパス フィルターのインパルス応答をプロットします。

fvtool(IIRLPF,'Analysis','impulse')

{"String":"Figure Figure 2: Impulse Response contains an axes object. The axes object with title Impulse Response contains an object of type stem.","Tex":"Impulse Response","LaTex":[]}

FIR ローパス フィルターの振幅および位相応答をプロットします。

fvtool(FIRLPF,'Analysis','freq')

{"String":"Figure Figure 3: Magnitude Response (dB) and Phase Response contains an axes object. The axes object with title Magnitude Response (dB) and Phase Response contains an object of type line.","Tex":"Magnitude Response (dB) and Phase Response","LaTex":[]}

IIR ローパス フィルターの振幅および位相応答をプロットします。

fvtool(IIRLPF,'Analysis','freq')

{"String":"Figure Figure 4: Magnitude Response (dB) and Phase Response contains an axes object. The axes object with title Magnitude Response (dB) and Phase Response contains an object of type line.","Tex":"Magnitude Response (dB) and Phase Response","LaTex":[]}

FIR ローパス フィルターの実装コストを計算します。

cost(FIRLPF)
ans = struct with fields:
                  NumCoefficients: 39
                        NumStates: 38
    MultiplicationsPerInputSample: 39
          AdditionsPerInputSample: 38

IIR ローパス フィルターの実装コストを計算します。IIR フィルターのほうが FIR フィルターよりも効率的な実装になります。

cost(IIRLPF)
ans = struct with fields:
                  NumCoefficients: 18
                        NumStates: 14
    MultiplicationsPerInputSample: 18
          AdditionsPerInputSample: 14

FIR ローパス フィルターの群遅延を計算します。

grpdelay(FIRLPF)

{"String":"Figure Figure 5: Group delay contains an axes object. The axes object with title Group delay contains an object of type line.","Tex":"Group delay","LaTex":[]}

IIR ローパス フィルターの群遅延を計算します。FIR フィルターの群遅延は一定 (線形位相) である一方、IIR の群遅延は一定ではありません。

grpdelay(IIRLPF)

{"String":"Figure Figure 6: Group delay contains an axes object. The axes object with title Group delay contains an object of type line.","Tex":"Group delay","LaTex":[]}

入力引数

すべて折りたたむ

フィルター解析オプション。次のいずれかとして指定します。

  • 'magnitude' –– 振幅応答

  • 'phase' –– 位相応答

  • 'freq' –– 周波数応答

  • 'grpdelay' –– 群遅延

  • 'phasedelay' –– 位相遅延

  • 'impulse' –– インパルス応答

  • 'step' –– ステップ応答

  • 'polezero' –– 極/零点プロット

  • 'coefficients' –– 係数ベクトル

  • 'info' –– フィルター情報

  • 'magestimate' –– 振幅応答推定

  • 'noisepower' –– ノイズ パワー スペクトルの丸め誤差

例: fvtool(firFilt,'freq')

名前と値の引数

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

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

例: firFilt = dsp.FIRFilter('Numerator', fir1(130, 2000/(8000/2))); fvtool(firFilt,'Arithmetic','single')

サンプリング レート。スカラーとして指定します。この値により、fvtool がチャネライザーのフィルターの周波数応答を表示するナイキスト区間 [-Fs/2 Fs/2] が決まります。

データ型: single | double

解析で使用する演算を指定します。演算入力が指定されず、フィルター System object がロック解除状態の場合、解析ツールは倍精度フィルターであると仮定します。'Arithmetic' プロパティを 'Fixed' に設定した場合、固定小数点プロパティをもつフィルター System object のみに適用されます。

'Arithmetic' プロパティを 'Fixed' に設定すると、倍精度の参照フィルターと、フィルターの量子化されたバージョンが両方ともツールに表示されます。フィルターの量子化されたバージョンの作成には、次の 2 つを除くすべての解析オプションにおいて、それぞれのフィルター System object の CoefficientsDataType プロパティが使用されます。

  • 'magestimate' –– 振幅応答推定

  • 'noisepower' –– ノイズ パワー スペクトルの丸め誤差

この 2 つの解析オプションでは、フィルターの量子化されたバージョンを解析する際に、すべて固定小数点の設定が使用されます。

バージョン履歴

R2006a より前に導入