Приложение GUIDE с параметрами для отображения графиков

Этот пример показывает, как исследовать и запустить предварительно созданное приложение GUIDE. Приложение содержит три поля редактирования и две оси. Оси отображают частоту и представления области времени функции, которая является суммой двух синусоид. Лучшие два поля редактирования содержат частоту для каждой синусоиды компонента. Третье поле редактирования содержит область значений времени и уровень выборки для графиков.

Открытие и запуск примера

Открытый и выполнение приложение. Измените значения по умолчанию в f1 и f2 полях, чтобы изменить частоту для каждой синусоиды компонента. Можно также изменить эти три числа (разделенный двоеточиями) в t поле. Первые и последние числа задают окно времени, чтобы выбрать функцию. Средний номер задает уровень выборки.

Нажмите кнопку Plot, чтобы видеть график функции в частоте и временных интервалах.

Исследование кода

  1. В GUIDE нажмите кнопку Editor, чтобы просмотреть код.

  2. Около верхней части окна 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(handles.frequency_axes,'on');

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте