Matlab GUI程序设计入门——信号发生器+时域分析
背景:学习matlab gui编程入门,完成一个基于GUIDE的图形化界面程序,结合信号生成及分析等。
操作步骤:
1、新建程序
新建一个GUIDE程序
这里选择第一个选项,即创建一个空白的GUIDE模板(下面的三个选项为matlab自带的3个guide模板,可以尝试使用,但是空白模板更灵活一些)。
创建完成后,将会得到这样一个面板,这就是进行matlab进行guide图形化编程界面,在这里我们可以添加我们需要的各种控件到面板中。
可以看到上图中的,左侧有7行2列共14个常用的控件,添加时直接拖动即可,右侧的带油栅格的面板就是完成guide变成后,程序运行时的图形化界面。
7行2列控件分别为:
普通按钮 | 滑动条 |
单选按钮 | 复选按钮 |
可编辑文本 | 静态文本 |
弹出式菜单 | 列表框 |
切换按钮 | 表 |
坐标轴 | 面板 |
按钮组 | ActiveX控件 |
其中常用的控件包括:普通按钮、滑动条、可编辑文本、静态文本、坐标轴等。
2、图形化界面编程
首先可以根据预计生成的面板的大小,拉伸编程面板。
然后将需要的控件拖拽到编程面板中,并进行布局。这里可以使用上方工具栏的“对其对象”工具,进行布局。如:
完成布局后可以双击各个控件,修改其属性,控件的属性面板如下:(以滑动条为例)
下面,对几个比较重要的属性进行介绍:
字体属性:
滑动条变量取值范围:
标注文字(String)&标签(Tag):标签是最重要的属性,在代码中对每一个控件进行操作时,都是以其tag作为索引。
单位(Units)&初始值(Value):单位一般会选择charaters(绝对单位)和normalized(相对单位),选择characters则输出值为设定的最大最小值之间的实际值,选择normalized则输出值为归一化后的0~1之间的值。
其他各个控件的属性会有一些区别,和各个控件自身的特性有关,基本可以直接根据各个属性的字面意思理解。
完成控件的添加、布局和属性设定后,即可得到一个如下的界面图:
3、m文件编程:
完成上述图形编程后,点击保存,则会自动根据我们的设定,生成一个m文件模板。
模板中主要有以下几个部分:
1、程序初始化
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @signal_generator_OpeningFcn, ...
'gui_OutputFcn', @signal_generator_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
注意,这部分自动生成的初始化代码,一般不要修改!
2、程序open founction
% --- Executes just before signal_generator is made visible.
function signal_generator_OpeningFcn(hObject, eventdata, handles, varargin)
这部分代码会在完成图形界面控件的创建后,首先运行,一般可以在这里添加一些自定义变量的初始化代码等。
3、控件回调函数 callback
% --- Executes on button press in noise.
function noise_Callback(hObject, eventdata, handles)
这部分函数会分别对应于我们在图形编程界面添加的每一个控件,当某一个控件发生操作时,程序对自动调用它对应的回调函数(类似于中断回调函数)。
4、我们在生成的m文件中,自行添加自定义函数,完成我们需要执行的任务。将自定义函数在控件的回调函数中国调用即可。
以下为我完成的信号发生+时域分析 GUI程序的m文件代码,仅供参考:(文件可以在我的博客中下载)
function varargout = signal_generator(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @signal_generator_OpeningFcn, ...
'gui_OutputFcn', @signal_generator_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before signal_generator is made visible.
function signal_generator_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
global t;
global run;
% text windos init
set(handles.fre_text,'string',get(handles.fre_slider,'value'));
set(handles.amp_text,'string',get(handles.amp_slider,'value'));
% x axes data
%handles.x = linspace(0,0.03,441*3);
handles.x = linspace(0,1.5,44100*1.5);
% wave shape data
handles.shape = 2;
% data init
t = 0;
run = 0;
handles
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = signal_generator_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function my_callback(handles)
global sound_y;
global plot_y;
global plot_x;
global t;
x = handles.x;
fre = get(handles.fre_slider,'value');
amp = get(handles.amp_slider,'value');
% white noise
if handles.shape == 1
sound_y = 0.5*amp*wgn(1,44100*1.5,1);
% sin singal
elseif handles.shape == 2
sound_y = amp*sin(2*pi*fre*x);
% square singal
elseif handles.shape == 3
sound_y = amp*square(2*pi*fre*x);
% trangle singal
elseif handles.shape == 4
sound_y = amp*sawtooth(2*pi*fre*x,0.5);
end
plot_x = x(:,(1+t):(3*441+t));
plot_y = sound_y(:,(1+t):(3*441+t));
plot(handles.monitor,plot_x,plot_y);
set(handles.monitor,'ylimmode','manual');
set(handles.monitor,'ylim',[-2000,2000]);
% get peak value
peak_max = max(plot_y);
peak_min = min(plot_y);
peak_value = peak_max - peak_min;
set(handles.peak,'string',num2str(peak_value));
% get mean value
mean_value = mean(plot_y);
set(handles.mean,'string',num2str(mean_value));
% get rms value
rms_value = rms(plot_y);
set(handles.rms,'string',num2str(rms_value));
% % get frequency value
% fre_value = fft(plot_y);
% aaa = abs(fre_value);
% [m,p] = max(aaa);
% set(handles.std,'string',num2str(p));
% get std error value
std_value = std(plot_y);
set(handles.std,'string',num2str(std_value));
% --- Executes on button press in noise.
function noise_Callback(hObject, eventdata, handles)
handles.shape = 1;
guidata(hObject, handles);
my_callback(handles);
% --- Executes on button press in square.
function square_Callback(hObject, eventdata, handles)
handles.shape = 3;
guidata(hObject, handles);
my_callback(handles);
% --- Executes on button press in trangle.
function trangle_Callback(hObject, eventdata, handles)
handles.shape = 4;
guidata(hObject, handles);
my_callback(handles);
% --- Executes on button press in sin.
function sin_Callback(hObject, eventdata, handles)
handles.shape = 2;
guidata(hObject, handles);
my_callback(handles);
% --- Executes on slider movement.
function fre_slider_Callback(hObject, eventdata, handles)
set(handles.fre_text,'string',get(handles.fre_slider,'value'));
my_callback(handles);
% --- Executes during object creation, after setting all properties.
function fre_slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
function fre_text_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function fre_text_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on slider movement.
function amp_slider_Callback(hObject, eventdata, handles)
set(handles.amp_text,'string',get(handles.amp_slider,'value'));
my_callback(handles);
% --- Executes during object creation, after setting all properties.
function amp_slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
function amp_text_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function amp_text_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in run.
function run_Callback(hObject, eventdata, handles)
global t;
global run;
run = 1;
while run == 1
t = t+2;
my_callback(handles);
set(handles.monitor,'xlimmode','manual');
set(handles.monitor,'xlim',[(1+t)*0.000022,(3*441+t)*0.000022]);
pause(0.01);
end
% --- Executes on button press in stop.
function stop_Callback(hObject, eventdata, handles)
global run;
run = 0;
% --- Executes on button press in play.
function play_Callback(hObject, eventdata, handles)
global sound_y;
sound(sound_y,44100);
% --- Executes on button press in clear.
function clear_Callback(hObject, eventdata, handles)
delete(allchild(handles.monitor));
function peak_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function peak_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function mean_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function mean_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function rms_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function rms_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function std_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function std_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
——cloud over sky
——2020/3/23
Matlab GUI程序设计入门——信号发生器+时域分析的更多相关文章
- [转]matlab GUI 新手入门——最基本的几个概念
本文摘自iLoveMatlab论坛 1.从最简单的开始 编程的基本思想是:我执行一个操作,程序做出一个反应."一个操作"包括点击鼠标.拖动滑块.填写数据.选择选项等:"做 ...
- MATLAB GUI程序设计中ListBox控件在运行期间消失的原因及解决方法
在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an ...
- MATLAB GUI程序设计中使文本框接收多行输入的方法
对于文本框来说 Max属性于Min属性数值之差小于等于1时,仅接收单行输入 大于1时,接受多行输入 对于多行情况,set/get到的String应为cell 本系列文章允许转载,转载请保留全文! [说 ...
- 《MATLAB面向对象程序设计》
<MATLAB面向对象程序设计> 基本信息 作者: 苗志宏 马金强 出版社:电子工业出版社 ISBN:9787121233449 上架时间:2014-6-18 出版日期:2014 年 ...
- Matlab GUI memo
有一段时间没写博客,一周4篇文章都坚持不下来,不知道写哪个方面的内容,写研究相关就怕论文查重查到,其他方面也没太多时间去学.还是花时间多学点其他方面.废话到此,很早就做过matlab gui相关,现在 ...
- 信号与系统实验序章0——MATLAB基础命令入门
本次开启新的系列,关于用Matlab实现常见信号和函数的生成和变换. 同时如果没有MATLAB基础,那么可以跟着本文一步一步学习Matlab的相关操作,本文旨在记录在信号与系统课程中MATLAB的学习 ...
- matlab GUI界面编程总结
去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...
- Entity Framework 程序设计入门二 对数据进行CRUD操作和查询
前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...
- 转载:关于Matlab GUI的一些经验总结
去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...
随机推荐
- FPGA实现-shift_ram_3x3矩阵
shift_ram_3x3-FPGA实现 实现的方法为方法二,可以参考上一节关于中值滤波的介绍 shift_ram核介绍 https://www.cnblogs.com/ninghechuan/p/6 ...
- Redis服务器和客户端的通信
Redis客户端使用RESP(Redis序列化协议)与Redis服务器进行通信,RESP在位于TCP之上,而网络模型上客户端和服务器是保持的双工的连接.如图1 而一个简单的请求/响应的串行通信模型如下 ...
- Mybatis使用ResultMap
解决字段名和属性名不一致的问题 - 新建数据库表的字段-这里就不贴上了 在下面链接有 https://www.cnblogs.com/rzkwz/p/12853899.html 设置实体类和数据库字段 ...
- Android中限制输入框最大输入长度
通常情况下只需要在布局文件中加入maxlength这一属性即可 <EditText android:inputType="text" android:singleLine=& ...
- 在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)
大家都知道高并发分布式组件的重要性,而且如果要进大厂,这些技术不可或缺.但这些技术的学习难点在于,大多数项目里的分布式组件,都是搭建在Linux系统上,在自己的windows机器上很难搭建开发环境,如 ...
- Linux内核驱动学习(三)字符型设备驱动之初体验
Linux字符型设备驱动之初体验 文章目录 Linux字符型设备驱动之初体验 前言 框架 字符型设备 程序实现 cdev kobj owner file_operations dev_t 设备注册过程 ...
- Excel+Python:分组求和
Excel选中区域,排除序号.姓名等列,复制Ctrl+C. Python,import pandas as pd,读取剪切板并赋值给变量df,df.groupby('部门').sum().若要避免部门 ...
- Java语言简介、基础组成、封装、继承、多态、抽象类、内部类、接口
目录 Java简介 Java语言基础组成 面向对象 对象 封装 构造函数 this关键字 static(静态关键字) 主函数 静态什么时候用呢? 面向对象(数组工具对象建立) 设计模式 继承 成员变量 ...
- HTTP Strict Transport Security (通常简称为HSTS)
HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式. Freebuf百科:什么是Str ...
- 测试开发专题:如何在spring-boot中进行参数校验
上文我们讨论了spring-boot如何去获取前端传递过来的参数,那传递过来总不能直接使用,需要对这些参数进行校验,符合程序的要求才会进行下一步的处理,所以本篇文章我们主要讨论spring-boot中 ...