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实验——实现简单信号发生器的主要内容,如果未能解决你的问题,请参考以下文章