基于MATLAB的数字电子琴的设计与实现.docx
- 文档编号:6078566
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:8
- 大小:577.60KB
基于MATLAB的数字电子琴的设计与实现.docx
《基于MATLAB的数字电子琴的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的数字电子琴的设计与实现.docx(8页珍藏版)》请在冰点文库上搜索。
基于MATLAB的数字电子琴的设计与实现
基于MATLAB的数字电子琴的设计与实现
电子信息工程学院
《DSP技术及应用》课程设计报告
题目:
基于MATLAB的数字电子琴的设计与实现
专业班级:
通信工程专业
二〇一三年六月十三日
一、设计目的…………………………………………………………1
二、设计要求…………………………………………………………1
三、设计原理及方案…………………………………………………2
四、软件流程…………………………………………………………2
五、调试分析…………………………………………………………5
六、设计总结…………………………………………………………6
七、参考文献…………………………………………………………6
1、设计目的
1、熟悉matlab的软件环境,掌握信号处理的方法,能在matlab的环境下完成对信号的基本处理;
2、学会使用matlab的GUI控件编辑图形用户界面;
3、了解matlab中一些常见函数的使用及常见运算符,并能使用函数完成基本的信号处理;
2、设计要求
数字电子琴的功能是基于数字信号发生器的,经过条用数字信号发生器产生一系列指定的频率的声音,从而达到虚拟的电子琴的功能。
具体功能如下:
1、界面中包含do/rai/mi…共7个琴键,鼠标按下时即时发声0.5秒;并可经过键盘敲击按键进行琴音播放;
2、可播放wav格式文件;
3、进行图形绘制,可选择输出方波、正弦波等;
4、将该正弦信号函数使用plot函数将正弦函数图形界面展示出来;
5、根据所取的取样的时间长度不同时每个音阶发出的声音长度不同;
6、经过每个按键关联键盘,实现键盘弹琴功能;
7、经过一个edit窗口,关联按键,是GUI界面可显示所按下按键的音阶;
8、经过添加播放与暂停按钮,可对edit窗口中的音阶进行播放的暂停操作;
9、GUI右上角有帮助菜单,弹出messagebox提示用户;
10、不同音调的选择,可选择C调,升C调等不同音调;
11、经过加入不同程度的衰减和谐波分量实现不同音色的选择;
12、加载本地电脑中以存储好的音符文档进行演奏的功能;
13、当弹奏出错时,将刚弹奏出错的音符删除的功能;
14、能够实现黑键半音功能。
三、设计原理及方案
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函数,最终的以实现。
6、设计总结
经过本次实验,掌握了GUI界面的搭建,对matlab中常见的函数有了深刻的认识。
在学习中发现matlab是个很强大的软件,可惜自己对它的认识太少,以后还得自己学习。
同时,这次制作数字电子琴,经过晚上查找资料,也对一些音律方面的知识有很多的认识,在实验过程中,存在着很多问题,在韩萍老师及何炜琨老师的悉心指导下,最终一个一个解决了,经过这次试验,自己获益匪浅。
七、参考文献
[1]郑君里.信号与系统(第二版),高等教育出版社,
[2]王世一.数字信号处理(修订版),北京理工大学出版社,
[3]李益华.MATLAB辅助现代工程数字信号处理(第2版).西安:
西安电子科技大学出版社,
[4]杨洁芳.基于MATLAB与声卡的低频信号发生器的设计与实现.电脑学习,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 数字 电子琴 设计 实现