音高追踪

来自人工智能助力教育知识百科
跳转至: 导航搜索
网站首页 | 百科首页 | 3D虚拟世界 | 音乐与人工智能 | 人工智能机器人 | 知识百科 | 关于我们

基本流程

Step 1 分帧

将整段音讯讯号切成音框(Frames),相邻音框之间可以重叠。

在切音框的过程中,我们允许左右音框的重叠,因此,我们定义「音框率」(Frame Rate)是每秒钟所出现的音框个数,如果取样频率是11025,音框长度是256 点,重叠点数是84,那么音框率就是11025/(256-84) = 64,换句话说,我们的电脑要能够每秒钟处理64个音框,才能达到实时处理的要求。我们让音框重叠的目的,只是希望相邻音框之间的变化不会太大,使输出的音高曲线更具有连续性。但是在实际应用时,音框的重叠也不能太大,否则会造成计算量的过大。

一般有以下考虑:

· 音框长度至少必须包含2 个基本周期以上,才能显示语音的特性。已知人声的音高范围大约在50 Hz 至1000 Hz 之间,因此对于一个的取样频率,我们就可以计算出音框长度的最小值。例如,若取样频率fs = 8000 Hz,那么当音高f = 50 Hz(例如男低音的歌声)时,每个基本周期的点数是fs/f = 8000/50 = 160,因此音框必须至少是320 点;若音高是1000 Hz(例如女高音的歌声)时,每个基本周期的点数是8000/1000 = 8,因此音框必须至少是16 点。
· 音框长度也不能太大,太长的音框无法抓到音讯的特性随时间而变化的细微现象,同时计算量也会变大。
· 音框之间的重叠完全是看计算机的运算能力来决定,若重叠多,音框率就会变大,计算量就跟着变大。若重叠少(甚至可以不重叠或跳点),音框率就会变小,计算量也跟着变小。

Step 2 逐帧计算音高

算出每个音框所对应的音高。

由一个音框计算出音高的方法很多,可以分为时域和频域两大类:

  1. 时域 (Time Domain)
    • ACF (Autocorrelation function),自相关函数
    • AMDF (Average magnitude difference function),平均强度差分函数
    • SIFT (Simple inverse filter tracking)
  2. 频域 (Frequency Domain)
    • Harmonic product spectrum method
    • Cepstrum method
ACF音高追踪案例

ACFfunction.jpg

Step 3 筛值

排除不稳定的音高值。(可由音量来筛选,或由音高值的范围来过滤。)

Step 4 平滑

对整段音高进行平滑化,通常是使用「中位数滤波器」(Median Filters)。