Main Content

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

プロットの表示用パラメーターを使用する GUIDE アプリ

メモ

GUIDE 環境は将来のリリースで削除される予定です。既存の GUIDE アプリは、GUIDE が削除された後も引き続き MATLAB® で動作しますが、GUIDE での編集はできません。

既存の GUIDE アプリを引き続き編集するには、将来の MATLAB リリースとの互換性維持に役立つ方法について、GUIDE の移行策を参照してください。新しいアプリを対話的に作成する場合は、代わりにApp Designer を使用したアプリ開発を参照してください。

この例では、プリビルドの GUIDE アプリを確認および実行する方法を説明します。アプリには 3 つの編集フィールドと 2 つの座標軸が含まれています。座標軸には、2 つの正弦波の和を示す関数の周波数および時間領域表現が表示されます。上の 2 つの編集フィールドには、各コンポーネントの正弦波の周波数が含まれます。3 番目の編集フィールドには、プロットの時間範囲とサンプリング レートが含まれます。

例を開いて実行

アプリを開いて実行します。[f1] フィールドと [f2] フィールドの既定値を変更して、各コンポーネントの正弦波の周波数を変更します。[t] フィールドの (コロンで区切られた) 3 つの数値を変更することもできます。最初の数値と最後の数値で、関数をサンプリングする時間枠を指定します。真ん中の数値で、サンプル レートを指定します。

[Plot] ボタンをクリックして、周波数と時間領域の関数のグラフを表示します。

コードの確認

  1. GUIDE で、[エディター] ボタン をクリックしてコードを表示します。

  2. エディター ウィンドウの上部付近で、 [移動] ボタンを使用して、以下で説明する関数に移動します。

f1_input_Callbackf2_input_Callback

関数 f1_input_Callback は、[f1] 編集フィールドで値を変更すると実行されます。関数 f2_input_Callback[f2] フィールドの変更に応答し、関数 f1_input_Callback とほぼ同じです。どちらの関数も、有効なユーザー入力をチェックします。編集フィールドの値が無効な場合、[Plot] ボタンは無効になります。次は、関数 f1_input_Callback に対するコードを示します。

f1 = str2double(get(hObject,'String'));
if isnan(f1) || ~isreal(f1)
    % Disable the Plot button and change its string to say why
    set(handles.plot_button,'String','Cannot plot f1');
    set(handles.plot_button,'Enable','off');
    % Give the edit text box focus so user can correct the error
    uicontrol(hObject);
else 
    % Enable the Plot button with its original name
    set(handles.plot_button,'String','Plot');
    set(handles.plot_button,'Enable','on');
end

t_input_Callback

関数 t_input_Callback は、[t] 編集フィールドの値を変更すると実行されます。この try ブロックでは、値が数値であること、値の長さが 2 ~ 1000 であること、およびベクトルが単調増加していることを確認します。

try
    t = eval(get(handles.t_input,'String'));
    if ~isnumeric(t)
        % t is not a number
        set(handles.plot_button,'String','t is not numeric')
    elseif length(t) < 2
        % t is not a vector
        set(handles.plot_button,'String','t must be vector')
    elseif length(t) > 1000
        % t is too long a vector to plot clearly
        set(handles.plot_button,'String','t is too long')
    elseif min(diff(t)) < 0
        % t is not monotonically increasing
        set(handles.plot_button,'String','t must increase')
    else
        % Enable the Plot button with its original name
        set(handles.plot_button,'String','Plot')
        set(handles.plot_button,'Enable','on')
        return
    end

 catch EM
    % Cannot evaluate expression user typed
    set(handles.plot_button,'String','Cannot plot t');
    uicontrol(hObject);
end
catch ブロックで、[Plot] ボタンのラベルを変更し、入力値が無効であることを示します。uicontrol コマンドは、エラーのある値を含むフィールドにフォーカスを設定します。

plot_button_Callback

関数 plot_button_Callback は、[Plot] ボタンをクリックすると実行されます。

最初に、コールバックは次の 3 つの編集フィールドで値を取得します。

f1 = str2double(get(handles.f1_input,'String'));
f2 = str2double(get(handles.f2_input,'String'));
t = eval(get(handles.t_input,'String'));
次に、コールバックは f1f2 および t の値を使用して、時間領域で関数をサンプリングし、フーリエ変換を計算します。その後、以下の 2 つのプロットが更新されます。

% Create frequency plot in proper axes
plot(handles.frequency_axes,f,m(1:257));
set(handles.frequency_axes,'XMinorTick','on');
grid(handles.frequency_axes,'on');

% Create time plot in proper axes
plot(handles.time_axes,t,x);
set(handles.time_axes,'XMinorTick','on');
grid on

関連するトピック