function signalgenerator_GUI
% 创建 GUI
fig = figure('Name', '信号发生器', 'NumberTitle', 'off', 'Position', [200, 200, 400, 300]);
% 添加信号类型选择控件
signalTypeLabel = uicontrol('Style', 'text', 'String', '信号类型:', 'Position', [50, 240, 70, 20]);
signalTypeMenu = uicontrol('Style', 'popupmenu', 'String', {'正弦波', '方波', '三角波'}, 'Position', [120, 240, 100, 20]);
% 添加频率设置控件
frequencyLabel = uicontrol('Style', 'text', 'String', '频率 (Hz):', 'Position', [50, 200, 70, 20]);
frequencyEdit = uicontrol('Style', 'edit', 'Position', [120, 200, 100, 20]);
% 添加幅度设置控件
amplitudeLabel = uicontrol('Style', 'text', 'String', '幅度:', 'Position', [50, 160, 70, 20]);
amplitudeEdit = uicontrol('Style', 'edit', 'Position', [120, 160, 100, 20]);
% 添加信号长度设置控件
signalLengthLabel = uicontrol('Style', 'text', 'String', '信号长度:', 'Position', [50, 120, 70, 20]);
signalLengthEdit = uicontrol('Style', 'edit', 'Position', [120, 120, 100, 20]);
% 添加生成信号按钮
generateButton = uicontrol('Style', 'pushbutton', 'String', '生成信号', 'Position', [150, 80, 100, 30], 'Callback', @generateButtonCallback);
% 添加绘图区域
axesHandle = axes('Parent', fig, 'Position', [0.2, 0.25, 0.7, 0.6]);
% 生成信号的回调函数
function generateButtonCallback(~, ~)
% 获取用户选择的信号类型、频率、幅度和信号长度
signalTypes = {'正弦波', '方波', '三角波'};
selectedType = signalTypes{get(signalTypeMenu, 'Value')};
frequency = str2double(get(frequencyEdit, 'String'));
amplitude = str2double(get(amplitudeEdit, 'String'));
signalLength = str2double(get(signalLengthEdit, 'String'));
% 根据信号类型生成相应的信号
switch selectedType
case '正弦波'
t = linspace(0, signalLength, 1000);
signal = amplitude * sin(2 * pi * frequency * t);
case '方波'
t = linspace(0, signalLength, 1000);
signal = amplitude * square(2 * pi * frequency * t);
case '三角波'
t = linspace(0, signalLength, 1000);
signal = amplitude * sawtooth(2 * pi * frequency * t);
end
% 绘制信号
plot(axesHandle, t, signal);
xlabel('时间');
ylabel('幅度');
title(selectedType);
end
end
运行结果如下:
碎碎念:最近好喜欢matlab,他的功能也强大到超乎想象,希望能一直学下去!