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

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

实验方案

重难点技术.


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频率的前一半图像,从而得到相关的频域波形。


实现代码:




实验效果:




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


2.回响效果.


相关原理:


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


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


具体步骤如下:


1).暂停当前音乐;


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


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


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


5).继续当前播放。


实现代码:




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倍频的振幅,最后通过归一化得到该乐器的泛音列。


实现代码:


得到频域特性:



求泛音列:



实验效果:


(1)频域图形:



(2)所求泛音列:




4.回响效果


相关原理:

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

1. 具体步骤如下:

2. 暂停当前音乐;

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

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

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

6. 继续当前播放。



5.人声消除

相关原理:

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

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

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

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

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

目录
相关文章
|
11天前
|
供应链 算法 新能源
高比例可再生能源电力系统的调峰成本量化与分摊模型(Matlab代码实现)
高比例可再生能源电力系统的调峰成本量化与分摊模型(Matlab代码实现)
|
10天前
|
数据采集 算法 安全
多接地配电系统的基于PMU的系统状态估计(Matlab代码实现)
多接地配电系统的基于PMU的系统状态估计(Matlab代码实现)
|
12天前
|
安全 调度
【火电机组、风能、储能】高比例风电电力系统储能运行及配置分析(Matlab代码实现)
【火电机组、风能、储能】高比例风电电力系统储能运行及配置分析(Matlab代码实现)
|
12天前
|
机器学习/深度学习 数据采集 算法
【信号识别】识别半监督粗糙模糊拉普拉斯特征图(Matlab代码实现)
【信号识别】识别半监督粗糙模糊拉普拉斯特征图(Matlab代码实现)
|
11天前
|
机器学习/深度学习 算法 新能源
【无功优化】“碳中和”目标下电气互联系统有功-无功协同优化模型(Matlab代码实现)
【无功优化】“碳中和”目标下电气互联系统有功-无功协同优化模型(Matlab代码实现)
|
12天前
|
供应链 算法 安全
考虑电能交互的冷热电区域多微网系统双层多场景协同优化配置(Matlab代码实现)
考虑电能交互的冷热电区域多微网系统双层多场景协同优化配置(Matlab代码实现)
|
11天前
|
算法
【电力系统潮流】5节点系统潮流计算-牛拉法和PQ分解法(Matlab代代码实现)
【电力系统潮流】5节点系统潮流计算-牛拉法和PQ分解法(Matlab代代码实现)
133 3
|
12天前
|
机器学习/深度学习 算法 语音技术
【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离(Matlab代码实现)
【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离(Matlab代码实现)
|
12天前
|
机器学习/深度学习 数据采集 算法
【人脸识别】基于PCA的人脸识别系统(Matlab代码实现)
【人脸识别】基于PCA的人脸识别系统(Matlab代码实现)
|
12天前
|
机器学习/深度学习 自然语言处理 算法
基于改进鲸鱼优化算法的微网系统能量优化管理研究(Matlab代码实现)
基于改进鲸鱼优化算法的微网系统能量优化管理研究(Matlab代码实现)

热门文章

最新文章