当前课程知识点:计算机音乐 > 第六章 高音跟踪 > 6.3 频域音高跟踪 > 频域音高跟踪
同学们大家好
这一节我们将会介绍频域的音高跟踪算法
由于频域的角度
特别是从频谱的幅值的角度
跟人耳的感知更加的接近
因此频域的算法
也是在实际的应用当中更加常见的算法
在时域的算法当中
我们需要依赖一个假设
就是音频的信号是周期的信号
这样的话我们才可以通过
基频的周期来定义音高
前面的实验当中我们也看到在
现实的音乐世界当中
信号是很难严格地
遵循周期性这样的假设的
那么这时候周期的概念就会变得非常的模糊
在频域当中音高的定义就会更加的清晰一点
一般来说我们首先会舍弃相位的特征
因为人耳对相位并不是特别敏感
也就是说我们只要频谱的能量
除此之外
因为人耳对能量的
敏感度是对数敏感的
因此我们首先要求一下对数
除此之外
我们还需要排除杂音的干扰
也就是说我们需要对频谱球包络
那么我们可以通过平滑滤波的方式
去获得整个频谱的轮廓
那么得到轮廓之后
周期就比较好定义了
我们假设频谱的峰值是成
整数倍分布的
因此我们只需要去求两个峰值之间的距离
这个距离就是周期了
在频域当中一种高效可行的方法就是
谐波谱法
那么利用整数倍峰值的假设
我们可以对信号的频谱进行两倍的下采样
第二个峰值
那么在两倍下采样的过程中
就会移到原来第一个风水位置
如果进行三倍的下采样
那么第三个峰值就会移到
第一个风水位置
如此进行
然后我们把这些下采样的结果
全部的都加起来
因为各阶的泛音
都被依次的移到跟主音一样的位置
虽然做完这些叠加之后
在主频的位置上将会产生一个最大值
那么我们只需要去提取这个最大值
就可以知道主频的数值
接下来我们就来测试一下
谐波普方法的音高跟踪
那么首先我们要做检采样
需要写一个检采样的函数
检采样的方法跟我们
第二章的时候讲食欲音频处理的时候的
检采样方法是完全一样
采用线性差值的办法
之后我们要写一个
谐波普的函数HPS
那么等于说我们
首先有一个长度跟原来的
频谱长度是一样的一个全零的向量
然后每一次把
剪采样之后的信号叠加上去
所以我们在剪采样的过程中
我们使用了补零的方法
来保证做完剪采样之后
它的向量的长度跟原来是一样的
好 那么我们把各阶剪采样的
向量的都叠加在一起
然后进行输出
现在我们可以用来做测试了
我们先读取一下
我们在前面做ACF用的测试的音频
test
ACF点waif
并且我们可以去显示一下它的频谱
X
XF
卖我们只要它的扶植
不要它的相位
所以我们用abs去求一下他的幅值
那么
我们读完之后还是要
不要忘记做标准化的工作
因为做完这标准化之后
它的值预测不会超过整数的阈值
好 然后我们对做完傅列变换之后的
数据进行提取它的幅值
因为傅里叶变换它是一个对称的频谱
我们只需要看一半就行了
所以我们只拿他一半的频谱
只拿他一半的频谱
这样话就可以拿他一半的频谱
最后我们再给他
先把频谱给显示出来
这叫test
ECF
好我们拿到频谱图的能量之后
主要目标是要把
第一个峰值所对应的频率给进行输出
那么按理说在这个图像里面
第一个峰值已经是
整个频谱图里面的最大值的
所以按理说我们去求这个
a max
就是把它最大值所对应的
下标进行输出就已经完成这任务了
但在有些时候
第一个峰值它并不是最大值
有可能跟第二个峰值不相上下
甚至比第二个峰值要低一点
这时候我们就需要用谐波谱法
那么接下来我们就把谐波谱法给加上
计算一下谐波普
并且我们可以把谐波普进行一个输出
运行一下
我们用了是五阶的谐波普
我们可以看到基本上
第一个峰值的位置就
被加强了这样话我们
无论它的峰值最大值在第二个峰值
第三峰值在第四个峰值
我们都能够跌到
第一个峰值的位置
这样的话就可以把第一个方式所对应的
频率可以进行输出
注意
因为我们现在的精度
并不是特别高了
所以如果更多次的谐波谱
我可能第一个峰值位置
就在一这个位置被重复计算很多次
这样他会把一这个位置进行输出
所以这不是我们想要的结果
所以我们一般来说
用5到6阶的谐波普就够了
下面我们就去把最大值的位置进行输出
我们只要在谐波谱的基础之上去
求 ar gmax
也就是去求它的最大值所对应的位置
那么我们先求到那个位置X
或者说I dx
等于
np.ar gmax h它所对应的位置
那么我们还需要去换算成频率
那么也就是说我们直接用Pitch等于
用这个值
乘以采样率
再除以X的长度
正好就能得到频率值
这时候我们进行一个输出
运行下
我们可以看到
得到结果是418.467
那么这个数值跟440已经比较接近了
中间当然有一些计算的误差
接下来我们来尝试一下
道谱的方法
那么在风蚀成整数倍分布的假设之下
频谱的幅值可以看成是一个周期的函数
因为它的峰值
都是成整数倍分布的
所以每个峰的宽度都是一样
我们在频域的角度
我们可以把这个信号看成一个
类似周期的信号
只不过它峰值的高度可能会有些变化
这样话我们希望通过
傅里叶变换的方法
把在频域的基础之上
我们只保留了幅值
想去计算出它在频域里面的周期
那么具体来说
我们可以同样地进行分窗
然后去计算频谱
也就是说我们要进行短时傅里叶变换
那么在这个过程中
我们会舍弃相位的影响
求得扶植的对数
那么接下来第三步
我们需要去计算傅里叶变换的
逆变换
得到整个到普
也就是我们通过
傅里叶变换求对数
然后再求傅里叶逆变换
最后我们需要在到普的曲线里面
去求除了前几个采样点以外的最大值
因为根据道谱的定义
前几个点肯定是一个最大值
并且不是我们想要的最大值
那么我们用python程序
可以非常容易的实现倒谱的算法
接下我们就简单实现一下
计算到普的程序
首先我们当然还是去读取刚才的这段
用来检测音高的
声音文件testacf.wav
那么当然也需要做一个标准化
可以避免这个值域溢出
然后首先我们是先去计算它的
傅里叶的频谱
那么也就是spectrum
我们去用傅里叶变换去计算它的频谱
接下来按照道普的定义
ceps 是这个频谱求完幅值
spectrum求完幅值之后
要求log
求完log之后再去求
傅里叶逆变换
fft.fft
这样就完成了np的计算
计算完np这个之后
我们输出一下这np plt
south
plt.show
运行一下看看
好那么我们看到
它有个提示
说我们最后的结果
有虚数部分
所以其实我们在这里输出之前
是需要做一个实数化的
等于说我们要对这个值取一个十步
在输出它就不会有
好我们现在看到按照np的定义
它在零的这个地方
它一定会取到最大值
所以我们这两个最大值
是不需要的
所以我们其实要拿的是最大值
所以我们在计算最大值的时候
需要把前面的两部分去掉
那么去掉这两部分的时候
再去取一个最大值
所以其实我们只需要取
一半的频谱
因为按照傅里叶变换的频谱
它是对称的
我们只需要拿一半的频谱并且
把前面的一小部分给去掉
就可以了
所以我们在计算最大值的时候
我们是需要做一个处理
就是ceps
等于cpes
我们去掉前面的十个采样点
然后我们只需要拿一半就可以了
L烟
一半就可以了
这时候我们去把最大值给算出来
最大值所在的下标给算出来arg max
CEPS
然后我们可以通过换算公式得到ph
等于
FS除以这个值
但现在这个值应该是扣掉十个采样点
所以你还得把这十个采样点
给加回去才能得到正确的数值
然后我们运行下
print pitch
运行下去的结果
好 这样我们看到最后得到436
是比较接近440的大小
可能中间有点误差
如果我们在计算过程中
更加精细一点
应该是可以得到440这个结果
频域的音高跟踪算法
对于比较符合和谐乐音的声音来说
也就是符合峰值成整数倍分布的
这样的乐音来说
通常可以获得比较稳定的结果
但是我们在
计算过程中需要大量的进行傅里叶变换
或者傅立叶逆变换
所以一般来说计算量是比较大的
具体来说
我们需要使用10月算法
还是使用评阅算法
又或者是结合起来使用
那么需要根据具体的应用来决定
那么有关频域的音高跟踪算法我们就介绍到这里
接下来让我们以K歌评分
作为应用来实践下音高跟踪
-欢迎辞
-1.1 计算机音乐导言
--计算机音乐导言
-1.2 计算机音乐课程主要内容
-1.3计算机音乐课程资源
-1.4 音乐的基本表达
--音乐的基本表达
-第一章作业
-2.1时域音频处理概述
--时域音频处理概述
-2.2 分窗处理1:OLA叠放
-2.3 分窗处理2:音量计算
-2.4 端点检测
--端点检测
-2.5 振幅包络
--振幅包络
-2.6 音频信号相乘
--音频信号相乘
-2.7 环形调制
--环形调制
-2.8 频率调制
--频率调制
-2.9 频率调制在音乐上的应用
-第二章作业
-3.1 频谱概述
--频谱概述
-3.2 傅里叶变换
--傅里叶变换
-3.3 短时傅里叶变换
--短时傅里叶变换
-3.4 加法合成
--加法合成
-3.5 线性滤波器
--线性滤波器
-3.6 京剧锣鼓经分析
--京剧锣鼓经分析
-第三章作业
-4.1 音色合成概述
--音色合成概述
-4.2 质点弹簧阻尼模型
--质点弹簧阻尼模型
-4.3 双线性滤波器
--双线性滤波器
-4.4 Modal合成
--Modal合成
-第四章测试
-5.1 一维振动模型概述
--一维振动模型概述
-5.2 弦振动模型
--弦振动模型
-5.3 达朗贝尔的行波解
--达朗贝尔的行波解
-5.4 梳状滤波器
--梳状滤波器
-5.5 Karplus Strong算法
-5.6 管状气鸣乐器模型
--管状气鸣乐器模型
-第五章作业
-6.1 音高跟踪概述
--音高跟踪
-6.2 时域音高跟踪
--时域音高跟踪
-6.3 频域音高跟踪
--频域音高跟踪
-6.4 K歌评分
--K歌评分
-第六章作业
-7.1 音频同步概述
--音频同步概述
-7.2 音乐特征提取 CQT
-7.3 音乐特征提取 Chroma
-7.4 动态时间规划概述
--动态时间规划概述
-7.5 动态时间规划实现
--动态时间规划实现
-第七章作业