基于MATLAB的简单音乐合成.docx

上传人:b****1 文档编号:2068665 上传时间:2022-10-26 格式:DOCX 页数:10 大小:23.03KB
下载 相关 举报
基于MATLAB的简单音乐合成.docx_第1页
第1页 / 共10页
基于MATLAB的简单音乐合成.docx_第2页
第2页 / 共10页
基于MATLAB的简单音乐合成.docx_第3页
第3页 / 共10页
基于MATLAB的简单音乐合成.docx_第4页
第4页 / 共10页
基于MATLAB的简单音乐合成.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于MATLAB的简单音乐合成.docx

《基于MATLAB的简单音乐合成.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的简单音乐合成.docx(10页珍藏版)》请在冰豆网上搜索。

基于MATLAB的简单音乐合成.docx

基于MATLAB的简单音乐合成

《数字信号处理》课程设计

说明书

设计题目:

基于MATLAB的简单音乐合成

姓名:

专业年级:

学号:

指导老师:

时间:

2015年6月25日

《数字信号处理课程设计》任务书

题目

基于MATLAB的简单音乐合成

主要

内容

1、自学Matlab软件,了解相关编译语句;

2、利用Matlab完成简单的音乐合成;

3、分析仿真结果,得出合理结论。

设计

要求

1、利用Matlab实现对自选乐曲的简单音乐合成,生成.wav文件;

2、给各个乐音加载包络,生成.wav,并显示音乐信号的包络图像;

3、在音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.388、0.1557、0.2424,并生成.wav文件。

4、按要求完成设计报告。

主要

仪器

设备

1、计算机1台,Matlab仿真软件一套。

主要

参考

文献

[1]高西全,丁玉美.数字信号处理(第三版)[M].西安:

西安电子科技大学出版社,2008

[2]程佩青.数字信号处理教程(第四版)[M].北京:

清华大学出版社,2013

[3]余成波等.数字信号处理及MATLAB实现(第二版)[M].北京:

清华大学出版社,2008

课程设计进度安排(起止时间、工作内容)

单人一组,每组选择不同乐曲进行音乐合成,每人1套实验环境。

整个课程设计共1周20学时,具体安排如下:

前期准备工作4学时学习设计题目相关知识,查阅资料,掌握实现的原理;

计划内上机14学时按要求,完成设计方案,编写并调试仿真程序;

计划内上机2学时结果验收,并完成课程设计报告。

课程设计开始日期

2015.06.23

课程设计完成日期

2015.06.30

指导老师(签名):

__________________________

1设计基础-1-

1.1MATLAB软件简介-1-

1.2乐曲解析-1-

2设计与实现-2-

2.1简单的音乐合成-2-

2.1.1原理分析-2-

2.1.2Matlab源代码-2-

2.1.3运行结果分析-2-

2.2除噪音,加包络-2-

2.2.1原理分析-2-

2.2.2Matlab源代码-2-

2.2.3运行结果分析-2-

2.3加谐波-2-

2.3.1原理分析-2-

2.3.2Matlab源代码-2-

2.3.2运行结果分析-3-

3总结与体会-4-

4参考文献-5-

1设计基础

1.1MATLAB软件简介

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室MATLAB工作界面)。

是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。

它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。

它在数学类科技应用软件中在数值计算方面首屈一指。

MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。

在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。

可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。

1.2乐曲解析

乐音的基本特征可以用基波频率、谐波频率和包络波形三个方面来描述,我们用大写英文字母CDEFGAB表示每个音的“音名”(或称为“音调”),当指定某一音名时,它对应固定的基波信号频率。

图1表示钢琴的键盘结构,并注明了每个琴键对应的音名和基波频率值。

这些频率值是按“十二平均律”计算导出,下面解释计算规则:

图1-1钢琴键盘和相应频率

从图1-1可以看到,靠下边的A键称为小字组A,它的频率值fA0=220Hz,而靠上面的另一个A键是小字一组A,它的频率值是fA1=440Hz。

两者为二倍频率关系,即fA1相当于fA0的二次谐波。

也称为8度音或倍频程Octave(即我们画频响特性图时所用的术语“倍频程”)。

根据《两只老虎》简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB中生成幅度为1,抽样频率为8000kHz的正弦信号表示这些乐音,用sound播放合成的音乐

图1-2乐曲《两只老虎》曲谱

