플롯을 표시하는 파라미터가 있는 GUIDE 앱
참고
GUIDE 환경은 향후 릴리스에서 제거될 예정입니다. GUIDE가 제거된 후에도 기존 GUIDE 앱은 MATLAB®에서 계속 실행할 수 있지만 GUIDE에서 편집할 수는 없게 됩니다.
기존의 GUIDE 앱을 계속 편집하려면 GUIDE 마이그레이션 전략 항목에서 향후 MATLAB 릴리스와의 앱 호환성을 유지하는 방법에 대한 내용을 참고하십시오. 대화형 방식으로 새 앱을 만들려면 앱 디자이너를 사용하여 앱 개발하기 항목을 대신 참조하십시오.
이 예제에서는 사전 작성된 GUIDE 앱을 검토하고 실행하는 방법을 보여줍니다. 이 앱에는 3개의 편집 필드와 2개의 좌표축이 포함되어 있습니다. 좌표축에는 사인파 2개의 합으로 이루어진 함수의 주파수 영역 표현과 시간 영역 표현이 표시됩니다. 상단에 있는 2개의 편집 필드에는 각 성분 사인파의 주파수가 포함됩니다. 세 번째 편집 필드에는 플롯의 시간 범위와 샘플링 레이트가 포함됩니다.
예제 열기 및 실행하기
앱을 열고 실행합니다. f1 필드와 f2 필드에서 디폴트 값을 변경하여 각 성분 사인파의 주파수를 변경합니다. t 필드에서 콜론으로 구분된 3개의 숫자도 변경할 수 있습니다. 첫 번째 숫자와 마지막 숫자는 함수를 샘플링하는 시간 길이를 지정합니다. 가운데 숫자는 샘플링 레이트를 지정합니다.
Plot 버튼을 눌러 주파수 영역과 시간 영역에서 함수 그래프를 확인합니다.
코드 살펴보기
GUIDE에서 편집기 버튼 을 클릭하여 코드를 확인합니다.
편집기 창 상단에 있는 이동 버튼을 사용하여 아래에서 설명하는 함수로 이동합니다.
f1_input_Callback
및 f2_input_Callback
사용자가 f1 편집 필드의 값을 변경하면 f1_input_Callback
함수가 실행됩니다. 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 편집 필드의 값을 변경하면 t_input_Callback
함수가 실행됩니다. 이 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 버튼을 클릭하면 plot_button_Callback
함수가 실행됩니다.
우선, 콜백은 편집 필드 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