基于MATLAB软件的音乐合成毕业答辩论文.docx
《基于MATLAB软件的音乐合成毕业答辩论文.docx》由会员分享,可在线阅读,更多相关《基于MATLAB软件的音乐合成毕业答辩论文.docx(23页珍藏版)》请在冰豆网上搜索。
![基于MATLAB软件的音乐合成毕业答辩论文.docx](https://file1.bdocx.com/fileroot1/2023-1/30/b1fd5101-2572-435f-b24f-f8ad1469f47d/b1fd5101-2572-435f-b24f-f8ad1469f47d1.gif)
基于MATLAB软件的音乐合成毕业答辩论文
基于MATLAB软件的音乐合成毕业答辩论文
河北经贸大学毕业论文
基于MATLAB软件的音乐合成
专业名称:
电子信息工程
班级:
201102
学生姓名:
王雪
指导老师:
章瑞平
完成时间:
2015年5月
摘要
本设计利用MATLAB软件,通过MATLABGUI构建一个具有图形用户界面的音乐合成系统。
该系统能实现音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升降度处理、音乐的时域和频域波形图显示及利用傅里叶级数原理合成音乐的操作。
本系统应用模块化的思路进行设计,将系统分为四个模块,分别为简单合成及处理音乐的模块、利用傅里叶变换分析音乐频谱的模块、基于傅里叶级数合成音乐的模块和音乐字幕动态显示的模块。
本论文阐述了整个系统详细的设计过程,而针对每个模块的设计都有详细的理论基础为依托,包括原理及设计程序,并且有仿真效果的演示。
该软件系统作为教学辅助软件可以为语音信号处理课程的教学提供一定的帮助,可以让学生们更好地深入理解信号与系统等主干课程的内容,充分发挥自身的创新能力与实践能力。
该系统可以通过选取不同的算法,对音乐分别进行处理,基本做到抑制噪声,提高音乐质量,有利于更高层次的处理与应用。
此外,从整体效果上看,该系统的用户应用界面友好、便于操作,通过菜单、控件的使用可以方便的选取不同的方法,设置不同的参数以便于用户操作使用。
系统通过对各种处理效果的演示,也可以让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后的对比中让用户更容易接受与其对应的方法及特点。
关键词音乐合成;MTALAB;GUI;傅里叶变换
Abstract
ThedesigninthispaperusestheMATLABsoftwaretoconstructamusicsynthesissystemwithagraphicaluserinterfacebyMATLABGUI.Thesystemcanachievesimplemusicsynthesis,theprocessingofreducingmusicnoise,thetreatmentofmusicwithharmonic,theprocessingofraisingandloweroctave,displayingwaveformintimedomainandfrequencydomainandsynthesisofmusicbasedonFourierseries.Thissystemtakestheideaofmodulardesign,dividedintofourmodules,respectivelyincludingthemoduleofmusicofsimplesynthesisandprocessing,themoduleofmusicspectrumanalysisthroughusingtheFouriertransform,themoduleofmusicsynthesisbasedonFourierseries,themoduleofdisplayingmusicsubtitledynamically.Thispaper,includingtheprincipleandprogramdesignandsimulationresultsdemonstrate,describesthedesignprocessofthesystemindetail.Eachmodulehasadetailedtheoreticalbasisforsupport.Asateachingaidsoftwarecanprovidesomehelpforthespeechsignalprocessingcourseinteaching,whichcanhelpstudentsunderstandthesignalandsystemcourseandgivefullplaytostudents’innovationabilityandpracticeability.Throughselectingdifferentalgorithms,thesystemcandisposemusicrespectively,suppressnoisebasically,improvethequalityofmusicandavailtodealwiththehigherlevel.Inaddition,thegraphicuserinterfaceofthesystemisfriendlyandeasytooperate.Selectdifferentmethodsandsetdifferentparametersforusersbyusingthemenu,controls.Throughavarietyofdemonstrationsofeffects,thesystemalsomakesusersunderstandseveralwaysofdealingwithmusicmoreintuitivelyandincomparewithbeforeandafterthealltreatments,wecanacceptthecorrespondingmethodsandcharacteristicsmoreeasily.
KeywordsMusicsynthesis;MTALAB;GUI;Fouriertransform
基于MATLAB软件的音乐合成
1绪论
1.1研究背景及意义
如今,信息化、数字化程度越来越高,语音信号的处理技术作为基于数字信号处理技术与语音学知识对语音信号进行处理的新兴技术被越来越多的高科技产业广泛应用,这项技术成为信息科学工程与研究领域的核心技术之一。
MATLAB在信号处理与通信领域应用广泛,是一款数值计算和编程语言结合的优秀计算机软件。
音乐信号合成作为语音信号处理的一部分,属于MATLAB软件重要应用领域之一。
MATLAB音乐合成系统的设计针对于许多其他的音乐合成处理软件不易学习、操作不便等问题,利用MATLAB语言编程以及GUI界面设计来实现音乐信号的简单合成以及各种加工处理,程序更加易懂,操作更加简便,在各类教学工作中具有很大的实际应用意义。
由于音乐信号可以看成是一系列频率与振幅不同的正弦波叠加并加以不同包络形成的,所以,可以基于这个特点利用MATLAB软件分析处理不同音频信号来进行简单的音乐合成。
该软件系统作为教学辅助软件可以为语音信号处理课程的教学提供一定的帮助,可以让学生们更好地深入理解信号与系统等主干课程的内容,充分发挥自身的创新能力与实践能力。
如今在各高校,MATLAB作为语音信号处理的学习工具已经成为学生们必须学习与掌握的软件。
1.2研究的主要内容
本设计运用MATLAB软件要实现的功能:
第一是要利用相关的语音处理函数进行简单的音乐合成,对音乐进行降噪、加谐波以及升降度处理;第二是用傅里叶变换分析经相应处理后的各音乐频谱;第三是运用傅里叶级数的原理来再次合成音乐;第四是实现音乐字幕的动态显示。
整个过程利用MATLABGUI图形应用界面进行显示,完成基本操作,界面友好,能实现良好的人机交互。
在设计中解决的主要问题:
简单音乐的合成由于相位不连续产生高频分量而使其质量不佳的问题可通过包络修正,消除噪音。
音乐的基波所对应频率的计算。
必须充分了解音乐的节拍,即每个音调的持续时间,减少失真。
在设计GUI界面时的布局、各种参数设置以及各个模块演示编程的问题。
本设计使用的是MATLAB2013a软件,设计所实现的功能都在GUI图形应用界面体现出来,便于研究与操作。
通过本设计让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后的对比中更容易接受与其对应的方法及特点,学会并掌握MATLAB信号处理的编程以及MATLAB下GUI的设计。
2MATLAB软件的简介
MATLAB(matrix&laboratory)矩阵实验室,作为一款拥有算法开发、数据分析及数值计算、创建用户界面等强大功能的仿真软件,被美国MathWorks公司发行,将众多功能合成在一个便于操作的视窗交互化环境中。
在科学研究、工程计算、信号处理、图像处理等方面得到广泛应用。
而在本设计中用到的是MATLAB2013a时频域分析、音乐合成及GUI图形应用界面等信号处理方面的功能。
2.1MATLAB的发展史
1980年,身为美国NewMexico大学计算机系系主任的CleveMoler为了让学生方便地调用EISPACK和LINPACK,编写了它们的接口程序,命名为MATLAB。
在此之后,国内外许多大学将MATLAB作为教学辅助软件广泛使用。
CleveMoler和JohnLittle在1984年创建了MathWorks并推出了MATLABDOS版,即第一版,其核心是用C语言编写。
自此之后,MATLAB不断发展,功能愈加强大。
MATLAB5.x版本于20世纪90年代末期推出,可以处理更多的数据结构。
2000年,MATLAB6.0被发行,其操作界面拥有了程序、历史信息及变量管理三个窗口。
并且替换为FFTW系统,使得计算速度更佳。
2001年,MATLAB6.1及Simulink4.0问世和2002年,公司推出MATLAB6.5,其功能更加强大。
2004年发行了MATLAB7.0版本,在编程环境、数据可视化、计算和文件I/O等方面的功能进行了改善。
随后几年,公司陆续推出了MATLAB7.1~7.14版本,不断优化性能。
近几年公司推出了MATLAB2012b(8.0版)及MATLAB2013a版本,有了很大改变,最明显的是其桌面,在主窗口中,工具条取代了菜单和工具栏。
重新设计了帮助文档,在搜索、浏览及筛选功能上有进一步的提高。
到目前为止,还有MATLAB2014a和MATLAB2014b版本。
在本设计中用到的是MATLAB2013a版本,此版本较之前版本添加了许多新函数,功能也更加强大,使用更加方便快捷。
2.2MATLAB的系统构成
MATLAB软件可以说是由以下五大部分组成,分别是:
软件的开发环境、数学函数库、软件的编程语言、图形处理系统以及该软件的应用接口(API)。
MATLAB开发环境是一个方便用户使用的集成工作空间,拥有M文件的编程与调试环境,许可用户进行数据的输入与输出。
MATLAB软件的数学函数库拥有全面的计算算法,可以说从加减法最基本的算法到傅里叶变换等复杂算法都涵括在内。
所以说,MATLAB能够解决很多复杂的数据计算与工程设计仿真运算。
MATLAB语言的语法特征与C++语言非常相似,是在矩阵与数组的基础上进行设计的语言。
操作者能够在命令窗口输入命令语句后就可执行该命令,也能够先编写好程序,保存为.M文件后再执行程序。
MATLAB的图形处理系统的功能应用主要体现在GUI图形用户应用界面,能够使向量与矩阵完成图形化显示,满足用户的特殊要求。
MATLAB软件应用程序接口主要完成的功能是能让MATLAB语言与其他编程语言进行交互,例如在MATLAB中调用C语言程序等。
3MATLAB音乐合成的原理
在本设计中,通过MATLAB软件对音乐信号频率与时长的分析与组合来完成音乐的简单合成。
所以在设计过程中,根据音调用频率来体现,节拍用时长来体现的原理,用MATLAB软件进行编程来存储音乐的频率与时长,通过将正弦波形的不同叠加与包络设置来仿真实现音乐的音调与节奏的变化。
3.1所涉及的乐理知识简述
要想实现音乐的合成,就要了解合成音乐所需要的相关数据,也就是音乐的三个特性:
音调、响度、音色。
音乐的音调就是音的高低,需要考虑影响音调的主要因素即声波的频率。
音乐的响度是音的强弱,需要考虑影响响度的主要因素即声波的振动幅度。
而音乐音色的变化是由音乐波形中谐波的作用产生的。
3.1.1音调与唱名
在日常生活中,读音乐曲谱时发出的1(do)、2(re)、3(mi)、4(fa)......这些就称作为唱名。
这些唱名分别代表着相应的基波频率。
但是只有当确定了音乐的音调之后才能确切的知道各个唱名所真正代表的基波频率值。
例如乐谱为1=C,代表着音调为C调则“1(do)”的基波频率是261.6Hz,若乐谱为1=E则“1(do)”频率是239.6Hz,乐谱为1=G则“1(do)”的频率是392.1Hz,“3(mi)”的频率是493.9Hz。
3.1.2音色与谐波
音色的变化是由音乐波形中谐波的作用产生的。
在音乐的专业中所指的“泛音”指的就是谐波,在得知音调之后,只能确定音乐信号的基波频率值,但是谐波频率无法确定。
不同的乐器会发出不同的音色,这是由于不同的谐波成分和频谱结构导致的。
并且不同的乐器所发出的的音乐包络波形是不同的,为了便于用程序来表示波形包络,通常把音乐的复杂包络函数近似直线化,所以音乐波形的包络通常都是折线型。
3.1.3十二平均律
十二平均律,在音乐领域中作为一种音乐定律的方法,指将音乐的八度按照频率等比例地分成十二份。
由于“五度相生律”和“十二平均律”发音非常相似而且十二平均律能够解决转调问题,所以,它被广泛应用在键盘乐器与交响乐队中。
根据国际标准音的规定,相邻的半音之间的频率之比定为2^(1/12)≈1.059,作为最常见的应用十二平均律而制成的乐器就是钢琴,钢琴的琴键a1的频率规定为440Hz,那么就可以根据比值得出钢琴其他的琴键音对应的频率。
例如与a1左边相邻#g1频率是440/1.059=415.03Hz,同理,与a1右边相邻的半音#a1的频率是466.16Hz,也可以算出不同音调下“1(do)”的对应的基波频率,即C:
261.63Hz,F:
349.23Hz和G:
392Hz等。
3.2傅里叶变换与频谱分析
合成一段简单的音乐,需要综合考虑音乐的三要素,也就是必须知道该段音乐的基波与谐波频率成分以及包络的形状特征。
为了便于分析上述特征,就要进行信号的频谱分析,也就是利用傅里叶变化,得出该音乐信号的频谱结构,来进行其频谱特征的提取。
有限长序列的离散傅氏变换(DFT),在信号处理的理论上有重要意义,它将频域也离散化,是现代信号频谱分析主要方法。
N点DFT实质上是其频谱的离散频域采样,对频率具有选择性(ωk=2πk/N),在这些点上反映了信号的频谱。
但DFT计算量大,处理复杂,所以引用了快速傅里叶变化(FFT)算法最简单、编程最容易的是基2FFT,还有基4FFT、基8FFT等快速算法。
根据采样定律,FFT变换相当于对有限长序列进行频域采样,而不丢失任何信息。
所以只要时域序列的长度足够长,采样的点数足够多,频域采样也可以很好地反映信号的频谱趋势,所以在设计中可以用FFT进行语音信号的频谱分析。
4MATLAB音乐合成系统的总体设计
4.1系统的总体设计
MATLAB音乐合成系统,能实现音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升八度处理、音乐的降八度处理、音乐时域与频域波形显示、利用傅里叶级数合成音乐以及音乐字幕的动态显示的操作。
该系统的全部功能都通过GUI图形用户界面显示出来,并且使用模块化的设计方法,将系统分为四个模块,如图4-1所示。
图4-1系统总体设计结构图
4.2GUI界面的设计
GUIDE(GraphicUserInterfaceDesignEnvironment)是专门设计图形用户界面GUI的集成开发环境。
GUI界面一般包括窗口、菜单、按钮和文本框等各种图形对象。
在设计GUI时,可以通过鼠标操作就能产生各种GUI控件,这样让用户对图形界面的生成与管理变得直接、方便,能让用户定制用户与MATLAB2013a的交互方式。
可以形成一种除命令窗口之外的与MATLAB2013a的交互方式。
4.2.1启动GUIDE
在MATLAB2013a中Command窗口里面输入guide按回车键,或者从菜单里面均可进入GUIDE。
MATLAB2013a为GUI图形应用界面的设计准备了以下四种模板,如图4-2所示。
图4-2GUI设计模板选择对话框
在GUI设计模板中选中第一个模板,新建并且保存为yinyuehecheng后,MATLAB2013a会自动产生相应的.fig文件和.m文件。
4.2.2GUIDE设计环境
在进入GUI界面之后,下一步就是进行界面设计编辑。
在GUIDE设计环境中用到的事Layout编辑器,操作者可以通过鼠标移动模板左边的控件到中间布局区域,如按钮、坐标轴、文本框等。
接下来,通过属性编辑器和对齐编辑器对各控件设置相关属性和进行界面布置,以完善界面功能。
本设计总体布局如下图4-3所示。
图4-3GUI设计面板布局
4.2.3GUI界面的功能设计
设计好GUI界面的整体布局之后,接下来就该利用程序代码的编写进行各个按钮功能的设置。
找到上述的GUI的M文件yinyuehecheng.m,打开之后,会看到里面已经存在许多自动生成的程序代码,只需要找到各个按钮及文本编辑框对应的函数。
在对应的函数名下输入要实现相应功能所需要的程序。
例如在yinyuehecheng.m文件中找到函数:
functionbutton1_Callback在这个函数名称下面写入具有简单音乐合成功能的程序。
globalflagglobalwestfsftimef_flag;
flag=1;
f_flag=0;
fs=8000;%该段音乐抽样频率
F=[493.88493.88493.88587.33493.88440392329.63392440493.88];
%各个唱名对应的频率
time=fs*[1/4,1/4,1/4,1/4,3/4,1/4,1/4,1/4,1/4,1/4,1];%各个唱名的持续时间值
N=length(time);%这段音乐的总抽样点数
west=zeros(1,N);%用west向量来储存抽样点
n=1;
fora=1:
N%利用循环产生抽样数据,a表示乐音编号
t=1/fs:
1/fs:
time(a)/fs;%产生第a个乐音的抽样点
west(n:
n+time(a)-1)=sin(2*pi*f(a)*t);%抽样点对应的幅值
n=n+time(a);
End
然后定位相应的简单音乐合成按钮的坐标程序。
t1=linspace(0,length(west)/fs,length(west));
set(handles.axes1,'HandleVisibility','ON');%开始使用坐标,便于操作
axes(handles.axes1);%使用图像,操作在坐标1
plot(t1,west');axis([-0.24.2-1.21.2]);
xlabel('t/s');ylabel('幅度');
这样相应设置好各个功能按钮所对应的程序,就算基本完成了GUI界面的设置。
5MATLAB音乐合成系统的设计与实现
5.1简单合成及处理音乐模块的设计与实现
通过给定的音乐简谱和掌握的乐理知识与频谱分析来进行简单音乐的合成。
并且在此基础上对音乐进行相应的处理,来比较经不同处理后的音乐播放效果。
5.1.1合成《社会主义好》
依据音乐《社会主义好》一小段的音乐简谱和国际规定的十二平均律的计算方法对应地得到此小段音乐中各个唱名的频率,利用MATLAB软件来编程仿真实现音乐的简单合成。
音乐简谱如图5-1所示。
图5-1音乐简谱
由图5-1可知《社会主义好》的曲调定为G,也就是说1=G,那么可以知道其对应的频率为329.1Hz,其中6是低音的意思,即对应G调“6”的频率659.26Hz,
取其频率的一半,即659.26/2=329.63Hz。
根据“十二平均律”计算得到各个唱名对应的频率如下表5-1。
表5-1唱名对应的频率表
唱名
3
3
3
5
3
2
1
6
1
2
3
频率
493.88
493.88
493.88
587.33
493.88
440
392
329.63
392
440
493.88
得到该小段音乐各个唱名对应的频率之后,还有很重要的一个数据需要得到,那就是根据乐理知识推算出各个唱名对应的持续时间。
由图5-1中1=G2/4可以知道各唱名的持续时间如下表5-2所示。
表5-2唱名持续时间表
唱名
3
3
3
5
3
2
1
6
1
2
3
时间
0.25
0.25
0.25
0.25
0.75
0.25
0.25
0.25
0.25
0.25
1
依据上述得到的数据可以编写如下程序。
functionbutton1_Callback(hObject,eventdata,handles)%简单音乐的合成
globalflagglobalwestfsftimef_flag;
flag=1;f_flag=0;
fs=8000;%该段音乐抽样的频率
f=[493.88493.88493.88587.33493.88440392329.63392440493.88];
%各个唱名所对应的频率值
time=fs*[1/4,1/4,1/4,1/4,3/4,1/4,1/4,1/4,1/4,1/4,1];%各个唱名的持续时间
N=length(time);%这段音乐的总抽样点数
west=zeros(1,N);%用west向量来储存抽样点
n=1;
fora=1:
N%利用循环产生抽样数据,a表示乐音编号
t=1/fs:
1/fs:
time(a)/fs;%产生第a个乐音的抽样点
west(n:
n+time(a)-1)=sin(2*pi*f(a)*t);%抽样点对应的幅值
n=n+time(a);
end
5.1.2加包络,除噪音
在MATLAB中,播放出了《社会主义好》的第一小节,但可听出声音不是很好,只能听出具有《社会主义好》的调子而已。
会听到有“啪”的杂声,声音比较刺耳,下面通过加上外形相似的包络来消噪音,使不同音的连接处的响度为零即可。
编写如下程序。
functionbutton4_Callback(hObject,eventdata,handles)%音乐的降噪
globalflag
globalwestfsftimef_flag;
ifflag==1f_flag=0;
N=length(time);%这段音乐的总抽样点数
west=zeros(1,N);%用west向量来储存抽样点
n=1;
fora=1:
N%利用循环产生抽样数据,a表示乐音编号