Main Content

플롯을 표시하는 파라미터가 있는 GUIDE 앱

참고

GUIDE 환경은 향후 릴리스에서 제거될 예정입니다. GUIDE가 제거된 후에도 기존 GUIDE 앱은 MATLAB®에서 계속 실행할 수 있지만 GUIDE에서 편집할 수는 없게 됩니다.

기존의 GUIDE 앱을 계속 편집하려면 GUIDE 마이그레이션 전략 항목에서 향후 MATLAB 릴리스와의 앱 호환성을 유지하는 방법에 대한 내용을 참고하십시오. 대화형 방식으로 새 앱을 만들려면 앱 디자이너를 사용하여 앱 개발하기 항목을 대신 참조하십시오.

이 예제에서는 사전 작성된 GUIDE 앱을 검토하고 실행하는 방법을 보여줍니다. 이 앱에는 3개의 편집 필드와 2개의 좌표축이 포함되어 있습니다. 좌표축에는 사인파 2개의 합으로 이루어진 함수의 주파수 영역 표현과 시간 영역 표현이 표시됩니다. 상단에 있는 2개의 편집 필드에는 각 구성요소 사인파의 주파수가 포함됩니다. 세 번째 편집 필드에는 플롯의 시간 범위와 샘플링 레이트가 포함됩니다.

예제 열기 및 실행하기

앱을 열고 실행합니다. f1 필드와 f2 필드에서 디폴트 값을 변경하여 각 구성요소 사인파의 주파수를 변경합니다. t 필드에서 콜론으로 구분된 3개의 숫자도 변경할 수 있습니다. 첫 번째 숫자와 마지막 숫자는 함수를 샘플링하는 시간 길이를 지정합니다. 가운데 숫자는 샘플링 레이트를 지정합니다.

Plot 버튼을 눌러 주파수 영역과 시간 영역에서 함수 그래프를 확인합니다.

코드 살펴보기

  1. GUIDE에서 편집기 버튼 을 클릭하여 코드를 확인합니다.

  2. 편집기 창 상단에 있는 이동 버튼을 사용하여 아래에서 설명하는 함수로 이동합니다.

f1_input_Callbackf2_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

관련 항목