如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
2009011109_师尚伟MATLAB实验报告――实验一、音乐合成一、简单的合成音乐1、请根据《东方红》第一小节的简谱和“十二平均律”计算出该小节中各个乐音的频率,在MATLAB中生成幅度为1,抽样频率为8kHz的正弦信号表示这些语音。请用sound函数播放每个乐音,听一听音调是否正确。最后用这一系列乐音信号拼出《东方红》的第一小节,注意控制每个乐音持续的时间要符合节拍,用sound播放你合成的音乐,听起来感觉如何?解:《东方红》为F调,即1=F,因此以F为基点可以确定其他各音符的频率如下:6D293.667E329.631F349.232G3923A4404B493.885C+523.256D+587.33用特定频率的正弦波即可描述不同的乐音,抽样频率为8KHz,脚本文件如下:closeall;clearall;clc;t=1:8000;%二拍即1S时间M1=sin(2*pi*t*220*2.^(8/12)/8000);M2=sin(2*pi*t*220*2.^(10/12)/8000);M3=sin(2*pi*t*220*2.^(12/12)/8000);M4=sin(2*pi*t*220*2.^(13/12)/8000);M5=sin(2*pi*t*220*2.^(15/12)/8000);M6=sin(2*pi*t*220*2.^(17/12)/8000);M7=sin(2*pi*t*220*2.^(19/12)/8000);M6_=sin(2*pi*t*220*2.^(5/12)/8000);%s=[M1,M2,M3,M4,M5,M6,M7,M7,M6,M5,M4,M3,M2,M1];%sound(s,8000);DFH=[M5(1:4000),M5(1:2000),M6(1:2000),M2(1:4000),zeros(1,4000),M1(1:4000),M1(1:2000),M6_(1:2000),M2(1:4000),zeros(1,4000)];sound(DFH,8000);生成乐音的核心代码是sin(2*pi*t*f/8000),只要将f换成乐音的频率就可以实现长度为1s的乐音。8000表示抽样频率,t表示抽样时间。在实际编程时,各乐音的频率并没有用已有的结果,而是根据音节之间差半音还是全音确定频率,这样可以减小误差。播放后,各音节比较准确,但感觉声音很单一、枯燥,不是乐器发出的声音。并且各个音节之间由于衔接不好有爆音,声音不连贯。2、你一定注意到(1)中的乐音中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。这种噪声严重影响合成音乐的质量,丧失真实感。为了消除它,我们可以用包络(包络形状见于教材p75图6.5)修正每个乐音,以保证在乐音的邻接出信号幅度为零。最简单的,也可以用指数衰减的包络来表示。解:修正的包络可以使用指数衰减或书上的包络形状,也可以用其他的形状,只要包络的形状总体呈现下降的趋势即可。本题采用书上的包络,先有一个短暂的上升,然后下降到稳定,2009011109_师尚伟最后衰减到0。用包络加权后的音乐波形如下:可见每一个音节都是包络的形状,这样就保证了各音节之间不会出现爆音。脚本文件代码如下:closeall;clearall;clc;t=1:8000;%二拍即一秒时间s=[(0:0.001:1)';1-(0:0.0005:0.5)';0.5*ones(3497,1);1-(0.5:0.0002:1)']';M1=sin(2*pi*t*220*2.^(8/12)/8000);M2=sin(2*pi*t*220*2.^(10/12)/8000);M3=sin(2*pi*t*220*2.^(12/12)/8000);M4=sin(2*pi*t*220*2.^(13/12)/8000);M5=sin(2*pi*t*220*2.^(15/12)/8000);M6=sin(2*pi*t*220*2.^(17/12)/8000);M7=sin(2*pi*t*220*2.^(19/12)/8000);M6_=sin(2*pi*t*220*2.^(5/12)/8000);%s=[M1,M2,M3,M4,M5,M6,M7,M7,M6,M5,M4,M3,M2,M1];%用于测试音调是否准确%sound(s,8000);DFH=[M5(1:4000).*s(1:2:8000),M5(1:2000).*s(1:4:8000),M6(1:2000).*s(1:4:8000),M2(1:8000).*s,M1(1:4000).*s(1:2:8000),M1(1:2000).*s(1:4:8000),M6_(1:2000