1. 控件布局
打开Matlab,在命令行输入guide
启动GUI设计工具,拖动控件开始设计:
波形显示控件(axes)
波形显示控件可以用于绘制各种波形,拖动控件到画布中即可,然后根据需要调整控件大小:
滑动条控件(slider)
滑动条可以用于滑动调节波形的频率和幅度,并拖动两个静态文件控件用于说明:
双击频率的滑动条,设置其最大值和最小值,以及默认值:
同样,设置幅度的属性值:
可编辑文本框(edit)
可编辑文本框有两个功能:
- 用于直接设置波形的频率和幅度;
- 用于显示滑动条设置的频率值和幅度值;
拖动两个编辑框并在属性中设置其默认值:
按钮控件
按钮控件用于启动波形显示:
保存设计
设计完成之后,点击保存按钮或者按Ctrl+S
保存设计:
2. 回调函数,让界面动起来
滑动条和编辑框联动
首先编辑滑动条的回调函数,实现拖动滑动条,编辑框可以显示对应的值:
v1 = get(handles.slider1, 'Value');
s1 = sprintf("%f", v1);
set(handles.edit1, 'String', s1);
点击运行,查看效果:
同样,编写另一个滑动条的回调函数:
v2 = get(handles.slider2,'Value');
s2 = sprintf("%f", v2);
set(handles.edit2, 'String', s2);
实现的效果如下:
再来编写频率文本编辑框的回调函数,当输入一个值的时候,滑动条的值跟着变化:
s1=get(handles.edit1,'String');
v1=str2double(s1);
set(handles.slider1,'Value',v1);
同样,再来编写幅度文本框的回调函数:
s2=get(handles.edit2,'String');
v2=str2double(s2);
set(handles.slider2,'Value',v2);
编写一个绘制波形的自定义函数
点击按钮、调节滑动条,都需要重新绘制波形,所以先编写一个自定义函数,供其它函数调用:
function draw_wave(handles)
global Fs
global A
Fs = 44100;
dt=1.0/Fs;
T =2;
N=T/dt;
t=linspace(0,T,N);
s1=get(handles.edit1,'String');
F=str2double(s1);
s1=get(handles.edit2,'String');
A=str2double(s1);
x =A*sin(2*pi*F*t);
plot(handles.axes1,t,x,'b','LineWidth',1.5);
axis(handles.axes1,[0, 0.01, -2500,2500]);
grid(handles.axes1);
点击按钮,显示波形
编写按钮的回调函数,在回调函数里调用之前编写的自定义函数显示波形:
draw_wave(handles);
运行效果如下:
添加频率滑动条调节波形功能
继续编辑滑动条的回调函数,添加波形显示功能:
频率调节滑动条完整的回调函数如下:
v1 = get(handles.slider1, 'Value');
s1 = sprintf("%f", v1);
set(handles.edit1, 'String', s1);
global Fs
Fs = v1;
draw_wave(handles);
运行效果如下:
添加幅度滑动条调节波形功能
继续编辑滑动条的回调函数,添加波形显示功能:
幅度调节滑动条完整的回调函数如下:
v2 = get(handles.slider2,'Value');
s2 = sprintf("%f", v2);
set(handles.edit2, 'String', s2);
global A
A = v2;
draw_wave(handles);
运行效果如下:
添加编辑框调节频率和幅度的功能
同样,在频率编辑框的回调函数中添加代码,完整的回调函数如下:
s1=get(handles.edit1,'String');
v1=str2double(s1);
set(handles.slider1,'Value',v1);
global Fs
Fs = v1;
draw_wave(handles);
在幅度编辑框的回调函数添加同样的功能,完整的回调函数如下:
s2=get(handles.edit2,'String');
v2=str2double(s2);
set(handles.slider2,'Value',v2);
global A
A = v2;
draw_wave(handles);
运行即可看到效果,请参考下一节的完整演示效果。
3. 演示效果
整个程序的完整演示效果如下:
接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。