matlab音乐合成报告.docx
- 文档编号:1624397
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:17
- 大小:371.79KB
matlab音乐合成报告.docx
《matlab音乐合成报告.docx》由会员分享,可在线阅读,更多相关《matlab音乐合成报告.docx(17页珍藏版)》请在冰点文库上搜索。
matlab音乐合成报告
MATLAB音乐合成报告
姓名:
学号:
专业:
集成电路设计与集成系统
课程名称:
信号与系统
学院:
通信工程学院
目录
一、本实验及背景介绍
二、设计过程
1、没加谐波的初步设计
2、加谐波后的分析
三、实验感悟
一、本实验及背景介绍
从物理的角度看,音乐是不同频率,不同时长声波的组合,声波的频率表示不同的音调,声波的时长反映不同的节奏,根据该原理,将不同频率,不同时长的声波进行有序组合,则能成为音乐,利用MATLAB对不同频路信号的组合及分析功能,能够进行简单的音乐合成。
本次音乐合成所作曲目为《粉红的记忆》简谱如下:
二、设计过程
1、没加谐波的初步设计
原程序如下
fs=8000;
a=349.23;
b=392.00;
c=440.00;
d=439.88;
e=523.25;
f=587.33;
a1=1046.5;
f0=239.66;
e0=261.63;
a0=1396.9;
b1=1174.7;
f=[1550.0a1568.0293.66e1760.01568.01396.9f1396.9eeeeefacbabafaae0af0e0af0e0abcbabeeeeefeceffa1fefbbafbbafefabaeeefe0a1feeefe0eeefafececbce0bbbcb0babbaf0afe0abceffa1feee0fa1fa1fef0efcecbba1a0];
%各个音乐对应的频率
time=fs*[0.375,0.125,0.375,0.125,0.25,0.25,1/8,1/8,0.25,1,1/4,1/4,1/4,1/4,0.25,1/8,1/10,1/4,1/4,1/4,0.125,0.125,1/4,1/4,0.125,0.375,0.01,1/2,1/4,1/4,1/2,1/4,1/4,1/4,1/4,1/8,1/8,1/4,1,1/4,1/4,1/4,1/4,1/4,1/8,1/8,1/4,1/4,1/4,1/8,1/8,1/4,1/4,1,0.58,1/6,0.125,1/4,0.55,1/6,1/7,1/4,1/4,1/4,1/4,1/4,1,0.475,0.125,1/4,1/4,1/4,1/4,1/4,0.25,0.405,1/8,0.17,1/8,1/2,0.475,0.126,0.25,1/4,0.512,0.31,1/4,1/4,1/8,1/8,1/4,1/4,0.375,0.125,0.375,0.125,1/4,1/4,1/4,1/4,1/4,1/4,0.125,1/4,0.125,1/4,1/4,1/8,0.375,0.375,1/8,1/4,1/4,1/4,1/4,1/4,1/4,1/4,1,1/2,1/2,1/8,0.375,1/8,0.375,1/4,1/4,1/2,0.55,0.215,1/8,1/8,0.375,1/4,1/4,1/8,0.375,0.25,1/4];
%各个音乐的抽样点数
N=length(time);%总的抽样点数
east=zeros(1,N);%存储抽样点
n=1;
fornum=1:
N%利用for循环产生抽样数据,num表示音乐的编号
t=1/fs:
1/fs:
(time(num))/fs;%产生第num个音乐的抽样点
east(n:
n+time(num)-1)=sin(2*pi*f(num)*t);%给第num个音乐加包络
n=n+time(num);
end
sound(2*east,8000);
plot(east);
所的波形如下
在刚才的音乐中听到有“啪”的杂声,下面通过加包络来消噪音。
最简单的包络为指数衰减。
最简单的指数衰减是对每个音乘以
因子,在实验中首先加的是
的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完全消除,播放的音乐效果不是很好,感觉音乐起伏性不强。
于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。
在1.1程序的基础上加上包络,编写如下程序:
fs=8000;
a=349.23;
b=392.00;
c=440.00;
d=439.88;
e=523.25;
f=587.33;
a1=1046.5;
f0=239.66;
e0=261.63;
a0=1396.9;
b1=1174.7;
f=[1550.0a1568.0293.66e1760.01568.01396.9f1396.9eeeeefacbabafaae0af0e0af0e0abcbabeeeeefeceffa1fefbbafbbafefabaeeefe0a1feeefe0eeefafececbce0bbbcb0babbaf0afe0abceffa1feee0fa1fa1fef0efcecbba1a0];
%各个音乐对应的频率
time=fs*[0.375,0.125,0.375,0.125,0.25,0.25,1/8,1/8,0.25,1,1/4,1/4,1/4,1/4,0.25,1/8,1/10,1/4,1/4,1/4,0.125,0.125,1/4,1/4,0.125,0.375,0.01,1/2,1/4,1/4,1/2,1/4,1/4,1/4,1/4,1/8,1/8,1/4,1,1/4,1/4,1/4,1/4,1/4,1/8,1/8,1/4,1/4,1/4,1/8,1/8,1/4,1/4,1,0.58,1/6,0.125,1/4,0.55,1/6,1/7,1/4,1/4,1/4,1/4,1/4,1,0.475,0.125,1/4,1/4,1/4,1/4,1/4,0.25,0.405,1/8,0.17,1/8,1/2,0.475,0.126,0.25,1/4,0.512,0.31,1/4,1/4,1/8,1/8,1/4,1/4,0.375,0.125,0.375,0.125,1/4,1/4,1/4,1/4,1/4,1/4,0.125,1/4,0.125,1/4,1/4,1/8,0.375,0.375,1/8,1/4,1/4,1/4,1/4,1/4,1/4,1/4,1,1/2,1/2,1/8,0.375,1/8,0.375,1/4,1/4,1/2,0.55,0.215,1/8,1/8,0.375,1/4,1/4,1/8,0.375,0.25,1/4];
%各个音乐的抽样点数
N=length(time);%总的抽样点数
east=zeros(1,N);%存储抽样点
n=1;
G=zeros(1,time(num));%G为存储包络数据的向量
G(1:
time(num))=exp(1:
(-1/time(num)):
1/8000);
%产生包络点
east(n:
n+time(num)-1)=sin(2*pi*f(num)*t).*G(1:
time(num));
sound(100000*east,8000);
plot(east);
播放后可以听出噪音已经消除,同时因为不同时长的乐音衰减的快慢不一样,音乐听起来更有起伏感,下图是加包络后的east图像。
更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶段。
由上图可以看出这个包络是四段直线段构成的,因此只要确定了每段线段的端点,即可用端点数据写出直线方程,因为直线方程可以用通式写出(我用的是斜截式),因此这段包络可以用简单的循环来完成。
例如认为包络线上的数据如下图所示:
据此在MATLAB中编写如下程序:
fs=8000;
a=349.23;
b=392.00;
c=440.00;
d=439.88;
e=523.25;
f=587.33;
a1=1046.5;
f0=239.66;
e0=261.63;
a0=1396.9;
b1=1174.7;
f=[1550.0a1568.0293.66e1760.01568.01396.9f1396.9eeeeefacbabafaae0af0e0af0e0abcbabeeeeefeceffa1fefbbafbbafefabaeeefe0a1feeefe0eeefafececbce0bbbcb0babbaf0afe0abceffa1feee0fa1fa1fef0efcecbba1a0];
%各个音乐对应的频率
time=fs*[0.375,0.125,0.375,0.125,0.25,0.25,1/8,1/8,0.25,1,1/4,1/4,1/4,1/4,0.25,1/8,1/10,1/4,1/4,1/4,0.125,0.125,1/4,1/4,0.125,0.375,0.01,1/2,1/4,1/4,1/2,1/4,1/4,1/4,1/4,1/8,1/8,1/4,1,1/4,1/4,1/4,1/4,1/4,1/8,1/8,1/4,1/4,1/4,1/8,1/8,1/4,1/4,1,0.58,1/6,0.125,1/4,0.55,1/6,1/7,1/4,1/4,1/4,1/4,1/4,1,0.475,0.125,1/4,1/4,1/4,1/4,1/4,0.25,0.405,1/8,0.17,1/8,1/2,0.475,0.126,0.25,1/4,0.512,0.31,1/4,1/4,1/8,1/8,1/4,1/4,0.375,0.125,0.375,0.125,1/4,1/4,1/4,1/4,1/4,1/4,0.125,1/4,0.125,1/4,1/4,1/8,0.375,0.375,1/8,1/4,1/4,1/4,1/4,1/4,1/4,1/4,1,1/2,1/2,1/8,0.375,1/8,0.375,1/4,1/4,1/2,0.55,0.215,1/8,1/8,0.375,1/4,1/4,1/8,0.375,0.25,1/4];
%各个音乐的抽样点数
N=length(time);%总的抽样点数
east=zeros(1,N);%存储抽样点
n=1;
fornum=1:
N%利用for循环产生抽样数据,num表示音乐的编号
t=1/fs:
1/fs:
(time(num))/fs;%产生第num个音乐的抽样点
P=zeros(1,time(num));%存储包络线数量
L=(time(num))*[0333/1000333/50011];%包络线端点对应的横坐标
T=[02.5210.50.70.2];%包络线端点对应的纵坐标
s=1;
b=1:
time(num);%产生包络线抽样点
fork=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);
end
m=[105/32];%波形幅值矩阵
ss=zeros(1,length(t));
fori=1:
length(m)
ss=(ss+m(i)*sin(2*i*pi*f(num)*t))*0.999;%加谐波
end
east(n:
n+time(num)-1)=ss.*P(1:
time(num));%给第num个音乐加包络
n=n+time(num);
end
sound(2*east,8000);
plot(east);
2、加谐波后的分析
为了分析wave2proc的基波和谐波,可以对wave2proc进行傅里叶变换,得到wave2proc的幅值谱,在频谱图上的第一个突出的波峰对应的频率即为wave2proc基频,利用helpfft学习了MATLAB中快速傅里叶变换函数fft的用法,
为了分析wave2proc的基波和谐波,可以对wave2proc进行傅里叶变换,得到wave2proc的幅值谱,在频谱图上的第一个突出的波峰对应的频率即为wave2proc基频,利用helpfft学习了MATLAB中快速傅里叶变换函数fft的用法,编写了如下程序:
运行后得到的结果为
虽然从图上可以大概看出包络,但是非常不明显,假如提高频域的抽样频率,例如将抽样频率由NFFT=2^nextpow2(length(wave2proc))改为
NFFT=8^nextpow2(length(wave2proc))得到的结果如下;
由图可见虽然频域的抽样频率提高了很多,但是得到的包络依然不精确,这是因为wave2proc是周期函数,但是现在的wave2proc只有243个数据点,并不能非常明显的体现出其周期性,因此它的幅值谱的离散化程度不高,虽然提高了频域的抽样频率,但是wave2proc数据点的周期性并没有增加,所以要显示出离散化程度高的幅值谱,就要增加wave2proc的周期性,即让wave2proc在时域重复多次后在进行傅里叶变换。
利用repmat函数可以将wave2proc在时域重复。
将程序修改为
sound_2_3.m
运行后得到的结果为
虽然从图上可以大概看出包络,但是非常不明显,假如提高频域的抽样频率,例如将抽样频率由NFFT=2^nextpow2(length(wave2proc))改为
NFFT=8^nextpow2(length(wave2proc))得到的结果如下;
由图可见虽然频域的抽样频率提高了很多,但是得到的包络依然不精确,这是因为wave2proc是周期函数,但是现在的wave2proc只有243个数据点,并不能非常明显的体现出其周期性,因此它的幅值谱的离散化程度不高,虽然提高了频域的抽样频率,但是wave2proc数据点的周期性并没有增加,所以要显示出离散化程度高的幅值谱,就要增加wave2proc的周期性,即让wave2proc在时域重复多次后在进行傅里叶变换。
利用repmat函数可以将wave2proc在时域重复。
将程序修改为
fs=8000;
a=349.23;
b=392.00;
c=440.00;
d=439.88;
e=523.25;
f=587.33;
a1=1046.5;
f0=239.66;
e0=261.63;
a0=1396.9;
b1=1174.7;
f=[1550.0a1568.0293.66e1760.01568.01396.9f1396.9eeeeefacbabafaae0af0e0af0e0abcbabeeeeefeceffa1fefbbafbbafefabaeeefe0a1feeefe0eeefafececbce0bbbcb0babbaf0afe0abceffa1feee0fa1fa1fef0efcecbba1a0];
%¸÷¸öÒôÀÖ¶ÔÓ¦µÄƵÂÊ
time=fs*[0.375,0.125,0.375,0.125,0.25,0.25,1/8,1/8,0.25,1,1/4,1/4,1/4,1/4,0.25,1/8,1/10,1/4,1/4,1/4,0.125,0.125,1/4,1/4,0.125,0.375,0.01,1/2,1/4,1/4,1/2,1/4,1/4,1/4,1/4,1/8,1/8,1/4,1,1/4,1/4,1/4,1/4,1/4,1/8,1/8,1/4,1/4,1/4,1/8,1/8,1/4,1/4,1,0.58,1/6,0.125,1/4,0.55,1/6,1/7,1/4,1/4,1/4,1/4,1/4,1,0.475,0.125,1/4,1/4,1/4,1/4,1/4,0.25,0.405,1/8,0.17,1/8,1/2,0.475,0.126,0.25,1/4,0.512,0.31,1/4,1/4,1/8,1/8,1/4,1/4,0.375,0.125,0.375,0.125,1/4,1/4,1/4,1/4,1/4,1/4,0.125,1/4,0.125,1/4,1/4,1/8,0.375,0.375,1/8,1/4,1/4,1/4,1/4,1/4,1/4,1/4,1,1/2,1/2,1/8,0.375,1/8,0.375,1/4,1/4,1/2,0.55,0.215,1/8,1/8,0.375,1/4,1/4,1/8,0.375,0.25,1/4];
%¸÷¸öÒôÀֵijéÑùµãÊý%³éÑùƵÂÊ
%¸÷¸öÀÖÒô¶ÔÓ¦µÄƵÂÊ
N=length(time);%Õâ¶ÎÒôÀÖµÄ×ܳéÑùµãÊý
east=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/5333/1000333/5001];
%°üÂçÏ߶˵ã¶ÔÓ¦µÄºá×ø±ê
T=[01.5110];%°üÂçÏ߶˵ã¶ÔÓ¦µÄ×Ý×ø±ê
s=1;
b=1:
1:
time(num);%²úÉú°üÂçÏß³éÑùµã
fork=1:
4P(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);
end
m=[10.30714969300.0572986020.07538638700;...
10.30714969300.0572986020.07538638700;...
10.2058383240.15708081300.08891702200.06597751;...
10.1086165950.0690723560000;...
10.2757865390.17581224400.05603520200;...
10.2757865390.17581224400.05603520200;...
10.52030544000.052802710.095940260;...
10.1086165950.0690723560000];%²¨ÐηùÖµ¾ØÕó
ss=zeros(1,length(t));
fori=1:
N
ss=ss+m(num,i)*sin(2*i*pi*f(num)*t);%¼Óг²¨
end
east(n:
n+time(num)-1)=ss.*P(1:
time(num));
%¸øµÚnum¸öÀÖÒô¼ÓÉÏ°üÂç
n=n+time(num);
end
sound(2*east,8000);
plot(east);
运行后可以听出声音更加真实了。
波形图如下:
三、实验感悟
本次音乐实验呈现在我们面前的是一个全新的问题,初次看到问题时,感觉一头雾水,无从下手,甚至连要求都没能完全理解到底是要干什么。
但是在对问题反复研读即便后大概明白了到底要完成写什么任务,但是新的问题有来了,因为虽然知道了要干什么,但是对于怎么干还是一头雾水。
在经过努力的查阅资料后大致知道了一些方法。
而MATLAB中的帮助文件对我提供了很大的帮助,想很多函数之前并没有接触过,都是通过帮助文件学习了它们的使用方法。
同时在遇到问题时跟同学讨论、交流,也产生了不少好想法。
本实验不仅考验了我们也让我们学会了与同学们的相互学习,相互帮助,在错误中成长。
上自己不仅在理论上更加理解频谱,也更加额外的学习了软件的使用!
!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 音乐 合成 报告