matlab的GUI实验——实现简单信号发生器

Posted 只是有点小怂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab的GUI实验——实现简单信号发生器相关的知识,希望对你有一定的参考价值。

  • 命令行输入 Guide 创建空白的 GUI 项目
  • 摆好控件,修改 Tag 名称和字体
  • 实现滑动条和显示框的联动,滑动条拖动到哪,显示框显示多少数字,显示框输入数字同样可以更改函数的值(滑动条有个范围 Min 到 Max,显示框输入的值要在这个范围内)
% 粘贴在滑动条回调函数下的代码
function fre_sliser_Callback(hObject)
v1 = get(handles.fre_slider,'Value');
s1 = sprintf('%f',v1);
set(handles.fre,'String',s1)
% 粘贴在滑动条对应的显示框的回调函数下的代码
function fre_Callback(hObject)
s1 = get(handles.fre,'String');
v1 = str2double(s1);
set(handles.fre_slider,'Value',v1)
  • 在信号的按钮的回调函数下粘贴以下代码,为了使得代码简洁,使用全局变量
global Type;
Type = 1;
my_callback_fcn(handles);
  • my_callback_fcn 是自定义函数,用来产生信号
function my_callback_fcn(handles)
global Type;
global fs;
global N;
global x;
fs = 44100;
dt = 1.0/fs;
T = 2;
N = T/dt;
t = linspace(0,T,N);
s1 = get(handles.fre,'String');
F = str2double(s1);
s1 = get(handles.amp,'String');
A = str2double(s1);
if Type == 1
	x = 0.5*A*randn(1,N);
end
if Type == 2
	x = A*sin(2*pi*F*t);
end
if Type == 3
	x = A*square(2*pi*F*t);
end
if Type == 4
	x = A*sawtooth(2*pi*F*t,0.5);
end
plot(handles.axes1,t,x,'b','LineWidth',5);
axis(handles.axes1,[0,0.01,-2500,2500]);
grid(handles.axes1);
  • 粘贴在播放按钮对应的回调函数下的代码
function Play_Callback(hObject)
global fs;
global x;
y = x*0.0003;% 衰减
sound(y,fs);
  • 进阶内容,实现信号的播放和暂停,设置定时器
global mytimer
mytimer = timer('StartDelay',1,'Period',1,'TasksToExecute',150,'ExecutionMode','fixedRate');
mytimer.TimerFcn = @my_callback_fcn;
% Run 播放按钮回调函数下的代码
global mytimer;
start(mytimer);
% Stop 暂停按钮回调函数下的代码
global mytimer;
stop(mytimer);

要在整个图形界面右键CreateFcn生成figure1_CreateFcn

  • 最终成果
  • 代码来自华中科技大学的《数字信号分析理论与实践》,仅作学习总结

以上是关于matlab的GUI实验——实现简单信号发生器的主要内容,如果未能解决你的问题,请参考以下文章

matlab 实现语音信号重采样和归一化,并播放比对效果

语音去噪基音matlab GUI音频信号去噪含Matlab源码 1386期

基于Matlab的脉搏信号处理软件系统(GUI界面)

基于Matlab的脉搏信号处理软件系统(GUI界面)

基于Matlab的脉搏信号处理软件系统(GUI界面)

语音去噪基于matlab GUI软阈值+硬阈值+软硬折中阈值语音去噪含Matlab源码 1810期