背景:学习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、程序初始化

  1. % Begin initialization code - DO NOT EDIT
  2. gui_Singleton = 1;
  3. gui_State = struct('gui_Name', mfilename, ...
  4. 'gui_Singleton', gui_Singleton, ...
  5. 'gui_OpeningFcn', @signal_generator_OpeningFcn, ...
  6. 'gui_OutputFcn', @signal_generator_OutputFcn, ...
  7. 'gui_LayoutFcn', [] , ...
  8. 'gui_Callback', []);
  9. if nargin && ischar(varargin{1})
  10. gui_State.gui_Callback = str2func(varargin{1});
  11. end
  12. if nargout
  13. [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  14. else
  15. gui_mainfcn(gui_State, varargin{:});
  16. end
  17. % End initialization code - DO NOT EDIT

注意,这部分自动生成的初始化代码,一般不要修改!

2、程序open founction

  1. % --- Executes just before signal_generator is made visible.
  2. function signal_generator_OpeningFcn(hObject, eventdata, handles, varargin)

这部分代码会在完成图形界面控件的创建后,首先运行,一般可以在这里添加一些自定义变量的初始化代码等。

3、控件回调函数 callback

  1. % --- Executes on button press in noise.
  2. function noise_Callback(hObject, eventdata, handles)

这部分函数会分别对应于我们在图形编程界面添加的每一个控件,当某一个控件发生操作时,程序对自动调用它对应的回调函数(类似于中断回调函数)。

4、我们在生成的m文件中,自行添加自定义函数,完成我们需要执行的任务。将自定义函数在控件的回调函数中国调用即可。

以下为我完成的信号发生+时域分析 GUI程序的m文件代码,仅供参考:(文件可以在我的博客中下载)

  1. function varargout = signal_generator(varargin)
  2. % Begin initialization code - DO NOT EDIT
  3. gui_Singleton = 1;
  4. gui_State = struct('gui_Name', mfilename, ...
  5. 'gui_Singleton', gui_Singleton, ...
  6. 'gui_OpeningFcn', @signal_generator_OpeningFcn, ...
  7. 'gui_OutputFcn', @signal_generator_OutputFcn, ...
  8. 'gui_LayoutFcn', [] , ...
  9. 'gui_Callback', []);
  10. if nargin && ischar(varargin{1})
  11. gui_State.gui_Callback = str2func(varargin{1});
  12. end
  13. if nargout
  14. [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  15. else
  16. gui_mainfcn(gui_State, varargin{:});
  17. end
  18. % End initialization code - DO NOT EDIT
  19. % --- Executes just before signal_generator is made visible.
  20. function signal_generator_OpeningFcn(hObject, eventdata, handles, varargin)
  21. handles.output = hObject;
  22. global t;
  23. global run;
  24. % text windos init
  25. set(handles.fre_text,'string',get(handles.fre_slider,'value'));
  26. set(handles.amp_text,'string',get(handles.amp_slider,'value'));
  27. % x axes data
  28. %handles.x = linspace(0,0.03,441*3);
  29. handles.x = linspace(0,1.5,44100*1.5);
  30. % wave shape data
  31. handles.shape = 2;
  32. % data init
  33. t = 0;
  34. run = 0;
  35. handles
  36. guidata(hObject, handles);
  37. % --- Outputs from this function are returned to the command line.
  38. function varargout = signal_generator_OutputFcn(hObject, eventdata, handles)
  39. varargout{1} = handles.output;
  40. function my_callback(handles)
  41. global sound_y;
  42. global plot_y;
  43. global plot_x;
  44. global t;
  45. x = handles.x;
  46. fre = get(handles.fre_slider,'value');
  47. amp = get(handles.amp_slider,'value');
  48. % white noise
  49. if handles.shape == 1
  50. sound_y = 0.5*amp*wgn(1,44100*1.5,1);
  51. % sin singal
  52. elseif handles.shape == 2
  53. sound_y = amp*sin(2*pi*fre*x);
  54. % square singal
  55. elseif handles.shape == 3
  56. sound_y = amp*square(2*pi*fre*x);
  57. % trangle singal
  58. elseif handles.shape == 4
  59. sound_y = amp*sawtooth(2*pi*fre*x,0.5);
  60. end
  61. plot_x = x(:,(1+t):(3*441+t));
  62. plot_y = sound_y(:,(1+t):(3*441+t));
  63. plot(handles.monitor,plot_x,plot_y);
  64. set(handles.monitor,'ylimmode','manual');
  65. set(handles.monitor,'ylim',[-2000,2000]);
  66. % get peak value
  67. peak_max = max(plot_y);
  68. peak_min = min(plot_y);
  69. peak_value = peak_max - peak_min;
  70. set(handles.peak,'string',num2str(peak_value));
  71. % get mean value
  72. mean_value = mean(plot_y);
  73. set(handles.mean,'string',num2str(mean_value));
  74. % get rms value
  75. rms_value = rms(plot_y);
  76. set(handles.rms,'string',num2str(rms_value));
  77. % % get frequency value
  78. % fre_value = fft(plot_y);
  79. % aaa = abs(fre_value);
  80. % [m,p] = max(aaa);
  81. % set(handles.std,'string',num2str(p));
  82. % get std error value
  83. std_value = std(plot_y);
  84. set(handles.std,'string',num2str(std_value));
  85. % --- Executes on button press in noise.
  86. function noise_Callback(hObject, eventdata, handles)
  87. handles.shape = 1;
  88. guidata(hObject, handles);
  89. my_callback(handles);
  90. % --- Executes on button press in square.
  91. function square_Callback(hObject, eventdata, handles)
  92. handles.shape = 3;
  93. guidata(hObject, handles);
  94. my_callback(handles);
  95. % --- Executes on button press in trangle.
  96. function trangle_Callback(hObject, eventdata, handles)
  97. handles.shape = 4;
  98. guidata(hObject, handles);
  99. my_callback(handles);
  100. % --- Executes on button press in sin.
  101. function sin_Callback(hObject, eventdata, handles)
  102. handles.shape = 2;
  103. guidata(hObject, handles);
  104. my_callback(handles);
  105. % --- Executes on slider movement.
  106. function fre_slider_Callback(hObject, eventdata, handles)
  107. set(handles.fre_text,'string',get(handles.fre_slider,'value'));
  108. my_callback(handles);
  109. % --- Executes during object creation, after setting all properties.
  110. function fre_slider_CreateFcn(hObject, eventdata, handles)
  111. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  112. set(hObject,'BackgroundColor',[.9 .9 .9]);
  113. end
  114. function fre_text_Callback(hObject, eventdata, handles)
  115. % --- Executes during object creation, after setting all properties.
  116. function fre_text_CreateFcn(hObject, eventdata, handles)
  117. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  118. set(hObject,'BackgroundColor','white');
  119. end
  120. % --- Executes on slider movement.
  121. function amp_slider_Callback(hObject, eventdata, handles)
  122. set(handles.amp_text,'string',get(handles.amp_slider,'value'));
  123. my_callback(handles);
  124. % --- Executes during object creation, after setting all properties.
  125. function amp_slider_CreateFcn(hObject, eventdata, handles)
  126. if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  127. set(hObject,'BackgroundColor',[.9 .9 .9]);
  128. end
  129. function amp_text_Callback(hObject, eventdata, handles)
  130. % --- Executes during object creation, after setting all properties.
  131. function amp_text_CreateFcn(hObject, eventdata, handles)
  132. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  133. set(hObject,'BackgroundColor','white');
  134. end
  135. % --- Executes on button press in run.
  136. function run_Callback(hObject, eventdata, handles)
  137. global t;
  138. global run;
  139. run = 1;
  140. while run == 1
  141. t = t+2;
  142. my_callback(handles);
  143. set(handles.monitor,'xlimmode','manual');
  144. set(handles.monitor,'xlim',[(1+t)*0.000022,(3*441+t)*0.000022]);
  145. pause(0.01);
  146. end
  147. % --- Executes on button press in stop.
  148. function stop_Callback(hObject, eventdata, handles)
  149. global run;
  150. run = 0;
  151. % --- Executes on button press in play.
  152. function play_Callback(hObject, eventdata, handles)
  153. global sound_y;
  154. sound(sound_y,44100);
  155. % --- Executes on button press in clear.
  156. function clear_Callback(hObject, eventdata, handles)
  157. delete(allchild(handles.monitor));
  158. function peak_Callback(hObject, eventdata, handles)
  159. % --- Executes during object creation, after setting all properties.
  160. function peak_CreateFcn(hObject, eventdata, handles)
  161. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  162. set(hObject,'BackgroundColor','white');
  163. end
  164. function mean_Callback(hObject, eventdata, handles)
  165. % --- Executes during object creation, after setting all properties.
  166. function mean_CreateFcn(hObject, eventdata, handles)
  167. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  168. set(hObject,'BackgroundColor','white');
  169. end
  170. function rms_Callback(hObject, eventdata, handles)
  171. % --- Executes during object creation, after setting all properties.
  172. function rms_CreateFcn(hObject, eventdata, handles)
  173. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  174. set(hObject,'BackgroundColor','white');
  175. end
  176. function std_Callback(hObject, eventdata, handles)
  177. % --- Executes during object creation, after setting all properties.
  178. function std_CreateFcn(hObject, eventdata, handles)
  179. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  180. set(hObject,'BackgroundColor','white');
  181. end

——cloud over sky

——2020/3/23

Matlab GUI程序设计入门——信号发生器+时域分析的更多相关文章

  1. [转]matlab GUI 新手入门——最基本的几个概念

    本文摘自iLoveMatlab论坛 1.从最简单的开始 编程的基本思想是:我执行一个操作,程序做出一个反应."一个操作"包括点击鼠标.拖动滑块.填写数据.选择选项等:"做 ...

  2. MATLAB GUI程序设计中ListBox控件在运行期间消失的原因及解决方法

    在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an ...

  3. MATLAB GUI程序设计中使文本框接收多行输入的方法

    对于文本框来说 Max属性于Min属性数值之差小于等于1时,仅接收单行输入 大于1时,接受多行输入 对于多行情况,set/get到的String应为cell 本系列文章允许转载,转载请保留全文! [说 ...

  4. 《MATLAB面向对象程序设计》

    <MATLAB面向对象程序设计> 基本信息 作者: 苗志宏    马金强 出版社:电子工业出版社 ISBN:9787121233449 上架时间:2014-6-18 出版日期:2014 年 ...

  5. Matlab GUI memo

    有一段时间没写博客,一周4篇文章都坚持不下来,不知道写哪个方面的内容,写研究相关就怕论文查重查到,其他方面也没太多时间去学.还是花时间多学点其他方面.废话到此,很早就做过matlab gui相关,现在 ...

  6. 信号与系统实验序章0——MATLAB基础命令入门

    本次开启新的系列,关于用Matlab实现常见信号和函数的生成和变换. 同时如果没有MATLAB基础,那么可以跟着本文一步一步学习Matlab的相关操作,本文旨在记录在信号与系统课程中MATLAB的学习 ...

  7. matlab GUI界面编程总结

    去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...

  8. Entity Framework 程序设计入门二 对数据进行CRUD操作和查询

    前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...

  9. 转载:关于Matlab GUI的一些经验总结

    去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...

随机推荐

  1. 绕WAF文章收集

    在看了bypassword的<在HTTP协议层面绕过WAF>之后,想起了之前做过的一些研究,所以写个简单的短文来补充一下文章里“分块传输”部分没提到的两个技巧. 技巧1 使用注释扰乱分块数 ...

  2. js怎么删除数组元素,有哪些删除元素方法

    JavaScript删除元素方法 1.根据索引删除数组元素 delete 数组[索引]   *注意delete 后面是空格 var arr1=["aa","bb" ...

  3. 使用 vi 命令创建一个cpp文件

    mkdir text //创建一个text的文件夹 cd text //打开text的文件夹 vi text.cpp //创建text.cpp 按住 i 键输入程序 输入后按esc,再按wq退出 ls ...

  4. 王颖奇 201771010129 《面向对象程序设计(java)》第二周学习总结

    <面向对象程序设计(java)>第二周学习总结 王颖奇 201771010129 第一部分:实验目的与要求 ①理论部分目的与要求 (1)基本知识(2)数据类型(3)变量(4)运算符(5)类 ...

  5. Qt保持窗口在最上方

    原文:https://blog.csdn.net/hl1hl/article/details/85244451 前言 在Qt开发桌面软件的过程中,根据开发的需求不同,我们经常需要将弹出窗口,一般常见的 ...

  6. Linux 通过终端命令行切换系统语言

    通过命令的形式修改系统的语言,比较详细的讲解了来龙去脉: 文章目录 0 前言 1 locale 文件 2 查找相关文件 3 解决方案 4 相关信息 4.1 locale属性的含义 4.2 LANGUA ...

  7. 在ef core中使用postgres数据库的全文检索功能实战

    起源 之前做的很多项目都使用solr/elasticsearch作为全文检索引擎,它们功能全面而强大,但是对于较小的项目而言,构建和维护成本显然过高,尤其是从关系数据库/文档数据库到全文检索引擎的数据 ...

  8. 2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup

    2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup 2020年网鼎杯白虎组赛题.zip下载 https://download.csdn.net/download/jameswhit ...

  9. 【雕爷学编程】Arduino动手做(52)---MicroSD卡读写模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种 的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准 ...

  10. 「雕爷学编程」Arduino动手做(31)——ISD1820语音模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...