使用matlab语言,对音乐进行简单的频域上的分析,提取基频、音高,并进行简单的音乐合成。
信号与系统
- 综合实验之音乐合成
(1) 请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的
频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。请用sound 函数播放每个乐音,听一听音调是否正确。最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何? 代码如下: f =8000;
t2=[0:1/f:1]; t4=[0:1/f:0.5]; t8=[0:1/f:0.25]; omg5=523.35; omg6=587.33; omg2=392; omg1=349.23; omg6l=293.66;
m1=sin(2*pi*omg5*t4); m2=sin(2*pi*omg5*t8); m3=sin(2*pi*omg6*t8); m4=sin(2*pi*omg2*t2); m6=sin(2*pi*omg1*t4); m7=sin(2*pi*omg1*t8); m8=sin(2*pi*omg6l*t8); m9=sin(2*pi*omg2*t2);
m=[m1 m2 m3 m4 m6 m7 m8 m9]; sound(m);
听的时候发现在相邻乐音之间有杂音,这是由于相位不连续造成的。
(2) 你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不
连续产生了高频分量。这种噪声严重影响合成音乐的质量,丧失真实感。为了消除它,我们可以用图1.5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。此外建议用指数衰减的包络来表示。 我采用的是指数衰减的包络。 代码如下: f =8000;
t2=[0:1/f:1]; t4=[0:1/f:0.5]; t8=[0:1/f:0.25]; omg5=523.35; omg6=587.33; omg2=392;