matlab电子琴说明书.docx
- 文档编号:25875236
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:13
- 大小:397.21KB
matlab电子琴说明书.docx
《matlab电子琴说明书.docx》由会员分享,可在线阅读,更多相关《matlab电子琴说明书.docx(13页珍藏版)》请在冰豆网上搜索。
matlab电子琴说明书
基于MATLAB的数字
电子琴设计
日期:
2011-3-25
姓名:
王之海、郑俊超、张楠、杜坤
组号:
第一组
1.目标与范围
随着计算机软硬件技术的发展,越来越多现实物品的功能能够由计算机实现。
也就是我们经常所说的将硬件设备软件化,这样做的好处很多,比如说将成本降低,易于实现,修改容易并且可以进行仿真。
现在比较成熟的这类软件有很多,比如说LABVIEW。
基于这样的考虑我们进行了数字电子琴的模拟仿真实验。
这样一个实验的进行会为以后的学习工作中奠定一定的基础。
2.信号处理原理
数字信号发生器的功能就是将数字信号通过D/A转换变成所需要的模拟信号。
由于声卡本身具有D/A转换的功能,从而可以利用声卡在计算机了模拟信号发生器。
声卡的D/A转换机理是定时将声卡缓冲区中的内容转换成模拟信号并输出,所以软件所做的即是向声卡缓冲区中写数据。
以正弦信号为例,其模拟信号计算工时如下
为实现数字信号的发生,在程序中先根据公式计算出需要存放到缓冲区的数据,以数组的形式存放,然后将数据存放入声卡的缓冲区。
对于方波,y=sign(sin(2*pi*f*t+p))
对于其它波形,可以用类似方法实现。
软件的流程图如图所示
数字电子琴的流程图
3.系统的功能分析
软件的功能由数字信号发生器和数字电子琴两部分组成。
(1)数字信号发生器的功能
能够产生正弦波、方波、三角波等常见的波形的数字信号,并且提供了图形界面用于选择波形、频率、幅值与相位。
能够根据用户指定的波形和参数产生相应的数字信号,然后将数字信号写入声卡的缓冲区,最后由声卡播放出相应的声音。
(2)数字电子琴的功能
1)数字电子琴的功能是基于数字信号发生器的,通过条用数字信号发生器产生一系列指定的频率的声音,从而达到虚拟的电子琴的功能,界面中包含do/rai/mi…共16个琴键,鼠标按下时即时发声0.5秒;并可通过键盘敲击按键进行琴音播放。
2)可播放wav格式文件;
3)进行图形绘制;
4)进行背景色的更换;
5)添加(去除)网格、边框功能;
6)退出程序。
4.系统的界面设计
根据软件的功能需求,可设计如图所示的操作界面
电子琴的GUI界面
主要包括三个部分:
第一为波形控制区,可进行波形等各种参数设置;第二是按键控制区,用于对各种按键进行操作;第三是绘图命令区,用于手动输入命令进行绘图,可以编制多种复杂命令追溯原音频率。
第四是琴键区,包括从do到#do共16个音键;第五为背景颜色调整区,为下拉菜单,可对背景颜色进行选择。
5.系统的模块设计
模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户需求。
根据人类解决一般问题的经验,如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和,也就是说把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。
这就是模块化的根据。
对GUI的模块进行如图所示的模块划分:
数字电子琴的模块划分
5.1键盘模块设计
后台程序设计
对每个对象进行回调函数的设计,首先介绍do~#do按钮的设计,先进行回调函数设计,满足在按下相应按钮时输入对应的频率。
16键盘模块的设计是在GUI的界面上,把键设计出来后,激活后自动生成的,只需要按照D/A要求进行代码的转换。
例如对do键的程序设置为:
functiondo_Callback(hObject,eventdata,handles)
根据回到函数找到do键的主函数位置,然后由difsound函数
来进行编写,其格式为:
difsound(handles.option,264,handles.A,handles.phase);
其它键程序程序的编写都是基于这一原理进行编写的。
在这里不在一一介绍。
5.1控制模块设计
控制模块的设计为在大模块的基础上进行波形、频率、幅值、相位以及默认值、开始按钮的添加,其原理与键的原理是一样的,也是通过callback函数来进行函数的编写。
例如对波形的编写,可由callback来找到程序的位置,其程序为:
functionoption_Callback(hObject,eventdata,handles)
然后由get函数进行函数参数的调取为:
handles.option=get(hObject,'Value');
guidata(hObject,handles);
同样也是用这样的方法对频率、幅值、相位进行编写。
而对默认值的编写则是比较麻烦的,通过set函数来对默认值进行设置。
其程序为:
set(handles.option,'Value',1);
set(handles.f,'String',10);
set(handles.A,'String',20);
set(handles.phase,'String',0);
handles.option=1;
handles.f=10;
handles.phase=0;
handles.A=20;
guidata(hObject,handles);
5.2波形选择功能
本程序是通过difsound函数来驱动声卡进行发音的,然后再通过
switch…case…end语句来调取不同的波形,从而发出不同的声音。
其程序为:
functiondifsound(option,A,phase,f)
Fs=44100;
t=0:
1/Fs:
0.5;
switchoption
case1
y=A*sin(2*pi*f*t+phase);
case2
y=A*sign(sin(2*pi*f*t+phase));
case3
y=A*sawtooth(2*pi*f*t+phase,0.5);
case4
y=A*sawtooth(2*pi*f*t+phase);
case5
y=A*(2*rand(size(t))-1);
otherwise
errordlg('pleasechooseanotheroneorsettothedefaltfirst');
end
plot(t,y);
axistight;
wavplay(y,Fs);
5.3键盘关联功能的实现
除了界面键盘区可以用鼠标点击操作来实现按键功能,我们还设计了用电脑键盘按键来实现触发动作。
使用的对应按键从Z至L程序如下:
functionfigure1_KeyPressFcn(hObject,eventdata,handles)
switchget(hObject,'CurrentKey')
case'z'
do_Callback(hObject,eventdata,handles);
case's'
udo_Callback(hObject,eventdata,handles);
case'x'
rai_Callback(hObject,eventdata,handles);
case'd'
urai_Callback(hObject,eventdata,handles);
case'c'
mi_Callback(hObject,eventdata,handles);
case'f'
umi_Callback(hObject,eventdata,handles);
case'v'
fa_Callback(hObject,eventdata,handles);
case'g'
ufa_Callback(hObject,eventdata,handles);
case'b'
so_Callback(hObject,eventdata,handles);
case'h'
uso_Callback(hObject,eventdata,handles);
case'n'
la_Callback(hObject,eventdata,handles);
case'j'
ula_Callback(hObject,eventdata,handles);
case'm'
xi_Callback(hObject,eventdata,handles);
case'k'
uxi_Callback(hObject,eventdata,handles);
case','
updo_Callback(hObject,eventdata,handles);
case'l'
uudo_Callback(hObject,eventdata,handles);
otherwise
errordlg('zto,areC#,stolareD#');
end
5.4背景颜色菜单函数(以红色为例)
我们还设置了一个改变背景颜色的功能!
程序如下:
functionred_Callback(hObject,eventdata,handles)
set(gcbf,'Color','r');
set(gcbo,'Checked','on');
set(handles.yellow,'Checked','off');
set(handles.green,'Checked','off');
5.5绘图控制函数
functionpaint_Callback(hObject,eventdata,handles)
com=get(handles.hedit,'String');
ifisempty(com)
eval(com');
end
5.6playwav函数
播放wav格式的文件也是我们加入的一个特色文件!
程序如下:
functionplaywav_Callback(hObject,eventdata,handles)
[FileName,PathName]=uigetfile('*.wav','选择WAV文件');
[y,Fs,bits]=wavread(FileName);
sound(y,Fs,bits);
6.系统运行情况演示
键盘弹奏波形图
绘图--正弦波波形图示例
加上网格线
红色背景
绿色背景
播放wav格式功能
7.结论与展望
本项目由王之海、郑俊超、张楠、杜坤协作完成,其中由王之海、张楠来完成程序的研发和调试以及实验报告的书写,郑俊超、杜坤两人来完成电子琴GUI界面的设计与绘制。
在学习《工程信号分析》这门课的过程中,通过伍老师布置的MATLAB实践性作业,使我们在很短时间内学到了MATLAB基础性编程和GUI界面设计,以及对MATLAB强大功能的了解,对我们以后工作和学习打下了良好的铺垫。
项目完成后四人共同对本项目进行讨论交流,已达到互相学习,共同进步的效果,以实现本项目的真正目的。
但毕竟第一次接触到MATLAB,入门到提高还有很长的路要走,尤其是对于MATLAB的一些指令学的还不够到位,还需继续努力,继续学习。
通过对电子琴此程序的研究与设计,对我们以后论文的书写打下了坚实的基础,同时也使思想提前进入了对论文的思考,这些无疑是给我们提供了一个很好的平台。
8.不足之处
在整个过程中由于时间仓促,有些崇高的理想破灭了,如在按键放下后自动停止声音的播放,在播放wav格式音乐的时候还没有找到更快捷的图形显示算法,导致电脑运行缓慢故没有添加应用该程序,同时也未能实现播放高清视频与上网浏览并在线听音乐自动下载乐谱及歌词功能等。
但我们团队会为了这美好的理想而坚持走下去!
9.参考文献
[1]刘保柱,苏彦华,张宏林.MATLAB7.0从入门到精通(修订版)北京:
人民邮电出版社,2010.5(第2版)
[2]郑君里,应启衔,杨为理.信号与系统【M】.2版.北京:
高等教
育出版社,2000.
[3]张志涌等精通MATLAB【M】6.5版.北京:
北京航空航天大学出版社,2003,3
[4]董霖.MATLAB使用详解——基础、开发及工程应用北京:
电子工业出版社,2009.1
[5]AbellML,BraseltonJP.Maple.AcademicPress,1999
CA,1社0[6]ChapmanSJ.MATLABProgrammingforEnginerrs.
Brooks/Cole.CA,2002.
[7]蔡旭辉,刘卫国,蔡立燕.MATLAB基础与应用教程北京:
人民邮电出版社,2009.8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 电子琴 说明书