基音(Pitch)计算笔记

  1. 音高(Pitch)

    • 定义:

      基础频率:准周期(quasi-periodic, 指周期几乎确定,但有小幅波动)波的基础频率的倒数,单位为Hz

      Pitch(in semitone, 半音):由基础频率经过类对数(log-based)变换得到

    • 特点:噪声和非语音没有Pitch

  2. 音高追踪(Pitch Tracking)

    • 定义:即对整段音频求取音高
    • 前处理(Pre-processing):
      • 滤波(Filtering)
      • 激励提取(Excitation extraction)
    • 主要过程:
      • 分帧(Frame blocking)
      • 周期检测函数计算(periodicity detection function)
      • 通过追踪PDF最大值获取候选Pitch(Pitch Candidates via max picking over PDF)
    • 后处理:
      • 通过音量/纯净度阈值去除不可靠的Pitch(Unreliable pitch removal via volume/clarity thresholding)
      • 通过抛物插值优化结果(Pitch refinement via parabolic interpolation)
      • 通过中值滤波进行平滑(Pitch smoothing via median filters)

一些处理步骤

  1. Frame Blocking

    • 分帧:例子:

      Sample rate = 16kHz

      Frame size = 512 samples,Frame duration = 512 / 16000 = 32ms

      Overlap = 192 samples

      Hop size = frame size - overlap = 512-192 = 320 samples

      Frame rate = Sample rate / Hop size =16000/320 = 50 frames/sec= Pitch rate,即 Pitch rate等于每秒钟的帧数

  2. PDF(Periodicity Detection Functions):分为两个categories

    • 时域

      • 自相关函数(ACF, Autocorrelation function):假设原本的frame为s(t),t=0...n−1s(t),\ t = 0...n-1s(t), t=0...n−1,移动后的frame为s(t−τ)s(t-\tau)s(t−τ)也即向后移动τ\tauτ个采样点,则acf(τ)=∑t=τn−1s(t)s(t−τ)acf(\tau) = \displaystyle{\sum_{t=\tau}^{n-1}s(t)s(t-\tau)}acf(τ)=t=τ∑n−1​s(t)s(t−τ) , 即对两帧的重合部分相乘相加。重合的长度为n−τn-\taun−τ,显然τ\tauτ越大,重合长度越短,则其实质为截断(truncated)ACF. 当然ACF还有多种不同形式,如归一化(即除以重叠长度)、半帧移等


      • 定位基础频率(FP, Pundamental period):

        • 设每个采样点为一个index,显然acf(0)acf(0)acf(0)取到了最大值,假设在index 131也即acf(131)acf(131)acf(131)取到次极大值,则基础频率(FF)= 16000/131 = 123.077 Hz。假如人类的基频区间为[40,1000][40, 1000][40,1000]内:40≤fsFP≤100040\leq \frac{fs}{FP}\leq 100040≤FPfs​≤1000,则我们可以得到基础周期的区间fs1000≤FP≤fs40\frac{fs}{1000}\leq FP\leq \frac{fs}{40}1000fs​≤FP≤40fs​ ,我理解的FPFPFP就是截断ACF的次极大值对应的index
        • 基础频率可能计算出错:如海豚音或者吹口哨会使其变高;低声唱歌或者哼哼则需要更大的frame size
      • 归一化方差(Normalized squared difference)

        nsdf(τ)=2∑s(t)s(t−τ)∑s2(t)+∑s2(t−τ)nsdf(\tau)=\displaystyle{\frac{2\sum s(t)s(t-\tau)}{\sum s^2(t)+\sum s^2(t-\tau)}}nsdf(τ)=∑s2(t)+∑s2(t−τ)2∑s(t)s(t−τ)​, 可以验证 −1≤nsdf(τ)≤1-1\leq nsdf(\tau)\leq 1−1≤nsdf(τ)≤1

      • 平均幅度方差函数(AMDF,Average Magnitude Difference Function):amdf(τ)=∑t=τn−1∣s(t)−s(t−τ)∣amdf(\tau)=\displaystyle{\sum_{t=\tau}^{n-1}|s(t)-s(t-\tau)|}amdf(τ)=t=τ∑n−1​∣s(t)−s(t−τ)∣, 显然其在index 0处取0,此函数应该寻找第二个最小值的index

        和ACF比较的优势:AMDF需要的算力更少,数据溢出的风险更小

        也有归一化版本和半帧移版本

      • 结合:可用将ACF和AMDF结合,即ACF/AMDF,其峰值更为尖锐

    • 频域

      • 几个概念

        • 能量:频谱平方和
        • Pitch:谐波之间的距离(Distance between harmonics)
        • Timber:平滑后的频谱(Smoothed spectrum)
      • 谐波基谱(HPS, Harmonic Product Spectrum):

        a. 计算一帧的的谱能量

        b. 消除通过20阶多项式拟合后的趋势(Eliminate its trend obtained from 20-order polynomial fitting -> Formants are removed)

        c. 使用指数权重来抑制高频谐波(Apply exponential weighting to suppress high-frequency harmonics)

        d. 降采样并求和以加强在基础频率处的谐波:如图降采样并求和后FoF_oFo​处会被加强,理解:当降采样时,一帧对应的点数会变少,将降采样后的一帧频谱与原来对比,则只有原来长度的一半,且二倍基频的index和原来基频的index对齐,则降低三倍采样率后三倍基频index和原来基频index对其,以此类推,这样原来基频处的点变得到了加强

        e. 找到最大值作为音高点(pitch point)

      • 倒谱(cepstrum):cepstrum=ifft(log(∣fft(frame)∣))cepstrum = ifft(log(|fft(frame)|))cepstrum=ifft(log(∣fft(frame)∣))

        a. 计算每一帧的谱能量

        b. 如有必要,消除能量谱的趋势

        c. 对能量谱进行逆fft变化(结果是实的)

        d. 找到最大值的位置并计算pitch

  3. pitch tracking 性能评估

    • Raw pitch accuracy: Prob. of a correct pitch value over the voiced frames
    • Raw chroma accuracy: Prob. that the chroma(i.e. the note name) is correct over the voiced frames
    • Overall accuracy: Prob. of a correct pitch value(via pitch estimation) and pitch decision (via voicing detection) over all frames
  4. 一些常用的预处理(Pre-Processing)

    • Pre-filter the signal:人的pitch在[40,1000][40, 1000][40,1000] 的区间内,因而可以用使用截止频率在800-1000的滤波器进行过滤

    • Clipping:在0附近进的小信号很可能会导致音高追踪出现错误,因而可以设置一定区间,在区间范围内的值置0

    • SIFT(simple inverse filter tracking):通道效应(channel effect)可能会导致pitch track出现错误,即声带信号经过口腔鼻腔等会发生变形,希望找到声带原始信号。我们可将当前信号s(n)s(n)s(n)表示为前面mmm个信号的线性组合: s(n)=a1s(n−1)+a2s(n−2)+...+sms(n−m)+e(n)s(n)=a_1s(n-1)+a_2s(n-2)+...+s_ms(n-m)+e(n)s(n)=a1​s(n−1)+a2​s(n−2)+...+sm​s(n−m)+e(n),利用平方最小法来寻找最佳的系数a1,a2,a3,...,am{a_1,\ a_2,\ a_3,...,a_m}a1​, a2​, a3​,...,am​,使得∑e2(n)\sum e^2(n)∑e2(n)最小,则e(n)e(n)e(n)便是原始激发信号(excitation signal)。即:线性预测误差信号就是原始激发信号

  5. 音高追踪的后处理

    • 平滑:移除音高突变
    • 插值:提高音高精确度。思想:利用pitch和它旁边的点来确认最大值位置
  6. UPDUDP(Unbroken Pitch Determination Using DP):将pith的平滑度(smoothness)也计入考虑

    • cost(p,θ,m)=∑i=1namdfi(pi)+θ×∑i=1n∣pi−pi+1∣mcost(\mathbf{p},\theta, m)=\displaystyle{\sum_{i=1}^n amdf_i(p_i)+\theta\times \sum_{i=1}^n|p_i-p_{i+1}|^m}cost(p,θ,m)=i=1∑n​amdfi​(pi​)+θ×i=1∑n​∣pi​−pi+1​∣m,其中p=[p1,p2,...,pn]\mathbf{p}=[p_1,p_2,...,p_n]p=[p1​,p2​,...,pn​] 表示一个given path in the AMDF matrix,nnn为帧的数量,θ\thetaθ为转化惩罚因子(transition penalty),mmm为 exponent of the transition difference

    • Optimum-value functionD(i,j)D(i,j)D(i,j):从第一帧到位置(i,j)(i,j)(i,j)的最小costcostcost

      D(i,j)=amdfi(j)+min⁡k∈[8,160]{D(i−1,k)+θ×∣k−j∣2},i∈[1,n],j∈[8,160]D(i,j)=amdf_i(j)+\displaystyle{\min_{k\in [8,160]}\{D(i-1,k)+\theta\times |k-j|^2\}},\ i\in[1,n],\ j\in [8,160]D(i,j)=amdfi​(j)+k∈[8,160]min​{D(i−1,k)+θ×∣k−j∣2}, i∈[1,n], j∈[8,160],初始条件为:D(1,j)=amdf1(j),j∈[8,160]D(1,j)=amdf_1(j),\ j\in[8,160]D(1,j)=amdf1​(j), j∈[8,160] ,最优costcostcost为:min⁡j∈[8,160]D(n,j)\displaystyle{\min_{j\in [8,160]}D(n, j)}j∈[8,160]min​D(n,j)

  7. 频域到半音的转换(Frequency to Semitone):semitone是一个基于A440的音乐尺度

    • semitone=12×log⁡2(fracfreq440)+69semitone=12\times \displaystyle{\log_2(frac{freq}{440})+69}semitone=12×log2​(fracfreq440)+69
    • 合理的pitch范围:E2-C6 也即82Hz - 1047Hz

