Этот пример показывает, как исследовать и запустить предварительно созданное приложение GUIDE. Приложение содержит три поля редактирования и две оси. Оси отображают частоту и представления области времени функции, которая является суммой двух синусоид. Лучшие два поля редактирования содержат частоту для каждой синусоиды компонента. Третье поле редактирования содержит область значений времени и уровень выборки для графиков.
Открытый и выполнение приложение. Измените значения по умолчанию в f1 и f2 полях, чтобы изменить частоту для каждой синусоиды компонента. Можно также изменить эти три числа (разделенный двоеточиями) в t поле. Первые и последние числа задают окно времени, чтобы выбрать функцию. Средний номер задает уровень выборки.
Нажмите кнопку Plot, чтобы видеть график функции в частоте и временных интервалах.
В GUIDE нажмите кнопку Editor, чтобы просмотреть код.
Около верхней части окна Editor используйте кнопку Go To, чтобы перейти к функциям, обсужденным ниже.
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.
Во-первых, обратный вызов получает значения в этих трех полях редактирования:
f1 = str2double(get(handles.f1_input,'String')); f2 = str2double(get(handles.f2_input,'String')); t = eval(get(handles.t_input,'String'));
f1
, f2
и t
, чтобы выбрать функцию во временном интервале и вычислить преобразование Фурье. Затем два графика обновляются:
% Create frequency plot in proper axes plot(handles.frequency_axes,f,m(1:257)); set(handles.frequency_axes,'XMinorTick','on'); grid on % Create time plot in proper axes plot(handles.time_axes,t,x); set(handles.time_axes,'XMinorTick','on'); grid on