《毕业设计-基于matlab软件的音乐合成.doc》由会员分享,可在线阅读,更多相关《毕业设计-基于matlab软件的音乐合成.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、河北经贸大学毕业论文河北经贸大学毕业论文基于MATLAB软件的音乐合成专业名称: 电子信息工程 班 级: 学生姓名: 指导老师: 完成时间: 2015年5月 摘 要 本设计利用MATLAB软件,通过MATLAB GUI构建一个具有图形用户界面的音乐合成系统。该系统能实现音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升降度处理、音乐的时域和频域波形图显示及利用傅里叶级数原理合成音乐的操作。本系统应用模块化的思路进行设计,将系统分为四个模块,分别为简单合成及处理音乐的模块、利用傅里叶变换分析音乐频谱的模块、基于傅里叶级数合成音乐的模块和音乐字幕动态显示的模块。本论文阐述了整个系统详细的设
2、计过程,而针对每个模块的设计都有详细的理论基础为依托,包括原理及设计程序,并且有仿真效果的演示。该软件系统作为教学辅助软件可以为语音信号处理课程的教学提供一定的帮助,可以让学生们更好地深入理解信号与系统等主干课程的内容,充分发挥自身的创新能力与实践能力。该系统可以通过选取不同的算法,对音乐分别进行处理,基本做到抑制噪声,提高音乐质量,有利于更高层次的处理与应用。此外,从整体效果上看,该系统的用户应用界面友好、便于操作,通过菜单、控件的使用可以方便的选取不同的方法,设置不同的参数以便于用户操作使用。系统通过对各种处理效果的演示,也可以让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后
3、的对比中让用户更容易接受与其对应的方法及特点。关键词 音乐合成;MTALAB;GUI;傅里叶变换Abstract The design in this paper uses the MATLAB software to construct a music synthesis system with a graphical user interface by MATLAB GUI.The system can achieve simple music synthesis,the processing of reducing music noise,the treatment of music w
4、ith harmonic,the processing of raising and lower octave,displaying waveform in time domain and frequency domain and synthesis of music based on Fourier series.This system takes the idea of modular design,divided into four modules, respectively including the module of music of simple synthesis and pr
5、ocessing,the module of music spectrum analysis through using the Fourier transform,the module of music synthesis based on Fourier series,the module of displaying music subtitle dynamically.This paper,including the principle and program design and simulation results demonstrate, describes the design
6、process of the system in detail.Each module has a detailed theoretical basis for support.As a teaching aid software can provide some help for the speech signal processing course in teaching,which can help students understand the signal and system course and give full play to students innovation abil
7、ity and practice ability.Through selecting different algorithms,the system can dispose music respectively, suppress noise basically,improve the quality of music and avail to deal with the higher level.In addition,the graphic user interface of the system is friendly and easy to operate. Select differ
8、ent methods and set different parameters for users by using the menu,controls.Through a variety of demonstrations of effects,the system also makes users understand several ways of dealing with music more intuitively and in compare with before and after the all treatments,we can accept the correspond
9、ing methods and characteristics more easily.Keywords Music synthesis; MTALAB;GUI;Fourier transformII目 录1 绪论11.1 研究背景及意义11.2 研究的主要内容12 MATLAB软件的简介32.1 MATLAB的发展史32.2 MATLAB的系统构成43 MATLAB音乐合成的原理53.1 所涉及的乐理知识简述53.1.1 音调与唱名53.1.2 音色与谐波53.1.3 十二平均律53.2 傅里叶变换与频谱分析64 MATLAB音乐合成系统的总体设计74.1 系统的总体设计74.2 GUI界面
10、的设计74.2.1 启动GUIDE84.2.2 GUIDE设计环境84.2.3 GUI界面的功能设计95 MATLAB音乐合成系统的设计与实现115.1 简单合成及处理音乐模块的设计与实现115.1.1 合成社会主义好115.1.2 加包络,除噪音125.1.3 音乐升降度处理135.1.4 音乐加谐波处理155.2 用傅里叶变换分析音乐频谱模块的设计与实现165.3 基于傅里叶级数合成的音乐模块的设计与实现205.4 音乐小星星字幕动态显示模块的设计与实现216 系统的调试与运行246.1 音乐的播放、暂停的调试与运行246.2 傅里叶变换分析音乐的调试与运行25总 结26参考文献27 II
11、28基于MATLAB软件的音乐合成1 绪论1.1 研究背景及意义 如今,信息化、数字化程度越来越高,语音信号的处理技术作为基于数字信号处理技术与语音学知识对语音信号进行处理的新兴技术被越来越多的高科技产业广泛应用,这项技术成为信息科学工程与研究领域的核心技术之一。MATLAB在信号处理与通信领域应用广泛,是一款数值计算和编程语言结合的优秀计算机软件。音乐信号合成作为语音信号处理的一部分,属于MATLAB软件重要应用领域之一。MATLAB音乐合成系统的设计针对于许多其他的音乐合成处理软件不易学习、操作不便等问题,利用MATLAB语言编程以及GUI界面设计来实现音乐信号的简单合成以及各种加工处理,
12、程序更加易懂,操作更加简便,在各类教学工作中具有很大的实际应用意义。由于音乐信号可以看成是一系列频率与振幅不同的正弦波叠加并加以不同包络形成的,所以,可以基于这个特点利用MATLAB软件分析处理不同音频信号来进行简单的音乐合成。该软件系统作为教学辅助软件可以为语音信号处理课程的教学提供一定的帮助,可以让学生们更好地深入理解信号与系统等主干课程的内容,充分发挥自身的创新能力与实践能力。如今在各高校,MATLAB作为语音信号处理的学习工具已经成为学生们必须学习与掌握的软件。1.2 研究的主要内容 本设计运用MATLAB软件要实现的功能:第一是要利用相关的语音处理函数进行简单的音乐合成,对音乐进行降
13、噪、加谐波以及升降度处理;第二是用傅里叶变换分析经相应处理后的各音乐频谱;第三是运用傅里叶级数的原理来再次合成音乐;第四是实现音乐字幕的动态显示。整个过程利用MATLAB GUI图形应用界面进行显示,完成基本操作,界面友好,能实现良好的人机交互。 在设计中解决的主要问题: 简单音乐的合成由于相位不连续产生高频分量而使其质量不佳的问题可通过包络修正,消除噪音。 音乐的基波所对应频率的计算。必须充分了解音乐的节拍,即每个音调的持续时间,减少失真。 在设计GUI界面时的布局、各种参数设置以及各个模块演示编程的问题。 本设计使用的是MATLAB2013a软件,设计所实现的功能都在GUI图形应用界面体现
14、出来,便于研究与操作。通过本设计让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后的对比中更容易接受与其对应的方法及特点,学会并掌握 MATLAB信号处理的编程以及MATLAB下GUI的设计。2 MATLAB软件的简介 MATLAB(matrix&laboratory)矩阵实验室,作为一款拥有算法开发、数据分析及数值计算、创建用户界面等强大功能的仿真软件,被美国Math Works公司发行,将众多功能合成在一个便于操作的视窗交互化环境中。在科学研究、工程计算、信号处理、图像处理等方面得到广泛应用。而在本设计中用到的是MATLAB2013a时频域分析、音乐合成及GUI图形应用界面等信
15、号处理方面的功能。2.1 MATLAB的发展史 1980年,身为美国New Mexico大学计算机系系主任的Cleve Moler为了让学生方便地调用EISPACK和LINPACK,编写了它们的接口程序,命名为MATLAB。在此之后,国内外许多大学将MATLAB作为教学辅助软件广泛使用。Cleve Moler和John Little在1984年创建了Math Works并推出了MATLAB DOS版,即第一版,其核心是用C语言编写。自此之后,MATLAB不断发展,功能愈加强大。MATLAB5.x版本于20世纪90年代末期推出,可以处理更多的数据结构。2000年,MATLAB6.0被发行,其操作
16、界面拥有了程序、历史信息及变量管理三个窗口。并且替换为FFTW系统,使得计算速度更佳。2001年,MATLAB6.1及Simulink4.0问世和2002年,公司推出MATLAB6.5,其功能更加强大。2004年发行了MATLAB7.0版本,在编程环境、数据可视化、计算和文件I/O等方面的功能进行了改善。随后几年,公司陆续推出了MATLAB7.17.14版本,不断优化性能。近几年公司推出了MATLAB2012b(8.0版)及MATLAB2013a版本,有了很大改变,最明显的是其桌面,在主窗口中,工具条取代了菜单和工具栏。重新设计了帮助文档,在搜索、浏览及筛选功能上有进一步的提高。到目前为止,还
17、有MATLAB2014a和MATLAB2014b版本。在本设计中用到的是MATLAB2013a版本,此版本较之前版本添加了许多新函数,功能也更加强大,使用更加方便快捷。2.2 MATLAB的系统构成 MATLAB软件可以说是由以下五大部分组成,分别是:软件的开发环境、数学函数库、软件的编程语言、图形处理系统以及该软件的应用接口(API)。MATLAB开发环境是一个方便用户使用的集成工作空间,拥有M文件的编程与调试环境,许可用户进行数据的输入与输出。MATLAB软件的数学函数库拥有全面的计算算法,可以说从加减法最基本的算法到傅里叶变换等复杂算法都涵括在内。所以说,MATLAB能够解决很多复杂的数
18、据计算与工程设计仿真运算。MATLAB语言的语法特征与C+语言非常相似,是在矩阵与数组的基础上进行设计的语言。操作者能够在命令窗口输入命令语句后就可执行该命令,也能够先编写好程序,保存为.M文件后再执行程序。MATLAB的图形处理系统的功能应用主要体现在GUI图形用户应用界面,能够使向量与矩阵完成图形化显示,满足用户的特殊要求。MATLAB软件应用程序接口主要完成的功能是能让MATLAB语言与其他编程语言进行交互,例如在MATLAB中调用C语言程序等。3 MATLAB音乐合成的原理 在本设计中,通过MATLAB软件对音乐信号频率与时长的分析与组合来完成音乐的简单合成。所以在设计过程中,根据音调
19、用频率来体现,节拍用时长来体现的原理,用MATLAB软件进行编程来存储音乐的频率与时长,通过将正弦波形的不同叠加与包络设置来仿真实现音乐的音调与节奏的变化。3.1 所涉及的乐理知识简述 要想实现音乐的合成,就要了解合成音乐所需要的相关数据,也就是音乐的三个特性:音调、响度、音色。音乐的音调就是音的高低,需要考虑影响音调的主要因素即声波的频率。音乐的响度是音的强弱,需要考虑影响响度的主要因素即声波的振动幅度。而音乐音色的变化是由音乐波形中谐波的作用产生的。3.1.1 音调与唱名在日常生活中,读音乐曲谱时发出的1( do)、2( re)、3(mi)、4(fa).这些就称作为唱名。这些唱名分别代表着
20、相应的基波频率。但是只有当确定了音乐的音调之后才能确切的知道各个唱名所真正代表的基波频率值。例如乐谱为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 音色与谐波 音色的变化是由音乐波形中谐波的作用产生的。在音乐的专业中所指的“泛音”指的就是谐波,在得知音调之后,只能确定音乐信号的基波频率值,但是谐波频率无法确定。不同的乐器会发出不同的音色,这是由于不同的谐波成分和频谱结构导致的。并且不同的乐器所发出的的音乐包络波形是
21、不同的,为了便于用程序来表示波形包络,通常把音乐的复杂包络函数近似直线化,所以音乐波形的包络通常都是折线型。3.1.3 十二平均律 十二平均律,在音乐领域中作为一种音乐定律的方法,指将音乐的八度按照频率等比例地分成十二份。由于“五度相生律”和“十二平均律”发音非常相似而且十二平均律能够解决转调问题,所以,它被广泛应用在键盘乐器与交响乐队中。根据国际标准音的规定,相邻的半音之间的频率之比定为2(1/12)1.059,作为最常见的应用十二平均律而制成的乐器就是钢琴,钢琴的琴键a1的频率规定为440Hz,那么就可以根据比值得出钢琴其他的琴键音对应的频率。例如与a1左边相邻#g1频率是440/1.05
22、9=415.03Hz,同理,与a1右边相邻的半音#a1的频率是466.16Hz,也可以算出不同音调下“1(do)”的对应的基波频率,即C:261.63Hz ,F:349.23Hz和G:392Hz 等 。3.2 傅里叶变换与频谱分析合成一段简单的音乐,需要综合考虑音乐的三要素,也就是必须知道该段音乐的基波与谐波频率成分以及包络的形状特征。为了便于分析上述特征,就要进行信号的频谱分析,也就是利用傅里叶变化,得出该音乐信号的频谱结构,来进行其频谱特征的提取。有限长序列的离散傅氏变换(DFT),在信号处理的理论上有重要意义,它将频域也离散化,是现代信号频谱分析主要方法。N点DFT实质上是其频谱的离散频
23、域采样,对频率具有选择性(k=2k/N),在这些点上反映了信号的频谱。 但DFT计算量大,处理复杂,所以引用了快速傅里叶变化(FFT)算法最简单、编程最容易的是基2FFT,还有基4FFT、基8FFT等快速算法。根据采样定律,FFT变换相当于对有限长序列进行频域采样,而不丢失任何信息。所以只要时域序列的长度足够长,采样的点数足够多,频域采样也可以很好地反映信号的频谱趋势,所以在设计中可以用FFT进行语音信号的频谱分析。 4 MATLAB音乐合成系统的总体设计4.1 系统的总体设计 MATLAB音乐合成系统,能实现音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升八度处理、音乐的降八度处理
24、、音乐时域与频域波形显示、利用傅里叶级数合成音乐以及音乐字幕的动态显示的操作。该系统的全部功能都通过GUI图形用户界面显示出来,并且使用模块化的设计方法,将系统分为四个模块,如图4-1所示。基于MATLAB 软件的音乐合成系统简单合成及处理音乐的模块音乐的傅里叶频域分析模块傅里叶级数合成音乐模块音乐的字幕动态显示模块图4-1 系统总体设计结构图4.2 GUI界面的设计GUIDE(Graphic User Interface Design Environment)是专门设计图形用户界面GUI的集成开发环境。GUI界面一般包括窗口、菜单、按钮和文本框等各种图形对象。在设计GUI时,可以通过鼠标操作
25、就能产生各种GUI控件,这样让用户对图形界面的生成与管理变得直接、方便,能让用户定制用户与MATLAB2013a的交互方式。可以形成一种除命令窗口之外的与MATLAB2013a的交互方式。4.2.1 启动GUIDE在MATLAB2013a中Command窗口里面输入guide 按回车键,或者从菜单里面均可进入GUIDE。MATLAB2013a为GUI图形应用界面的设计准备了以下四种模板,如图4-2所示。图4-2 GUI设计模板选择对话框在GUI设计模板中选中第一个模板,新建并且保存为yinyuehecheng后,MATLAB2013a会自动产生相应的.fig文件和.m文件。4.2.2 GUID
26、E设计环境 在进入GUI界面之后,下一步就是进行界面设计编辑。在GUIDE设计环境中用到的事Layout编辑器,操作者可以通过鼠标移动模板左边的控件到中间布局区域,如按钮、坐标轴、文本框等。接下来,通过属性编辑器和对齐编辑器对各控件设置相关属性和进行界面布置,以完善界面功能。本设计总体布局如下图4-3所示。图4-3 GUI设计面板布局4.2.3 GUI界面的功能设计 设计好GUI界面的整体布局之后,接下来就该利用程序代码的编写进行各个按钮功能的设置。找到上述的GUI 的M文件yinyuehecheng.m,打开之后,会看到里面已经存在许多自动生成的程序代码,只需要找到各个按钮及文本编辑框对应的
27、函数。在对应的函数名下输入要实现相应功能所需要的程序。例如在yinyuehecheng.m文件中找到函数:function button1_Callback在这个函数名称下面写入具有简单音乐合成功能的程序。 global flag global west fs f time f_flag; flag = 1; f_flag=0; fs=8000;%该段音乐抽样频率 F=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88; %各个唱名对应的频率 time=fs*1/4,1/4,1/4,1/4,3/4,1/4,1/4,1
28、/4,1/4,1/4,1;%各个唱名的持续时间值 N=length(time); %这段音乐的总抽样点数 west=zeros(1,N); %用west向量来储存抽样点 n=1; for a=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.a
29、xes1,HandleVisibility,ON);%开始使用坐标,便于操作 axes(handles.axes1);%使用图像,操作在坐标1 plot(t1,west);axis(-0.2 4.2 -1.2 1.2); xlabel(t/s);ylabel(幅度); 这样相应设置好各个功能按钮所对应的程序,就算基本完成了GUI界面的设置。5 MATLAB音乐合成系统的设计与实现5.1 简单合成及处理音乐模块的设计与实现通过给定的音乐简谱和掌握的乐理知识与频谱分析来进行简单音乐的合成。并且在此基础上对音乐进行相应的处理,来比较经不同处理后的音乐播放效果。5.1.1 合成社会主义好 依据音乐社会
30、主义好一小段的音乐简谱和国际规定的十二平均律的计算方法对应地得到此小段音乐中各个唱名的频率,利用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 唱名对应的频率表唱名3335321 6123频率493.88493.88493.88587.33493.88440392329.6339
31、2440493.88得到该小段音乐各个唱名对应的频率之后,还有很重要的一个数据需要得到,那就是根据乐理知识推算出各个唱名对应的持续时间。由图5-1中1=G2/4可以知道各唱名的持续时间如下表5-2所示。表5-2 唱名持续时间表唱名33353216123时间0.250.250.250.250.750.250.250.250.250.251 依据上述得到的数据可以编写如下程序。 function button1_Callback(hObject, eventdata, handles)%简单音乐的合成 global flag global west fs f time f_flag; f lag
32、= 1; f_flag=0; fs=8000; %该段音乐抽样的频率 f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.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; for a=1:N %利用循环产生抽样数据,a表示乐音编号 t=1/fs:1/fs:time(a)/fs; %产生
33、第a个乐音的抽样点 west(n:n+time(a)-1)=sin(2*pi*f(a)*t); %抽样点对应的幅值 n=n+time(a); end5.1.2 加包络,除噪音 在MATLAB中,播放出了社会主义好的第一小节,但可听出声音不是很好,只能听出具有社会主义好的调子而已。会听到有“啪”的杂声,声音比较刺耳,下面通过加上外形相似的包络来消噪音,使不同音的连接处的响度为零即可。编写如下程序。 function button4_Callback(hObject, eventdata, handles)%音乐的降噪global flag global west fs f time f_flag
34、; if flag =1 f_flag=0; N=length(time); %这段音乐的总抽样点数 west=zeros(1,N); %用west向量来储存抽样点 n=1; for a=1:N %利用循环产生抽样数据,a表示乐音编号 t=1/fs:1/fs:time(a)/fs; %产生第a个乐音的抽样点 G=zeros(1,time(a); %G为存储包络数据的向量 G(1:time(a)=exp(1:(-1/time(a):1/8000);%产生包络点 west(n:n+time(a)-1)=sin(2*pi*f(a)*t).*G(1:time(a);n=n+time(a); end 加
35、包络后的仿真时域波形如图5-2所示。 图5-2 音乐降噪时域图形 由图可见,通过加包络,使每个音的连接处的幅度有所减小,使音乐听起来更加连续,悦耳。5.1.3 音乐升降度处理升高一个八度即每个唱名的频率都提高一倍,变为原来的2倍;降低一个八度即每个唱名的频率都减小一倍,变为原来的1/2。因此最简单的办法是将存储该段音乐的各个乐音频率的向量中每个元素改变为原来的2或1/2倍即可。编写程序如下。function button6_Callback(hObject, eventdata, handles)%音乐升八度global flag %定义全局变量global west fs time f_fl
36、ag;if flag =1 f_flag=1;f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88*2; %频率升高N=length(time); %这段音乐的总抽样点数west=zeros(1,N); %用west向量来储存抽样点n=1;for a=1:N %利用循环产生抽样数据,a表示乐音编号t=1/fs:1/fs:(time(a)/fs; %产生第a个乐音的抽样点P=zeros(1,time(a); %P为存储包络数据的向量L=(time(a)*0 1/5 333/1000 333/500 1;%包络线端点对
37、应的横坐标T=0.2 1.5 1 1 0.2; %包络线端点对应的纵坐标s=1;b=1:1:time(a); %产生包络线抽样点for k=1:4 P(s:L(k+1)-1)=(T(k+1)-T(k)/(L(k+1)-L(k)*(b(s:L(k+1)-1)-L(k+1)*ones(1,L(k+1) -s)+T(k+1)*ones(1,L(k+1)-s);%包络线直线方程通式s=L(k+1); endwest(n:n+time(a)-1)=sin(2*pi*f(a)*t).*P(1:time(a);n=n+time(a);end将音乐升八度之后的仿真时域波形如下图5-3所示。图5-3 音乐升八度
38、时域图同样地,将音乐进行降八度处理只需改变上述程序中的一条语句即可。即将f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88*2改为:f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88/2。 5.1.4 音乐加谐波处理 在5.1.1的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2、0.3、0.1。主要的功能程序如下。 function button5_Callback(hObject, eventdata, han
39、dles)%音乐加谐波 m=1 0.3 0.2; %波形幅值矩阵 ss=zeros(1,length(t); for i=1:length(m) ss=ss+m(i)*sin(2*i*pi*f(a)*t); %加谐波 end west(n:n+time(a)-1)=ss.*P(1:time(a); n=n+time(a); end 加入谐波之后的仿真时域波形如图5-5。图5-5 音乐加谐波的时域图形 由图可见,每个音的连接处同样是衰减到一较小值而不是0,同时音乐听起来更加真是实,效果更好。5.2 用傅里叶变换分析音乐频谱模块的设计与实现为了更加清晰地了解经过不同处理的音乐所发生的变化,就要研究
40、音乐的基波与谐波,即每种音乐的频谱图,可以对音乐时域波形进行傅里叶变换,得到的幅值谱,在频谱图上的第一个突出的波峰对应的频率即为基频。编写了如下程序。function button10_Callback(hObject, eventdata, handles)%傅里叶分析global flag global west fs f f_flag; %定义全局变量if flag=1if f_flag=1 f1=f*2;else if f_flag=2 f1=f/2;else if f_flag=0 f1=f;end %所用到的抽样频率为8000.NFFT = 2nextpow2(length(wes
41、t); Y = fft(west,NFFT)*2/length(west);g = fs/2*linspace(0,1,NFFT/2+1);set(handles.axes2,HandleVisibility,ON);%开始使用坐标,更便于操作 axes(handles.axes2);%开始用图像,在坐标2处进行操作plot(g,2*abs(Y(1:NFFT/2+1);axis(-0.1 max(f1)+50 -0.1 max(2*abs(Y(1:NFFT/2+1)+0.2);xlabel(f/Hz);ylabel(幅度);else errordlg(请您先点击简单音乐合成按钮!,温馨提示);
42、end经过分别处理的音乐通过调用该段程序就会分别显示出相对应的频谱图,以便从视觉上更加直观地了解各个音乐的不同之处,在各种相应处理前后的对比中更容易让用户接受与其对应的方法及特点。音乐社会主义好简单合成后的仿真频谱图形如下图5-6所示。图5-6 简单音乐合成频谱图由图5-6可知,该段音乐的基波频率为329.1Hz,它的幅度值是0.125,以此类推,它对应的各个高次谐波幅度值如下表5-3所示。表5-3 高次谐波幅值表谐波234567幅度0.250.2560.7550.0250.1250.01 图5-7为音乐加谐波之后的仿真频谱图。图5-7 音乐加谐波频谱图 该图与图5-6所示的简单音乐合成有明显
43、的区别,波形边缘更加平缓,音乐听起来更加清晰,效果更好。图5-8与图5-9分别为音乐升八度和降八度处理的仿真频谱图。图5-8 音乐升八度频谱图 图5-9 音乐降八度处理频谱图由上述图5-8与图5-9所示频谱图可以清楚地看到,升八度处理是在简单音乐合成图5-6的基础上频率增加了一倍,并且各个幅值有所升高,降八度处理是在图5-6的基础上频率降低了一倍,并且幅值有轻微的下降。利用傅里叶级数的原理合成的音乐的仿真频谱图形,如图5-10所示。 图5-10 基于傅里叶级数合成的音乐频谱 由上图5-10与5-6频谱图的比较,可以直观的看出,利用傅里叶级数分析原理合成的音乐频谱曲线愈加光滑,噪声干扰少,只是幅
44、值很小,质量较简单音乐合成的高。5.3 基于傅里叶级数合成的音乐模块的设计与实现运用傅里叶级数变换的原理来再次合成音乐社会主义好的第一小节,只需将5.1.4中音乐加谐波的程序幅度修改一下。将 m=1 0.3 0.2; %波形幅值矩阵改为:m=0.125 0.25 0.256 0.755 0.025 0.125 0.01; %波形幅值矩阵运行后可以听出声音更加真实了。仿真时域波形如图5-11。图5-11 基于傅里叶级数合成音乐的时域波形利用傅里叶级数合成音乐的部分程序。function button11_Callback(hObject, eventdata, handles)%傅里叶级数合成的音乐 % m=1 0.3 0.2; %波形幅值矩阵m=0.125 0.25 0.256 0.755 0.025 0.125 0.01*1;ss=zeros(1,length(t);for i=1:length(m)ss=ss+m(i)*sin(2*i*pi*f(a)*t); %加谐波e