このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
プロットの表示用パラメーターを使用する GUIDE アプリ
メモ
GUIDE 環境は将来のリリースで削除される予定です。既存の GUIDE アプリは、GUIDE が削除された後も引き続き MATLAB® で動作しますが、GUIDE での編集はできません。
既存の GUIDE アプリを引き続き編集するには、将来の MATLAB リリースとの互換性維持に役立つ方法について、GUIDE の移行策を参照してください。新しいアプリを対話的に作成する場合は、代わりにApp Designer を使用したアプリ開発を参照してください。
この例では、プリビルドの GUIDE アプリを確認および実行する方法を説明します。アプリには 3 つの編集フィールドと 2 つの座標軸が含まれています。座標軸には、2 つの正弦波の和を示す関数の周波数および時間領域表現が表示されます。上の 2 つの編集フィールドには、各コンポーネントの正弦波の周波数が含まれます。3 番目の編集フィールドには、プロットの時間範囲とサンプリング レートが含まれます。
例を開いて実行
アプリを開いて実行します。[f1] フィールドと [f2] フィールドの既定値を変更して、各コンポーネントの正弦波の周波数を変更します。[t] フィールドの (コロンで区切られた) 3 つの数値を変更することもできます。最初の数値と最後の数値で、関数をサンプリングする時間枠を指定します。真ん中の数値で、サンプル レートを指定します。
[Plot] ボタンをクリックして、周波数と時間領域の関数のグラフを表示します。
コードの確認
GUIDE で、[エディター] ボタン をクリックしてコードを表示します。
エディター ウィンドウの上部付近で、 [移動] ボタンを使用して、以下で説明する関数に移動します。
f1_input_Callback
と f2_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'));
f1
、f2
および 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