为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

matlab音乐合成

2018-04-03 45页 doc 295KB 55阅读

用户头像

is_601191

暂无简介

举报
matlab音乐合成matlab音乐合成 毕业设计,论文, 题目名称:基于MATLAB软件的音乐合成 院系名称:理学院 班 级:物理092 学 号:200900124219 学生姓名:李康士 指导教师:贺庆 2013 年 5 月 论文编号:200900124219 基于MATLAB的软件的音乐合成 Music Synthesis Based On MATLAB Software 院系名称:理学院 班 级:物理092 学 号:200900124219 学生姓名:李康士 指导教师:贺庆 2013年 5 月 中文摘要 ...
matlab音乐合成
matlab音乐合成 毕业,论文, 题目名称:基于MATLAB软件的音乐合成 院系名称:理学院 班 级:物理092 学 号:200900124219 学生姓名:李康士 指导教师:贺庆 2013 年 5 月 论文编号:200900124219 基于MATLAB的软件的音乐合成 Music Synthesis Based On MATLAB Software 院系名称:理学院 班 级:物理092 学 号:200900124219 学生姓名:李康士 指导教师:贺庆 2013年 5 月 中文摘要 针对信号与系统课程实验缺乏理论联系实际的问题,设计开发了基于MATLAB 的音乐与合成实验。把信号与系统的概念及分析应用于生活实际,增进对傅里叶级数和傅里叶变换的理解,启发学习思路,激发学习热情,加深在领域的具体应用,提高分析问题和解决问题的能力。 语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。 MATLAB语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音合成以及各种图形的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数。利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。语音信号合成是MATLAB重要应用的领域之一, 本设计针对现在大部分语音处理软件内容繁多、操作不便等问题,采用MATLAB7.0综合运用GUI界面设计、各种函数调用等来实现语音信号的合成、降噪、傅里叶变换及滤波,程序界面简练,操作简便,具有一定的实际应用意义。 关键词:音乐分析与合成;MATLAB;傅里叶分析;信号与系统 I Abstract To address the problem with experiments for the Signals and Systems course,that is there is a shortage of real- world applications of the theory,we designed and develop MATLAB-based music analysis and synthesis experiments,where the concepts and analysis methods about signals and systems are used in real- world applications. They help students increase their understanding of the Fourier Series and Fourier Transform,give them inspirations and add to their enthusiasm for studies. In addition,they help deepen their impression on signal analysis applications in engineering fields and improve their capabilities of analyzing and solving problems. Speech signal processing is to study the use of digital signal processing technology and knowledge of the voice signal voice processing of the emerging discipline is the fastest growing areas of information science one of the core technology. Transmission of information through the voice of humanity's most important, most effective, most popular and most convenient form of exchange of information. MATLAB language is a data analysis and processing functions are very powerful computer application software, sound files which can be transformed into discrete data files, then use its powerful ability to process the data matrix operations, such as digital filtering, Fourier transform, when domain and frequency domain analysis, sound playback and a variety of map rendering, and so on. Its signal processing and analysis toolkit for voice signal analysis provides a very rich feature function, use of these functions can be quick and convenient features complete voice signal processing and analysis and visualization of signals, makes computer interaction more convenient . MATLAB Signal Processing is one of the important areas of application. The design of voice-processing software for most of the content are numerous, easy to maneuver and so on, using MATLAB7.0 comprehensive use GUI interface design, various function calls to voice signals such as frequency, amplitude, Fourier transform and filtering, the program interface concise, simple, has some significance in practice. Key words: music analysis and synthesis; MATLAB; Fourier analysis; signals and systems II 目 录 中文摘要 ........................................................................................................ I Abstract ....................................................................................................... II 目 录 ..................................................................................................... III 前言 ............................................................................................................... 1 第一章 MATLAB概述 ............................................................................... 2 1.1 MATLAB的发展 ................................................................................. 2 1.2 MATLAB的主要功能 ......................................................................... 3 1.2.1 数值计算和符号计算 .................................................................. 3 1.2.2 绘图功能 ...................................................................................... 3 1.2.3 MATLAB的语言体系 ................................................................... 3 1.2.4 MATLAB工具箱 .......................................................................... 4 第2章 乐理知识简介 .................................................................................. 5 2.1 基波频率 ............................................................................................. 5 2.2 谐波频谱 ............................................................................................. 5 2.3 包络波形 ............................................................................................. 5 第3章 基于MATLAB的音乐合成的基本原理 ......................................... 6 3.1 实验原理 ............................................................................................. 6 3.2 音乐分析与合成的MATLAB实现 .................................................... 6 3.2.1 相关的MATLAB函数及其功能 ................................................. 6 3.2.2 实现过程中的难点处理 .............................................................. 7 3.2.3程序实现框图及误差分析............................................................ 8 第4章 MATLAB合成音乐 ....................................................................... 10 4.1 合成卡农音乐 ................................................................................... 10 4.2 用包络修正每个乐音,消除噪音 .................................................... 10 4.3用最简单的方法将4.2中的音乐分别升高和降低 ......................... 13 4.4在4.2中加入适量谐波,重新生成音乐 ..................... 13 第5章 测试原始声音和频谱分析 ............................................................ 15 5.1 测试原始声音 ................................................................................... 15 5.2对wave2prov进行傅立叶分析 ....................................................... 17 5.3对导入音乐的自动节拍分析和频率分析 ......................................... 20 第6章 重新合成卡农音乐 ........................................................................ 20 6.1 用5.2分析出来的结果重新合成卡农音乐 .................................... 24 6.2 用5.3分析的结果重新合成卡农音乐 ............................................ 25 第7章 结 论.............................................................................................. 27 III 参考文献 ..................................................................................................... 28 附录A: 音乐程序 ................................................................................... 30 IV 中原工学院理学院本科毕业(论文) 前言 自20世纪80年代以来,出现了很多种科学计算语言。因为它们具有功能强、简单易学等特点,使其在许多领域都得到广泛应用。MATLAB便是一种影响大、流行广的计算机科学语言。 MATLAB是英文MATrix LABoratory(矩阵实验室)的缩写。自1984年由美国MathWorks公司推向市场以来,得到了广泛的应用和发展。在欧美各高等院校MATLAB已经成为线性代数、自动化控制理论、数字信号处理、时间序列分析、动态系统仿真等诸多课程的基本教学工具,成为大学生、硕士生以及博士生必须掌握的基本技能。在设计研究单位和工业部门,MATLAB已经被广泛的应用与研究和解决各种具体的工程问题。近年来,MATLAB在我国也开始流行,应用MATLAB的单位和个人极具增加。可以预见,MATLAB将在我国科学研究和工程应用中发挥越来越大的作用。 本论文根据信号与系统中MATLAB的仿真功能进行语音合成,以MATLAB的流行版本7.0版为基础进行信号分析和程序编译工作。 1 中原工学院理学院本科毕业(论文) 第一章 MATLAB概述 1.1 MATLAB的发展 MATLAB是英文MATrix LABoratory(矩阵实验室)的缩写。1980年前后,时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授在给学生讲授线性代数课程时,想教学生使用当时流行的线性代数软件包LINPACK和基于特征计算的软件包EISPACK,但发现许多高级语言调用LINPACK和EISPACK软件包极为不便,于是,Cleve Moler教授便着手写了接口程序并命名为MATLAB,这便是MATLAB的雏形。 早期的MATLAB是用FORTRAN语言编写的,尽管功能十分简单,但是由于是免费软件,还是吸引了大批使用者。经过几年的校际流传,在John Little、Cleve Mloer和Bangert合作下,于1984年成立了MathWorks公司,并正式推出MATLAB第一版(DOS版)。从这时起,MATLAB的核心采用了C语言编写,功能也越来越强。它不仅具有数值计算功能,而且还具有符号计算、图形处理等功能。 以后,MATLAB版本不断更新。MathWorks公司于1992年推出了了具有划时代意义的4.0版本,并与1993年推出了其微机版,该版本可以配合WINDOWS3.x一起使用,使其应用范围越来越广。1994年推出了的4.2版本扩充了4.0的功能,尤其在图形界面设计方面提高了新的方法。1997年推出了5.0版本提供了更多的数据结构,如结构数据、单元数据、多维矩阵、对象与类等,使编程更方便。1999年初推出了的5.3版本在很多方面又进行了进一步改进。2001年7月,MathWorks公司退了MATLAB最新版本6.1版,6.1版对计算机配置要求比较高。之后又推出了7.0版本。现在用户用的最多的是7.0版本。 目前,MATLAB已经不仅仅是“矩阵实验室”了,他已经成为一种广泛应用于工程计算及数值分析领域的新型高级语言。MATLAB功能强大、简单易学、编程效率高,因而深受广大科技工作者的欢迎。在现在各高校,MATLAB已成为线性代数、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图形处理等课程的基本工具。近年来,MATLAB发展越来越迅猛,可以预见,MATLAB将在我国科学研究和工程应用中发挥越来越大的作用。在本论文中主要用到MATLAB的数字信号处理和仿真内容。 2 中原工学院理学院本科毕业(论文) 1.2 MATLAB的主要功能 MATLAB自1984年由MathWorks公司推向市场以来,经历了几十年的发展和改进,现已逐步风靡世界。其可靠的数值计算和符号计算功能、强大的绘图功能、简单易学的语言体系、为数众多的应用工具箱使其在科技应用软件中备受瞩目。 1.2.1 数值计算和符号计算 科学计算有数值计算和符号计算之分。MATLAB的数值计算功能非常强大,它提供了十分丰富的数值计算函数,而且所采用的数值计算算法都是国际公认的、最先进的、可靠的算法,其程序是由世界一流专家编制,并经高度优化。高质量的数值计算功能为MATLAB赢得了声誉。 在实际应用中,除了数值计算外,在符号计算领域往往可得到问题的解析解,MATLAB和著名的符合计算语言Maple结合,实现了MATLAB的符号计算功能。 1.2.2 绘图功能 MATLAB提供了两个层次的绘图操作:一种是对图形句柄进行低层绘图操作,另一种是简历在低层绘图操作之上的高层绘图操作。利用MATLAB的高层绘图操作可以轻而易举地回执各种图形。利用MATLAB图形句柄操作,可以随心所欲地对图形元素进行各种操作,为用户在图形现方面开拓了一个广阔的、没有丝毫束缚的空间。 1.2.3 MATLAB的语言体系 MATLAB是一种高级的科学计算语言。它具有结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征。使用MATLAB可以很容易地实现BASIC、FORTRAN、C等传统语言的几乎全部功能,同时包括WINDOWS图形用户界面的设计,而且简单易学,编程效率高。因此,对于从事数值计算、计算机辅助设计和系统仿真领域的人员来说,用MATLAB编程的确是一个最佳选择。 MATLAB是解释性语言,程序执行速度较慢,而且不能脱离MATLAB环境而独立运行。MathWorks公司希望MATLAB成为新一代的通用软件开发工具,并为此提供了将MATLAB源程序编译为独立于MATLAB集成环境运行的EXE文件,以及将MATLAB程序转化为C语言的编译器。 3 中原工学院理学院本科毕业(论文) 1.2.4 MATLAB工具箱 MATLAB包含两部分内容:基本部分和各种可选的工具箱。基本部分构成了MATLAB的核心内容,也是使用和构造工具箱的基础。MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、可是建模仿真功能及文字处理功能等。学科性工具箱专业性比较强,比如控制系统工具箱、信号处理工具箱、神经网络工具箱、最优化工具箱、金融工具箱、统计学工具箱等等,这些工具箱都是由该领域内学术水平很高的专家编写的,用户可以直接利用这些工具箱进行相关领域的科学研究。 MATLAB具备很强的开放性。除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读可写的源文件,用户可通过对源文件的修改或加入自己编写的文件去构建新的专用工具箱。 4 中原工学院理学院本科毕业(论文) 第2章 乐理知识简介 乐音的基本特征可以用基波频率、谐波频谱和包络波形3个方面来描述。 2.1 基波频率 每个指定音调的唱名都对应固定的基波信号频率。所谓唱名是指平日读乐谱唱 3(mi)??????每个唱名并未固定基波频率。当指定乐曲的音调出的1( do)、2( re)、 时才知道此时唱名对应的频率值。如C 调“1”的基波频率为261. 63 Hz,F 调“1”的基波频率为349. 23 Hz,F调“5”的基波频率为523. 25Hz。 2.2 谐波频谱 在音乐领域中称谐波为“泛音”,由谐波产生的作用称为音色变化。当指定音调之后,仅指定了乐音信号的基波频率,谐波情况并未说明。各种乐器,如钢琴或单簧, 都可以发出某一音调下的唱名,而人的听觉会明显感觉两者不同,这是由于谐波成分有所区别,频谱结构各异。 2.3 包络波形 不同类型的乐器,包络形状也不相同。在音乐合成实验中,为简化编程描述,通常把复杂的包络函数用少量直线近似。于是,乐音波形的包络呈拆线。有时为了保证在乐音的邻接处信号幅度为零,也可以用指数衰减的包络来表示,这也是最简单的办法。 5 中原工学院理学院本科毕业(论文) 第3章 基于MATLAB的音乐合成的基本原理 采用MATLAB 软件仿真来实现。首先,,通过编程对一段真实的音乐进行分析、处理,求得这段音乐的基频、谐波分量、频带宽度等数据;然后,通过对乐理的研究,根据分析中求得的数据编写程序,进行基于傅里叶分析的音乐合成设计。 3.1 实验原理 傅里叶变换建立了信号频谱的概念。所谓傅里叶分析即分析信号的频谱(频率构成)、频带宽度等。要想合成出一段音乐,就要了解该段音乐的基波频率、谐波构成等。因此,必须采用傅里叶变换这一工具。对于连续时间信号f ( t ),其傅里叶变换 ,jt,,为F(ω):。由于其变换两边的函数f(t)和F(ω)都是连续函数,Fftedt()(),,,,, 不适合于计算机处理。MATLAB语言提供了符号函数fourier来实现傅里叶变换,但该函数需要信号的解析表达式。而工程应用中经常需要对抽样数据进行傅里叶分析,这种情况下往往无法得到信号的解析表达式,必须采用傅里叶变换的数值计算方法。 如果f(t)的主要取值区间为[t,t],定义T=t-t为区间长度。在该区间内抽样1221 N个点,抽样间隔为?t=T/N,则有NN,,11,,,,,,,,jtntjtt(1)(1)ftntettftnte()*(),,,,,,,11,可以计算出任意频点的傅里叶,,nn,,00 变换值。 假设F(ω)的主要取值区间位于[ ω,ω ],要计算其间均匀抽样的k个值,12 N,1,,,,,,,,,,,jktnt()()2111fktftnte()(),,,,,,,,,则有,式中,为频域抽样,,,,11kn,0 间隔。 3.2 音乐分析与合成的MATLAB实现 3.2.1 相关的MATLAB函数及其功能 相关的几个声音信号分析与处理的MATLAB函数及其功能,见表3.2.1 函数 功能 wavread 读.wav文件 6 中原工学院理学院本科毕业(论文) sound 将向量转换成声音 kron 矩阵的张量积(叉乘) resample 改变信号的采样率 interp 上采样(提高采样率) decimate 下采样(降低采样率) 表3.2.1 相关的MATLAB函数及其功能 3.2.2 实现过程中的难点处理 音乐的时间分割。在对音乐信号进行分析时,要充分考虑采样数据点数是否为MATLAB软件所能承受。如对音乐信号以8000Hz进行采样,那么在1s的时间范围内,采样的数据点数就有8000个,再对这些数据进行一系列的数学运算,其运行时间很长,出现类似死机的现象。因此,如果音乐文件时间达数秒钟,则应将该文件进行时间分割,分成几个小段进行分析,每小段的时间越少,分析速度越快。建议每小段的时间尽量不超过0.5s。在对每小段音乐进行分析时,只需分析每段音乐的最高幅度处,其他处可看成是其幅度的衰减,频率成分不变,这样可以减少对音乐的分析时间,避免做无谓的分析。为防止漏掉基波频率,最好参考该音乐的时域波形,捕捉到每个音的起始时间和持续时间。 音乐的节拍。每个音的起始时间和持续时间在合成音乐的时候是到至关重要的。因为每个音调都有持续时间,该持续时间就是通常意义上的“拍子”,一拍大约是0.5s。只有了解了每个音的起始时间和持续时间,在音乐合成时才能正确地掌握各基波频率出现的前后顺序及其节拍,以减少失真。 音乐的波形包络。乐音波形包络是描述乐音特性的一个重要因素。通过音乐的时域波形可以判断该乐音是否在下一个乐音开始时衰减为零,以减小音乐合成的误差。包络既可用折线形也可采用指数衰减的方法,关键的问题是如何选择衰减系数。采用折线方法麻烦一些,但折线的斜率可以根据时域波形来判断;若采用指数衰减方法,如能确定衰减系数,就非常简单。本设计采用指数衰减方法,衰减系数可根据电容充放电理论,即工程上认为,当t大于等于3S以后,可认为电路已趋稳定,其中,S为RC电路的时间常数,S=RC。设某段音乐的持续时间为T,且幅度在T at时间内衰减为零,当包络采用指数e时,则衰减因子a=3/T。 参与音乐合成的频率分量。考虑到计算容量和计算速度,并不使用所有的频率分量进行音乐的合成,而只是选用那些真实音乐频谱中超过0.35倍最大幅度的频率 7 中原工学院理学院本科毕业(论文) 分量,否则数据量太大,会超出计算机所能承受的范围,从而导致程序运行错误。 3.2.3程序实现框图及误差分析 用MATALB语言编程实现音乐的分析与合成实验程序框图如图3.2.1 3.2.1 实验程序框图 以一段3s的吉它曲为例,运行该程序,得到该吉它曲的真实音乐与合成音乐的时域波形如图3.2.2。 图3.2.2真实音乐和合成音乐时域波形 8 中原工学院理学院本科毕业(论文) 从图2中可以看出,合成音乐与真实音乐存在着一定的误差。一是合成时只选用了真实音乐频谱中那些超过0.35倍最大幅度的频率分量,舍弃了某些频率成分;二是为了简化程序的编制,对音乐的波形形状选用指数衰减包络进行合成,并不完全符合真实音乐的波形形状。 9 中原工学院理学院本科毕业(论文) 第4章 MATLAB合成音乐 根据卡农音乐片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB中生成幅度1、抽样频率8kHz的正弦信号表示这些乐音。用sound函数播放每个乐音,听一听音调是否正确。最后用这一系列乐音信号拼出卡农音乐片断,注意控制每个乐音持续的时间要符合节拍。 4.1 合成卡农音乐 合成源程序如下: function k= play() rhythm = [5 5 6 2 1 1 6 2;0 0 0 0 0 0 -1 0 ; 0.5 0.25 0.25 1 0.5 0.25 0.25 1;]; y=generaterhythm(rhythm, 8); sound(y); end function y = generaterhythm(rhythm, basetune) fs = 8000; soundpos = [0 2 4 5 7 9 11 0:12]; y = zeros(1,sum(rhythm(3,:))*fs + 1); curpos = 1; for count = 1 : length(rhythm) cursoundname = rhythm(1, count); cursoundpos = soundpos(cursoundname); curfreq = 220 * 2 .^ ((cursoundpos + basetune + 3) / 12 + rhythm(2, count)); cursound = generatetune(curfreq, rhythm(3, count), fs); y(1,curpos:(curpos + length(cursound) - 1)) = cursound; curpos = curpos + length(cursound); end end 10 中原工学院理学院本科毕业(论文) function y = generatetune (freq, time, fs) t = 0:1/fs:(time - 1/fs); y = zeros(1,length(t)); y=sin(t*freq*2*pi); end 4.2 用包络修正每个乐音,消除噪音 在4.1中听到有“啪”的杂声,下面通过加包络来消噪音。使“啪”音效出的最简便的方法是,为每个音加上外形相似的包络,使不同音的连接处的响度为零即可,题目中提示使用e指数。所以,我们添加包络程序如下: function y = amendment(p, l) % p is start position of a syllable and l is length of asyllable if p/l<0.7 y=p/l*exp(-7*p/l); else y=0.7/0.3*exp(-4.9)*(1-p/l); end end 程序运行后,可明显发现没有“啪”音的出现,但由于不管音的长短,最终都要衰减到零,这使音乐的真实感大大降低。加过包络后的波形图如图4.2.1所示。 图4.2.1 11 中原工学院理学院本科毕业(论文) 在两个不同音的交界处放大图如4.2.2所示,可见由于交界处响度为零,所以不会出现大的高频分量。 图4.2.2 在试验程序中发现,当交界处的响度非常小而非零时,“啪”音也不会出现,例如当交界处响度为最大的10%时,“啪”也会消除,波形如图3.2.3所示。 图4.2.3 12 中原工学院理学院本科毕业(论文) 4.3用最简单的方法将4.2中的音乐分别升高和降低 低一个八度,并用resample 函数将上述音乐升高半个音阶。根据乐理知识,每一个整八度的频率差为2倍,也就是说,升高一个八度就是把频率改为原来的两倍,降低一个八度是将频率改为原来的二分之一,所以在频率标记上乘以2或除以2即可。 例如: y=sin(t*2*freq*2*pi); %twice frequency y=sin(t*freq*pi); %half frequency 1/12若要上升半个音阶,则频率上升为原来的2(?1.06)倍即可,所以利用resample函数对原数据进行采样率改变,即 y=resample(y,100,106); 1/12但此时,由于采样率的改变,每个音的储蓄时间会相对缩短至 2(?0.94)倍,由于很接近1,所以影响不大。 4.4在4.2中加入适量谐波,重新生成音乐 function y = generatetune (freq, time, fs) c=[1 0.2 0.3]; t = 0:1/fs:(time - 1/fs); y = zeros(1, length(t)); for count = 1:3; y=y+c(count)*sin(t*freq*count*2*pi); end for count1 = 1 : length(y) y(1, count1) = 20*y(1, count1) * amendment(count1, length(y)); end 仅修改generaterune函数即可,修改如下: function y = generatetune1 (freq, time, fs) c=[1 0.2 0.3]; t = 0:1/fs:(time - 1/fs); y = zeros(1, length(t)); 13 中原工学院理学院本科毕业(论文) for count = 1:3; y=y+c(count)*sin(t*freq*count*2*pi); end for count1 = 1 : length(y) y(1, count1) = 20*y(1, count1) * amendment(count1, length(y)); end 14 中原工学院理学院本科毕业(论文) 第5章 测试原始声音和频谱分析 本章主要讲对原始声音的进行测试和傅里叶分析。 5.1 测试原始声音 测试原始声音的命令为: d=wavread('fmt.wav'); sound(d) 听到声音真实。 载入文件Guitar.mat,并绘制realwave和 wave2proc的图像,我们得到图5.1.1 和图5.1.2.两张图。 图5.1.1 图5.1.2 根据如下程序,我们可以近似求出一个周期的长度约为25个点。 15 中原工学院理学院本科毕业(论文) a=zeros(1,length(realwave)-24); for count=1:length(realwave)-24 a(count)=sum(realwave(1:25).*realwave(count:count+24)); end again=resample(realwave,250,243); sample=zeros(1,25); for count=1:25 for count2=0:9 sample(count)=sample(count)+again(25*count2+count); end end sample=sample/10; again=repmat(sample,1,10); again=resample(again,243,250); hold on,plot(again,'r'),hold off; hold on,plot(wave2proc); 根据程序我们得到图5.1.3和图5.1.4 图5.1.3 16 中原工学院理学院本科毕业(论文) 图5.1.4 对比图5.1.1,图5.1.3和图5.1.2,图5.1.4,可见两组数据重合的很好,说明这 种方法是很不错的方法。 5.2对wave2prov进行傅立叶分析 根据fft定义,我们可编写如下程序: clear;clc; load Guitar.mat; fs=8000; inte22 = 2^nextpow2(length(wave2proc)); y = fft(wave2proc,inte22)/length(wave2proc); g = fs/2*(0:(inte22/2+1)^-1:1); power=2*abs(y(1:inte22/2+2));%y.*conj(y)/length(data); plot(g,power) 运行后得到的结果如图5.2.1 17 中原工学院理学院本科毕业(论文) 图5.2.1 从图中我们可以看出大致的频率分布,但并不够分立,而这种情况不是单单提高采样率就能解决的,可见图5.2.2。 图5.2.2 18 中原工学院理学院本科毕业(论文) 由图可知,我们将抽样频率大大提高,而图像的分立程度却上升较小。根据信号与系统的基本知识,我们可以知道这个现象是由于采样长度过低,致使信号看起来不是无限长,导致杂频的大大增加,所以我们可以将原音段重复多次,解决这个问题。 相关程序如下: clear;clc; load Guitar.mat; fs=8000; wave2proc=repmat(wave2proc,1000,1); inte22 = 2^nextpow2(length(wave2proc)); y = fft(wave2proc,inte22)/length(wave2proc); g = fs/2*(0:(inte22/2+1)^-1:1); power=2*abs(y(1:inte22/2+2));%y.*conj(y)/length(data); plot(g,power) 由以上程序可得图5.2.3。 图5.2.3 19 中原工学院理学院本科毕业(论文) 现在我们可以清楚地看到波形的各个频率分量了,基频为329.2Hz,幅度为0.05193,高次谐波分量见表5.1。 频率 658.4 987.6 1317 1464 1975 2305 2634 2963 3292 相对1.259 0.733 1.033 0.0541 0.1139 0.3391 0.096 0.115 0.064 幅度 表5.1 5.3对导入音乐的自动节拍分析和频率分析 这道问题的难点我认为是在分析节拍上,由于对节拍概念理解得过于浅显,所以现阶段对节拍分段的判断方法是这样的,找到导入音乐文件的数据峰值的位置,即需要当前的值是临近的最短节拍所对应的点数中最大的,标记出每个峰值的位置后,节拍的大体位置就确定了,当我认为这并不是节拍的精确位置,因为每个声音都会有一个上升的过程,所以找到相对位置之后,要在相对位置之间找到一个定长的区域,要求区域中的数值的绝对值之和是相对位置之间所有定长区域中最小的,这个定比幅度峰值点更加精确。 找到节拍后,就可分离乐谱,对每个节拍进行单独的频率分析,具体方法与4.2相同。 但这种方法也有缺陷,这种方法仅适用于本次实验中那种节奏较慢的音乐,对节奏较快的音乐会有较大误差,因为此时由于前一个音的响度减小非常不明显,而当前的音响度又不够大时,程序无法正确识别,所以可能会在节拍上有较大的误差。具体程序如下: (autocheck.m) data=wavread('fmt.wav'); dataa=abs(data); m=zeros(1,length(dataa)); s=zeros(1,length(dataa)); for count=1501:129572 check=1; for count2=1:1500 if(dataa(count)<=dataa(count+count2)||dataa(count)<=dataa(co 20 中原工学院理学院本科毕业(论文) unt-count2))%find the peaks check=0; if(dataa(count)<=dataa(count+count2)) count=count+count2-1; break; end end end if(check==1) m(count)=1; end end small=100; sum=0; position=0; k=find(m==1); for count3=1:length(k)-1 small=100; for count4=k(count3)+1:k(count3+1)-101%find the more specific start of a syllable sum=0; for count5=count4:count4+100 sum=sum+dataa(count5); end if(sum0.015) [c m]=max(power(floor(countk/4)-5*d:floor(countk/4)+5*d)); ampl(1)=c; freq(1)=g(m+floor(countk/4)-5*d); count=m+floor(countk/4)-5*d; elseif (max(power(floor(countk/3)-5*d:floor(countk/3)+5*d))>0.015) %check whether the special frequency is the baseband [c m]=max(power(floor(countk/3)-5*d:floor(countk/3)+5*d)); ampl(1)=c; freq(1)=g(m+floor(countk/3)-5*d); count=m+floor(countk/3)-5*d; elseif (max(power(floor(0.5*countk)-5*d:floor(0.5*countk)+5*d))>0.0 15) [c m]=max(power(floor(0.5*countk)-5*d:floor(0.5*countk)+5*d)); ampl(1)=c; freq(1)=g(m+floor(0.5*countk)-5*d); count=m+floor(0.5*countk)-5*d; else count=countk; end 23 中原工学院理学院本科毕业(论文) for count2=2:7 %harmonics can't be just integral multiple of the baseband, so we %should look aroud it for i=count2*(count-3*d):count2*(count+3*d) if ((power(i)>0.05*power(count))&&(power(i)>power(i-1))&&(power (i)>power(i+1))) %if the amplification of the harmonics is less than 5% of the baseband's, it should be neglect if(ampl(count2)
/
本文档为【matlab音乐合成】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索