matlab数字信号发生器及电子琴设计.docx
- 文档编号:3195004
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:15
- 大小:486.35KB
matlab数字信号发生器及电子琴设计.docx
《matlab数字信号发生器及电子琴设计.docx》由会员分享,可在线阅读,更多相关《matlab数字信号发生器及电子琴设计.docx(15页珍藏版)》请在冰豆网上搜索。
matlab数字信号发生器及电子琴设计
数字信号发生器和数字电子琴
摘要Matlab是一个具有数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等功能的工程实用软件。
其易于使用的视窗环境,在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式。
本文介绍了一种使用GUI工具箱,用Matlab实现虚拟数字信号发生器的设计。
关键词Matlab;信号发生器;数字电子琴
1概述
MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商业数学软件。
可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
Matlab自带了强大的GUl工具[1]。
在本文中,将利用Matlab的GUI工具,设计出数字信号发生器和数字电子琴。
信号发生器又称信号源或振荡器,是一种能提供各种频率、波形和输出电平电信号,常用作测试的信号源或激励源的设备,在生产实践和科技领域中有着广泛的应用。
按信号波形可分为正弦信号、函数(波形)信号、脉冲信号和随机信号发生器等四大类[2]。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
本文设计了一种可以产生正弦波、余弦波、方波、三角波、锯齿波、白噪声的虚拟数字信号发生器。
2技术路线
虚拟数字信号发生器设计的流程图如图2.1:
图2.1数字信号发生器流程图
在此基础上,将产生的数字信号写入声卡,即可播放出相应音阶的声音,实现电子琴的功能。
3实现方法
3.1数字信号发生器
3.1.1搭建GUI界面
图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
Matlab凭借其强大的计算能力,系统集成能力以及图形处理能力,其图形用户接口(GUI)也日趋成熟。
MatlabGUI的控件丰富,调用方便,可视化效果美观。
GUI可以使得参数的输入和结果的输出可视化更高,操作更加方便。
本次设计使用GUI搭建的界面如图3.1所示。
图3.1数字信号发生器界面
3.1.2编写M文件
搭建好界面后保存,系统将自动生成M文件与Fig文件,并且M文件内部已经按照GUI界面中组件的类别,自动生成了相应的模块调用函数。
根据需要,我们对生成的各个函数进行补充,完成函数功能的实现及各个函数的调用关系。
本次实验主要对控件的回调函数(callback)下写入相应的程序。
下面这段程序(部分程序)实现了函数根据用户的输入生成不同的正弦波、余弦波、三角波、方波等,最终将波形显示在坐标轴1上。
其中,sliderA,editA输入幅值,当用户在输入一个新的幅值时,A为对应幅值变量,发生相应改变,并判断选择的是何种波型,然后对相应的波型的幅值进行修改,最终通过绘图函数的调用将新波形显示在图上。
同理,当我们逐渐改变频率和相位时,波形也会对应发生变化,在此不再赘述。
幅值滚动条的回调函数如下:
functionsliderA_Callback(hObject,eventdata,handles)
a=get(hObject,'value');
set(handles.editA,'string',a);
幅值可变文本的回调函数如下:
functioneditA_Callback(hObject,eventdata,handles)
val=get(hObject,'string');
a=str2num(val);
if~isempty(a)&&(val>=0&val<=20)
set(handles.sliderA,'value',a)
end
下拉菜单回调函数如下:
functionpopupmenu1_Callback(hObject,eventdata,handles)
A=str2num(get(handles.editA,'string'));
f=str2num(get(handles.editF,'string'));
d=str2num(get(handles.editD,'string'));
fs=5000;
T=0.05;
dt=1.0/fs;
N=T/dt;
t=linspace(0,T,N);
s=get(hObject,'value');
switchs
case1
y=A*sin(2*pi*f*t+d);
axes(handles.axes1);
plot(t,y);
case2
y=A*cos(2*pi*f*t+d);
axes(handles.axes1);
plot(t,y);
case3
y=A*square(2*pi*f*t+d)
axes(handles.axes1);
plot(t,y);
case4
y=A*sawtooth(2*pi*f*t+d,0.5);
axes(handles.axes1);
plot(t,y);
case5
y=A*sawtooth(2*pi*f*t+d,1);
axes(handles.axes1);
plot(t,y);
case6
y=sqrt
(1)*randn(1,N)
axes(handles.axes1);
plot(t,y);
end
3.1.3设计结果
通过数字信号发生器,产生需要的信号,如下图所示:
图3.2正弦波1
图3.3正弦波2
图3.4余弦波
图3.5方波
图3.6三角波
图3.7锯齿波
图3.8白噪声
3.2数字电子琴
3.2.1搭建GUI界面
电子琴GUI界面搭建如图3.9所示:
图3.9数字电子琴
3.2.2编写M文件
波形选择回调函数:
a=get(hObject,'value');
音量大小通过波形的幅值反映,按键对应的波形的回调函数(以按键1为例)如下,其中edit2,slider2为音量控制:
functionpushbutton1_Callback(hObject,eventdata,handles)
globala;
axes(handles.axes1);
a=get(handles.popupmenu1,'value')
Fs=44100;
strA=get(handles.edit2,'string');
A=str2double(strA);
str=get(handles.slider2,'Value');
set(handles.edit2,'string',str);
dt=1.0/Fs;
t=0:
dt:
0.1;
ifa==1
y=A*sin(2*pi*131*t);
plot(t,y);
wavplay(y,Fs);
axis([00.1-100100]);
end
ifa==2
y=A*cos(2*pi*131*t);
plot(t,y);
wavplay(y,Fs);
axis([00.1-100100]);
end
ifa==3
y=A*square(2*pi*131*t);
plot(t,y);
wavplay(y,Fs);
axis([00.1-100100]);
end
ifa==4
y=A*sawtooth(2*pi*131*t,0.5);
plot(t,y);
wavplay(y,Fs);
axis([00.1-100100]);
end
ifa==5%¾â³Ý²¨
y=A*sawtooth(2*pi*131*t,1);
plot(t,y);
wavplay(y,Fs);
axis([00.1-100100]);
end
3.2.3设计结果
通过鼠标,分别点击按键1-7,产生的波形如下所示。
调节音量,可改变信号幅值。
图3.10电子琴1
图3.11电子琴2
图3.12电子琴3
图3.13电子琴4
图3.14电子琴5
图3.15电子琴6
图3.16电子琴7
4存在的问题
本次设计虽然基本实现了信号发生器和电子琴的要求,但是还是存在一些不足。
比如信号发生器功能简陋,不能输入阶跃信号、脉冲信号等,不能完成有效值、平均值、幅值的转换显示等。
数字电子琴的音阶也只是最基本的7个音阶,且不能导入音频文件,使用电子琴播放等,这些都是以后的学习中可以改进的地方。
参考文献
[1].张志涌等.精通MATLAB[M].北京:
北京航空航天大学出版社,2003.
[2].车子萍.基于Matlab的虚拟信号发生器设计[J].电脑学习,2010.1.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 数字信号 发生器 电子琴 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)