当前课程知识点:计算机音乐 >  第六章 高音跟踪 >  6.3 频域音高跟踪 >  频域音高跟踪

返回《计算机音乐》慕课在线视频课程列表

频域音高跟踪在线视频

下一节:K歌评分

返回《计算机音乐》慕课在线视频列表

频域音高跟踪课程教案、知识点、字幕

同学们大家好

这一节我们将会介绍频域的音高跟踪算法

由于频域的角度

特别是从频谱的幅值的角度

跟人耳的感知更加的接近

因此频域的算法

也是在实际的应用当中更加常见的算法

在时域的算法当中

我们需要依赖一个假设

就是音频的信号是周期的信号

这样的话我们才可以通过

基频的周期来定义音高

前面的实验当中我们也看到在

现实的音乐世界当中

信号是很难严格地

遵循周期性这样的假设的

那么这时候周期的概念就会变得非常的模糊

在频域当中音高的定义就会更加的清晰一点

一般来说我们首先会舍弃相位的特征

因为人耳对相位并不是特别敏感

也就是说我们只要频谱的能量

除此之外

因为人耳对能量的

敏感度是对数敏感的

因此我们首先要求一下对数

除此之外

我们还需要排除杂音的干扰

也就是说我们需要对频谱球包络

那么我们可以通过平滑滤波的方式

去获得整个频谱的轮廓

那么得到轮廓之后

周期就比较好定义了

我们假设频谱的峰值是成

整数倍分布的

因此我们只需要去求两个峰值之间的距离

这个距离就是周期了

在频域当中一种高效可行的方法就是

谐波谱法

那么利用整数倍峰值的假设

我们可以对信号的频谱进行两倍的下采样

第二个峰值

那么在两倍下采样的过程中

就会移到原来第一个风水位置

如果进行三倍的下采样

那么第三个峰值就会移到

第一个风水位置

如此进行

然后我们把这些下采样的结果

全部的都加起来

因为各阶的泛音

都被依次的移到跟主音一样的位置

虽然做完这些叠加之后

在主频的位置上将会产生一个最大值

那么我们只需要去提取这个最大值

就可以知道主频的数值

接下来我们就来测试一下

谐波普方法的音高跟踪

那么首先我们要做检采样

需要写一个检采样的函数

检采样的方法跟我们

第二章的时候讲食欲音频处理的时候的

检采样方法是完全一样

采用线性差值的办法

之后我们要写一个

谐波普的函数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叠放

--分窗处理1: OLA叠放

-2.3 分窗处理2:音量计算

--分窗处理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算法

--Karplus Strong算法

-5.6 管状气鸣乐器模型

--管状气鸣乐器模型

-第五章作业

第六章 高音跟踪

-6.1 音高跟踪概述

--音高跟踪

-6.2 时域音高跟踪

--时域音高跟踪

-6.3 频域音高跟踪

--频域音高跟踪

-6.4 K歌评分

--K歌评分

-第六章作业

第七章 音频同步

-7.1 音频同步概述

--音频同步概述

-7.2 音乐特征提取 CQT

--音乐特征提取CQT

-7.3 音乐特征提取 Chroma

--音乐特征提取Chroma

-7.4 动态时间规划概述

--动态时间规划概述

-7.5 动态时间规划实现

--动态时间规划实现

-第七章作业

频域音高跟踪笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。