semitone是一个基于A440的音乐尺度

  • semitone=12×log⁡2(fracfreq440)+69semitone=12\times \displaystyle{\log_2(frac{freq}{440})+69}semitone=12×log2​(fracfreq440)+69
  • 合理的pitch范围:E2-C6 也即82Hz - 1047Hz

基音周期计算(pitch tracking)相关推荐

  1. 音频信号处理——基音周期

    音频信号处理--基音周期 标签(空格分隔): 音频处理 一.简介 1.1 什么是基音?什么是基音周期 基音顾名思义就是声音的基础.这里我们主要讨论人的发声,根据声带震动的方式的不同,将声音信号分为清音 ...

  2. 语音信号处理之(二)基音周期估计(Pitch Detection)

    语音信号处理之(二)基音周期估计(Pitch Detection) zouxy09@qq.com http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课, ...

  3. 使用python进行基音周期的计算

    下面贴出一下我自己使用的基音周期的提取方法: 首先我们设置帧长pe.帧移step(这里我使用的采样率为16000),由于基音频率一般在80hz-500hz之间,所以一个周期的长度在2ms-12.5ms ...

  4. 【语音分析】短时自相关基音周期检测+LPC预测增益计算【含Matlab源码 1517期】

    ⛄一.案例简介 1 实验要求 1.录一段声音,内容为"间隔读出数字0-4",转为单声道.8khz.wav格式: 2.每帧帧长20ms160个样点,使用汉明窗hamming加窗: 3 ...

  5. python自相关函数提取基音周期_Python语音基础操作--4.2基音周期检测

    <语音信号处理试验教程>(梁瑞宇等)的代码主要是Matlab实现的,现在Python比较热门,所以把这个项目大部分内容写成了Python实现,大部分是手动写的.使用CSDN博客查看帮助文件 ...

  6. python自相关函数提取基音周期_自相关函数法基音周期提取(matlab版)

    1.引言 人在发浊音时,气流通过声门使声带产生张弛振荡式振动,产生一股准周期脉冲气流,这一气流激励声道就产生浊音,又称有声语音,它携带着语音中的大部分能量.这种声带振动的频率称为基频,相应的周期就称为 ...

  7. matlab倒谱法基音周期,语音学习笔记1------matlab实现自相关函数法基音周期提取...

    人在发浊音时,气流通过声门使声带产生张弛振荡式振动,产生一股准周期脉冲气流,这一气流激励声道就产生浊音,又称有声语音,它携带着语音中的大部分能量.这种声带振动的频率称为基频,相应的周期就称为基音周期( ...

  8. 自相关函数法基音周期提取(matlab版)

    1.引言 人在发浊音时,气流通过声门使声带产生张弛振荡式振动,产生一股准周期脉冲气流,这一气流激励声道就产生浊音,又称有声语音,它携带着语音中的大部分能量.这种声带振动的频率称为基频,相应的周期就称为 ...

  9. 语音学习笔记1------matlab实现自相关函数法基音周期提取

    人在发浊音时,气流通过声门使声带产生张弛振荡式振动,产生一股准周期脉冲气流,这一气流激励声道就产生浊音,又称有声语音,它携带着语音中的大部分能量.这种声带振动的频率称为基频,相应的周期就称为基音周期( ...

最新文章

  1. Qt中两种定时器用法
  2. 尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT)
  3. 字字珠玑!任正非最新内部演讲:高科技急不来,股市为了圈钱夸大太多
  4. python介绍和用途-Python基础介绍(一)
  5. ios 代码设置控件宽高比_iOS基于代码按比例约束方法进行屏幕适配
  6. 一个简单的WEB网页制作作业——黑色的山河旅行社网站(5个页面)HTML+CSS+JavaScript
  7. 装上你就离不开的桌面软件:透明任务栏/显示网速/内存清理/温度监控
  8. SpringBoot父子工程集成Jenkins部署项目问题合集
  9. 墨刀安装以及基础使用教程
  10. win10 查看笔记本电池循环次数
  11. 拉黑的微信好友怎么恢复,拉黑的微信好友聊天记录还在吗
  12. 【大数据开发】SparkSQL——RDD、DataFrame、DataSet相互转换、DSL常用方法、SQL风格语法、Spark读写操作、获取Column对象的方式
  13. Servlet - Filtering (过滤器))
  14. Appium的一点一滴
  15. 阿里P8传授给小老弟的Java面试宝典,竟让让小弟也拿到了P8的offer,傻眼了
  16. 【三节课数据分析】ch1.指标建模
  17. usb扩展坞同时接键盘鼠标_一种带有扩展坞功能的一体式键鼠的制作方法
  18. 【Python绘图】学习绘图第一步,先要知道哪些操作是常用的
  19. 什么叫做展望_什么叫做展望未来。。
  20. 前端优化——性能提升

热门文章

  1. oracle order by 排序之降序 null 排最后
  2. 怎么给Guest 账户设置密码
  3. 854. Floyd求最短路
  4. 卸载kerberos
  5. 微信更新值得注意的几点
  6. WIN10直接运行自定义软件
  7. 微信小程序,画布中,根据需要展示的图片比例,获取能截取原图中的最大图片尺寸,并且不变形展示
  8. csgo 一键配置cfg、道具图、练枪图、连跳图
  9. android连接和断开蓝牙音箱的问题
  10. 一般对称性和轮换对称性