matlab音乐合成报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB音乐合成综合实验
学院:
班级:
指导老师:***
同做者:
二0一六年十二月
摘要
本实验共有三部分:1.简单的音乐合成;2.用傅里叶变换分析音乐;3.基于傅里叶级数的音乐合成。一步一步分析了用MATLAB进行音乐合成的过程。通过本实验达到加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB基本使用的目标。该实验采用MATLAB软件仿真来实现。首先,通过编程对一段真实的音乐进行分析、处理,求得这段音乐的基频、谐波分量、等数据;然后,通过对乐理的研究,根据分析中求得的数据编写程序,进行基于傅里叶分析的音乐合成设计,并设计了图形用户界面。
目录
1.绪论
1.1 引言 (3)
1.2 实验要求 (3)
1.3 实验原理 (3)
2.简单的合成音乐
2.1 乐理知识介绍 (4)
2.2 利用MATLAB实现音乐合成器,生成 WAV文件 (5)
2.3 除噪音,加包络 (5)
2.4 音乐升高和降八度 (9)
2.5 加入谐波 (9)
3.用傅里叶变换分析音乐
3.1 载入fmt.wav并播放 (11)
3.2 处理realware (11)
3.3 分析wave2proc的基波和谐波 (13)
3.4 自动分析fmt.wav的音调和节拍 (16)
4.基于傅里叶级数的音乐合成
4.1 重新加谐波 (17)
4.2 通过音调信息弹奏《送别》 (19)
5.制作GUI界面 (20)
6.实验难点及问题 (21)
7.实验收获 (22)
1.绪论
1.1 引言
信号与系统的概念及分析方法广泛应用于通信、自动控制、航空航天、电子信息、地震学、生物工程等领域,因此“信号与系统”是一门电子信息学科相关专业的主干技术课程。MATLAB 是国际上公认的优秀的科技应用软件,随着版本的不断升级,内容也在不断扩充。基于MATLAB 的音乐分析与合成实验是针对“信号与系统”课程的重点和难点之一的傅里叶变换和傅里叶级数等内容而设计的。由于该实验是真实音乐的实际应用,可以增进对傅里叶级数和傅里叶变换的理解,加深对信号分析工程应用的理解,提高在信号分析领域的应用能力。
1.2 实验要求
1、3-5人一组,选择不同乐曲,利用MATLAB 实现音乐合成器,生成WAV 文件;
2、给乐音加包络消噪;
3、实现音乐的升八度和降八度;
4、在音乐中添加谐波;
5、用傅里叶级数分析音乐的基频、音调和节拍;
6、模仿一些常用乐器(如钢琴、吉他等)实现音乐合成;
7、设计GUI 界面;
8、提交设计报告。
1.3实验原理
傅里叶变换建立了信号频谱的概念。所谓傅里叶分析即分析信号的频谱(频率构成)、频带宽度等。要想合成出一段音乐,就要了解该段音乐的基波频率、谐波构成等。因此,必须采用傅里叶变换这一工具。对于连续时间信号f(t),其傅里叶变换为:
dt
jwt e t f w ⎰∞
∞--=)(F )(
由于其变换两边的函数f (t) 和F (w )都是连续函数,不适合于计算机处理。MATLAB 语言提供了符号函数FOURIER 来实现傅里叶变换,但该函数需要信号的解析表达式。而工程应用中经常需要对抽样数据进行傅里叶分析,这种情况下往往无法得到信号的解析表达式,必须采用傅里叶变换的数值计算方法。
如果f(t)的主要取值区间为[t1,t2],定义T=t2-t1为区间长度。在该区间内抽样N 个点,抽样间隔为:
N T
t =∆
则有:
t t n jw e t n f w t t N ∆∆+-∆+=∑-)(
)(F 11
01)(
可以计算出任意频点的傅里叶变换值,假设F(ω)的主要取值区间位于[ω1,ω2],要计算其间均匀抽样的k 个值,则有:
t t n kw j e t n t f t w k t w w N ∆∆++-∆+∆=∆+∑-)
)(()1(F 111
01)(
式中 ,k w w w 1
2-=∆为频域抽样间隔。
2.简单的合成音乐
2.1 乐理知识介绍
乐音的基本特征可以用基波频率、谐波频谱和包络波形3个方面来描述。 基波频率:每个指定音调的唱名都对应固定的基波信号频率。所谓唱名是指平日读乐谱唱出的1(do)、2(re)、3(mi)… … ,每个唱名并未固定基波频率。当指定乐曲的音调时才知道此时唱名对应的频率值。如C 调“ 1”的基波频率为261.63HZ,F 调“1”的基波频率为349.23HZ,F 调“ 5”的基波频率为523.25HZ 。 谐波频谱:在音乐领域中称谐波为“泛音”,由谐波产生的作用称为音色变化。当指定音调之后,仅指定了乐音信号的基波频率,谐波情况并未说明。各种乐器,如钢琴或单簧管,都可以发出某一音调下的唱名,而人的听觉会明显感觉两者不同,这是由于谐波成分有所区别,频谱结构各异。包络波形:不同类型的乐器,包络形状也不相同。在音乐合成实验中,为简化编程描述,通常把复杂的包络函数用少量直线近似。于是,乐音波形的包络呈拆线。有时为了保证在乐音的邻接处信号幅度为零,也可以用指数衰减的包络来表示,这也是最简单的办法。
2.2 利用MATLAB 实现音乐合成器,生成 WAV 文件
而在MATLAB 中表示乐音所用的抽样频率为fs=10000Hz ,也就是所1s 钟内有1000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。用一个行向量来存储这段音乐对应的抽样点,在用sound 函数播放即可。根据以上分析在MATLAB 中编写如下程序:
Clear clc;
fs=10000;
f=[784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 ];
time=fs*[1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 2 1 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ]; N=length(time); %这段音乐的总抽样点数
y=zeros(1,N); %用y 向量来储存抽样点
n=1;
for num=1:N %利用循环产生抽样数据,num 表示乐音编号
t=1/fs:1/fs:time(num)/fs; %产生第num 个乐音的抽样点
y(n:n+time(num)-1)=sin(2*pi*f(num)*t);
%抽样点对应的幅值
n=n+time(num);
end
sound(y,fs);
Wavwrite(y,’test4’);
在MATLAB 中运行,但是可以听出效果不是很好。
2.3 除噪音,加包络
下面通过加包络来消噪音。最简单的包络为指数衰减。最简单的指数衰减是对每个音乘以t e α-因子,在实验中首先加的是 1.5t e -的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完全消除,播放的音乐效果不是很好,感觉音乐起伏性不强。于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。在1.1程序的基础上加上包络,编写如下程序: