zl程序教程

您现在的位置是:首页 >  其他

当前栏目

《信号与系统》实验-使用 MATLAB 进行生成数字音乐、生成乐器音乐、音乐处理与添加音乐特效(题解)

2023-03-14 22:41:43 时间

实验方案

image

重难点技术.


1.基波频率和音高的推算


实现思路:

乐音是指发音物体有规律地振动而产生的具有固定音高的音。基波频率是指声音中使声音达到最强的特定的最低频率。音乐是基波频率和谐波频率合成的,从音乐中首先要准确提取出每个乐音的基波频率,以便推算其他各个乐音的相对的音高频率。

比如标准F调的do音基波频率是174.610Hz,按照十二平均律的算法112i+1i2 ff=×,7个乐音频率对应基波频率的倍数依次是:1、21/6、21/3、25/12、 27/12、23/4、211/12、2,即174.610Hz、195.993Hz、219.994Hz、233.076Hz、261.619Hz、293.657Hz、329.619Hz。


1.通过FFT得到频域波形.


相关原理:


利用傅里叶分析(DFT)可以对频率构成、频率宽度等特征进行分析。


因为计算机只能处理离散的有限 长的序列数据,所以计算机进行DFT时使用的输入值是N个具体的采样值,也就是时域的信号值,输 入采样点的数量N决定了转换的计算规模。


而快速傅里叶变换(FFT)是离 散傅里叶变换DFT的快速算法,可以加快计算机的处理速度。根据采样定理, FFT能分辨的最高频率为采样频率的一半(即Nyquist频率),函数FFT返回值是以Nyqusit 频率为轴对称的。我们通过截取结果中小于等于Nyquist频率的前一半图像,从而得到相关的频域波形。


实现代码:


image



实验效果:


image



可见,信号经过FFT后的频谱图可以采用N/2+1个点的信息, x 轴是对应于时间序列的频率序列, x 轴最大的频率是FS/2, y 轴是幅值,是FFT后所得复数的模。


2.回响效果.


相关原理:


回响的说明:即对音乐信号进行“延时”+“叠加”。


(注:人耳能分辨出的声音延迟至少是0.1s,因此,最小延迟量不能小于0.1s。)


具体步骤如下:


1).暂停当前音乐;


2).从下拉菜单中获取所需延迟的采样点数num;


3).利用矩阵置零产生延迟信号z;


4).将原始信号y与延迟信号z相加,得到回响信号;


5).继续当前播放。


实现代码:


image



3.基波频率和音高的推算 .


实现思路:


乐音是指发音物体有规律地振动而产生的具有固定音高的音。基波频率是指声音中使声音达到最强的特定的最低频率。音乐是基波频率和谐波频率合成的,从音乐中首先要准确提取出每个乐音的基波频率,以便推算其他各个乐音的相对的音高频率。


比如标准 F调的do音基波频率是174.61Hz, 按照十二平均律的算法fi+1=fi*2 (1/12),7个乐音频率对应基波频率的倍数依次是:1、21/6、21/3、25/12、 27/12、23/4、211/12、2,即174.610、195.993、219.994、233.076、261.619、293.657、329.619。


3.通过单音节频域特性求泛音列.


相关原理:


乐器的音高通常和谐波震荡有关。譬如弦乐器或管乐器可对空气震荡以产生声音,并且可同时以不同的频率震荡,以发出不同频率的声音。而根据驻波的原理可知这些频率大多数呈现倍数关系,而这些不同频率的声波即组成泛音列。


我们先对时域信号进行傅里叶变换,得出频域特性,再通过设置最高频率和开窗的宽度,得到各个N倍频的振幅,最后通过归一化得到该乐器的泛音列。


实现代码:


得到频域特性:


image


求泛音列:


image


实验效果:


(1)频域图形:


image


(2)所求泛音列:


image



4.回响效果


相关原理:

回响的说明:即对音乐信号进行“延时”+“叠加”。(注:人耳能分辨出的声音延迟至少是0.1s,因此,最小延迟量不能小于0.1s。)

1. 具体步骤如下:

2. 暂停当前音乐;

3. 从下拉菜单中获取所需延迟的采样点数num;

4. 利用矩阵置零产生延迟信号z;

5. 将原始信号y与延迟信号z相加,得到回响信号;

6. 继续当前播放。


image


5.人声消除

相关原理:

首先,背景音乐一般是双声道的,也就是说两个声道的相关数据不同,而人声音频数据一部分是单声道的,也就是人声一部分音频数据平均分配到两个声道。根据这一点,我们可以使用声道数据作差抵消来达到一定的人声消除效果,而且对伴奏造成的影响也较小。

然后,我们可以利用MALAB的滤波器来进行人声频带的滤除进一步提升人声消除效果。而且可以轻松得到很高阶的滤波器。

涉及到的主要函数为fir1和filter。

fir1是基于窗口的滤波器函数,传入参数依次为滤波器阶数以及通带频率范围,返回滤波器系数,此处为了达到消除人声效果设计了相关的参数。

filter使用是y =filter(b,a,x) ,使用由分子和分母系数 b 和 a 定义的有理传递函数 对输入数据 x 进行一阶滤波,返回滤波后的音频数据。

image