基于MATLAB的数字电子琴的设计与实现.docx
《基于MATLAB的数字电子琴的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的数字电子琴的设计与实现.docx(8页珍藏版)》请在冰豆网上搜索。
基于MATLAB的数字电子琴的设计与实现
基于MATLAB的数字电子琴的设计与实现
电子信息工程学院
《DSP技术及应用》课程设计报告
题目:
基于MATLAB的数字电子琴的设计与实现
专业班级:
通信工程专业
二〇一三年六月十三日
一、设计目的…………………………………………………………1
二、设计要求…………………………………………………………1
三、设计原理及方案…………………………………………………2
四、软件流程…………………………………………………………2
五、调试分析…………………………………………………………5
六、设计总结…………………………………………………………6
七、参考文献…………………………………………………………6
1、
2、
3、加载本地电脑中以存储好的音符文档进行演奏的功能;
4、当弹奏出错时,将刚弹奏出错的音符删除的功能;
5、可以实现黑键半音功能。
三、设计原理及方案
1、原理图
图1
2、原理图说明
上图为数字信号产生器的原理图,由于不同声音的频率不同,因此,用MATLAB产生不同的频率的信号,然后加载到声卡,即可产生不同的声音
(1)初始化:
点击其中一个.M文件。
进入欢迎界面,欢迎界面,点击欢迎界面中进入程序按钮,进入主程序。
(2)检测并接收用户输入:
通过点击GUI界面中预设值好的音阶按钮,对应让MATLAB中产生不同频率的正弦单频信号。
(3)存用户输入的音阶:
用户输入音阶后,在GUI窗口中会有对应的音符显示,点击保存,即可将这些字符保存为一个,txt文件。
(4)加载音阶:
选择打开加载音符,点击暂停播放,即可将之前保存好的音符进行播放。
(5)产生数字信号:
对应不同的按键产生不同的正弦数字信号。
(6)波形线束:
通过不同的信号,画出不同的信号的时域与频域图。
(7)驱动声卡:
发出声音。
四、软件流程
Matlab是一个具有数值分析、科学数据可视化以及非线性动态系统的建模和仿真等功能的工程实用软件。
本文介绍了一种使用GUI工具箱,用Matlab实现虚拟数字信号发生器的设计。
并在此基础上,利用声卡,实现了简易的数字电子琴。
具体软件流程如下:
(1)搭建GUI界面
图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
Matlab环境下的图形用户界面(GUI)是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化。
做好的GUI界面分别如图2、图3所示:
图2
图3
(2)编写.M文件
搭建好GUI界面后,点击“保存”按钮,系统将自动生成M文件与Fig文件各一个,并且M文件内部已经按照GUI界面中组件的类别,分别自动生成了相应的模块调用函数。
根据需需要,我们对生成的各个函数进行补充,完成函数功能的实现及各个函数的调用关系。
本次实验主要对控件的回调函数(callback)下写入相应的程序,该程序相当于一个将前后面板连接起来的纽带,在数字信号生成中作用很大。
主要源程序文件如下:
信号产生部分:
globaln
globalm;
globalyc;
b=[-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
c=b(t);
f=440*2^((c+m)/12);%C调D调改变m
fs=10*f
x=0:
(1/fs):
yc
switchyc
case0.25
d=-4
case0.5
d=-2
case1
d=-2
switchn
case3
y=exp(d*x).*sin(2*pi*f*x)+0.2*exp(d*x).*sin(2*pi*f*3*x)+0.3*exp(d*x).*sin(2*pi*f*3*x)+0.4*exp(d*x).*sin(2*pi*f*4*x)+0.5*exp(d*x).*sin(2*pi*f*5*x)
case1
y=sin(2*pi*f*x)
case2
y=exp(d*x).*sin(2*pi*f*x)
end
绘图部分:
subplot(2,1,1)
plot(x,y);
axis([0,yc,-2,2])
xlabel('时间/s')
ylabel('幅度')
gridon;
subplot(2,1,2)
Y=abs(fft(y))
plot(Y)
xlabel('频率/Hz')
ylabel('幅度')
gridon
%axis([0,yc,-2,2]);
wavplay(y,fs,'async');
五、调试分析
在软件设计过程中遇到了许多困难,以下选择几点主要的进行分析说明:
1、校徽的显示问题:
由于本作品想添加校徽,创建了一个axes坐标,但是始终在该坐标上无法显示我们预设好的校徽图片。
解决方案:
在图片显示子函数imshow后加上要显示的坐标,即可将图片显示在于设置的坐标上。
2、音阶的保存:
将输入的音符进行保存为txt文本文件时,保存时是按字符串格式保存的,再次加载时,却是按照字符进行加载,到时要回删一个音阶时,将之前所有以保存的音阶会全部删除。
解决方案:
读数据时,使用大括号,使数据为一个cell型数组。
3、GUI背景设置问题:
为了美化界面,我们想到使用背景图片,但是由于MATLAB中没有该加载背景图片的功能,因此始终无法加载图片
解决方案:
经过上网搜寻方案,想到在GUI界面中建一个坐标覆盖整个界面,然后图片加载到该坐标中,使bringback功能将该图片作为背景。
4、在EDIT窗口中显示字符问题:
开始设想在一个EDIT窗口中实时显示按下的音阶,但是始终无法实现该功能
解决方法:
使用MATLAB中的set与get函数,最终的以实现。
六、设计总结
通过本次实验,掌握了GUI界面的搭建,对matlab中常见的函数有了深刻的认识。
在学习中发现matlab是个很强大的软件,可惜自己对它的认识太少,以后还得自己学习。
同时,这次制作数字电子琴,通过晚上查找资料,也对一些音律方面的知识有很多的认识,在实验过程中,存在着很多问题,在韩萍老师及何炜琨老师的悉心指导下,最终一个一个解决了,通过这次试验,自己获益匪浅。
七、参考文献
[1]郑君里.信号与系统(第二版),高等教育出版社,2005
[2]王世一.数字信号处理(修订版),北京理工大学出版社,2005
[3]李益华.MATLAB辅助现代工程数字信号处理(第2版).西安:
西安电子科技大学出版社,2010
[4]杨洁芳.基于MATLAB与声卡的低频信号发生器的设计与实现.电脑学习,2006