由图可知《两只老虎》的曲调定为C,即1=C,对应的频率为261.63Hz,据此可以计算出其他乐音的频率,类推计算出各乐音对应的频率见表1-1部分乐音对应的频率:

表1-1部分乐音对应的频率

乐音

1

2

3

1

1

2

3

1

3

4

频率

261.63

293.66

329.63

261.63

261.63

293.66

329.63

261.63

329.63

349.23

乐音

5

3

4

5

频率

392

329.63

349.23

392

在确定了各乐音的频率之后需要确定每个乐音的持续时间。

每小节有两拍,一拍的时间是0.5此部分乐音的持续时间见表1-2部分乐音对应的时间:

表1-2部分乐音对应的时间

乐音

1

2

3

1

1

2

3

1

3

4

时间

0.5

0.5

0.5

0.5

0.5

0.5

0.5

0.5

0.5

0.5

乐音

4

5

3

4

5

时间

0.5

1

0.5

0.5

1

而在MATLAB中表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。

用一个行向量来存储这段音乐对应的抽样点,在用sound函数播放即可。

根据以上分析在MATLAB中编写如下程序:

sound_1_1.m

clear;clc;

fs=8000;%抽样频率

f=[261.63293.66329.63261.63261.63293.66329.63261.63329.63349.23

392329.63349.23392];

%各个乐音对应的频率

time=fs*[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,1];%各个乐音的抽样点数

N=length(time);%这段音乐的总抽样点数

east=zeros(1,N);%用east向量来储存抽样点

n=1;

fornum=1:

N%利用循环产生抽样数据,num表示乐音编号

t=1/fs:

1/fs:

time(num)/fs;%产生第num个乐音的抽样点

east(n:

n+time(num)-1)=sin(2*pi*f(num)*t);

%抽样点对应的幅值

n=n+time(num);

end

sound(east,8000);%播放音乐

2设计与实现

2.1简单的音乐合成

根据《两只老虎》片段的简谱和“十二平均律”计算出该片段中各个乐音的频率,在MATLAB中生成幅度为1、抽样频率为8000kHz的正弦信号表示这些乐音。

请用sound函数播放每个乐音,听一听音调是否正确,最后用这一系列乐音信号拼出《两只老虎》片段,注意控制每个乐音持续的时间要符合节拍,用sound函数播放合成的乐音。

2.12Matlab源代码

clear;clc;

fs=8000;%抽样频率

f=[261.63293.66329.63261.63261.63293.66329.63261.63329.63349.23

392329.63349.23392];

%各个乐音对应的频率

time=fs*[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,1];%各个乐音的抽样点数

N=length(time);

n=1;

fornum=1:

N%利用循环产生抽样数据,num表示乐音编号

t=1/fs:

1/fs:

time(num)/fs;%产生第num个乐音的抽样点

east(n:

n+time(num)-1)=sin(2*pi*f(num)*t);

%抽样点对应的幅值

n=n+time(num);

end

sound(east,8000);%播放音乐

2.1.3运行结果分析

初步合成的音乐音调符合曲谱,能听出《两只老虎》的旋律。

2.2除噪音,加包络

2.2.1原理分析

你一定注意到

(1)的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。

这种噪声严重影响合成音乐的质量,丧失真实感,下面通过加包络来消噪音。

最简单的包络为指数衰减。

最简单的指数衰减是对每个音乘以因子,在实验中首先加的是的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完全消除,播放的音乐效果不是很好,感觉音乐起伏性不强。

于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。

2.2.2Matlab源代码

clear;clc;

fs=8000;%抽样频率

f=[261.63293.66329.63261.63261.63293.66329.63261.63329.63349.23392329.63349.23392];%各个乐音对应的频率

time=fs*[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,1];%各个乐音的抽样点数

%各个乐音对应的频率

N=length(time);%这段音乐的总抽样点数

xio=zeros(1,N);%用east向量来储存抽样点

n=1;

fornum=1:

N%利用循环产生抽样数据,num表示乐音编号

t=1/fs:

1/fs:

(time(num))/fs;%产生第num个乐音的抽样点

P=zeros(1,time(num));%P为存储包络数据的向量

L=(time(num))*[01/53/85/81];

%包络线端点对应的横坐标

T=[01.5110];%包络线端点对应的纵坐标

s=1;

b=1:

1:

time(num);%产生包

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1