このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
FVTool を使用したフィルター解析
この例は、Signal Processing Toolbox™ で利用可能なグラフィカル ユーザー インターフェイスである、フィルターの可視化ツール (FVTool) によって、いくつかのフィルター解析関数を 1 つの Figure ウィンドウで利用する方法を示します。
FVTool は Application Program Interface (API) をもち、これがコマンド ラインからの GUI との対話を可能にしています。これにより、FVTool と他のアプリケーションの統合が可能になります。
FVTool の起動
通過帯域周波数 0.4π ラジアン/サンプル、阻止帯域周波数 0.6π ラジアン/サンプル、通過帯域リップル 1 dB、阻止帯域の減衰量 80 dB をもつローパス フィルターを作成します。ここでは、いくつかの Signal Processing Toolbox のフィルター設計ツールを使用してフィルターを設計し、結果を FVTool で解析します。
ローパス等リップル FIR フィルターを設計します。
Df1 = designfilt('lowpassfir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','equiripple');
ローパス楕円 IIR フィルターを設計します。
Df2 = designfilt('lowpassiir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','ellip');
フィルター オブジェクトを使用して FVTool を起動し、ハンドルを FVTool に返すことで、同じ FVTool Figure を再使用できます。
hfvt = fvtool(Df1, Df2);
フィルターの追加と削除
両方のフィルターが設計仕様を満たしているかが確認できますが、また、チェビシェフ II 型設計がどの程度正しく動作するかも確認します。
フィルターを FVTool に追加するには、関数 ADDFILTER を使用します。
Df3 = designfilt('lowpassiir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','cheby2'); addfilter(hfvt, Df3);
プロット上のどの線がどのフィルターに属しているかを識別できるように、FVTool ハンドルの関数 LEGEND で凡例を追加できます。
legend(hfvt, 'Equiripple', 'Elliptic', 'Chebyshev Type II');
FVTool からフィルターを削除するには、関数 DELETEFILTER を使用して、削除するフィルターのインデックスを渡します。
deletefilter(hfvt, [1 3]);
解析パラメーターの変更
FVTool によって返されるハンドルには、フィルターと現在の解析の両方を操作するためのプロパティが含まれています。
使用可能なすべてのプロパティを確認するには、GET コマンドを使用します。最初のプロパティは、通常の MATLAB® Figure のプロパティです。残りの 14 個のプロパティは FVTool に固有のプロパティです。その中の 6 個のプロパティ (FrequencyScale から MagnitudeDisplay まで) は解析に固有のプロパティです。
s = get(hfvt);
% Keep the last 14 properties
c = struct2cell(s);
f = fieldnames(s);
s = cell2struct(c(end-14:end),f(end-14:end),1)
s = struct with fields:
SelectionHighlight: on
Tag: 'filtervisualizationtool'
UserData: []
Visible: on
FrequencyVector: [0 0.0039 0.0078 0.0118 0.0157 0.0196 0.0235 ... ]
NumberofPoints: 8192
Analysis: 'magnitude'
NormalizeMagnitudeto1: 'off'
FrequencyRange: '[0, pi)'
PolyphaseView: 'off'
OverlayedAnalysis: ''
ShowReference: 'on'
NormalizedFrequency: 'on'
MagnitudeDisplay: 'Magnitude (dB)'
FrequencyScale: 'Linear'
FVTool の [解析パラメーター] ダイアログで使用可能なパラメーターはすべて、FVTool オブジェクトのプロパティとしても使用可能です。SET コマンドを 2 つの入力引数と一緒に使用すると、すべての可能な値を返します。
set(hfvt, 'MagnitudeDisplay')
ans = 1x4 cell
Columns 1 through 3
{'Magnitude'} {'Magnitude (dB)'} {'Magnitude squared'}
Column 4
{'Zero-phase'}
表示を 'Magnitude Squared' にします。
hfvt.MagnitudeDisplay = 'Magnitude Squared';
'Analysis' プロパティのすべての可能な値を取得します。
set(hfvt, 'Analysis')
ans = 1x12 cell
Columns 1 through 5
{'magnitude'} {'phase'} {'freq'} {'grpdelay'} {'phasedelay'}
Columns 6 through 10
{'impulse'} {'step'} {'polezero'} {'coefficients'} {'info'}
Columns 11 through 12
{'magestimate'} {'noisepower'}
次に解析を変更して、フィルターの群遅延応答を見てみましょう。
hfvt.Analysis = 'grpdelay';
GET コマンドは、新しい解析用の新しい解析パラメーターを返します。
GroupDelayUnits = hfvt.GroupDelayUnits;
2 つの解析結果の重ね描き
ここでは、群遅延と振幅応答が周波数領域でどのように重なるのかを確認します。
FVTool で共通の x 軸 (時間または周波数) を共有する 2 つの解析を重ね描きするには、'OverlayedAnalysis' プロパティを設定します。
set(hfvt, 'OverlayedAnalysis', 'magnitude', 'Legend', 'On')
重ね描きした解析をオフにするには、次のように 'OverlayedAnalysis' プロパティを設定します。
hfvt.OverlayedAnalysis = '';
Figure ウィンドウと似た FVTool の操作
FVTool ウィンドウは、通常の Figure ウィンドウと同様に注釈を付けることもできます。
FVTool Figure は通常の Figure ウィンドウと同様に動作します。これによって、MATLAB の関数 grid と関数 axis を使用できます。
grid on
axis([.3 .45 5 25]);
関数 axis は、コマンド ラインからもアクセスできます。これによってタイトルとラベルを変更できます。
title('Group Delay of an Elliptic filter'); xlabel('Frequency (normalized to 1)'); ylabel('Group Delay in samples'); htext = text(.35, 23, 'Maximum Group Delay');
FVTool では、追加された注釈は解析から自動的には削除されません。削除はハンドル自体の削除によって行われます。FVTool Figure を閉じるには、FVTool ハンドル上で関数 close を呼び出します。
delete(htext); close(hfvt)