您的位置:首页 > 其它

三、语音信号处理

2020-02-03 04:53 661 查看

(一)FFmpeg:可以实现各种音频格式键的转换或从视频中提取音频。

# 后面用的时候自己查命令

(二)标注语音

  1. 字母表:IPA或SAMPA
  2. 开源的PRAAT(http://www.praat.org/)可以标出音节边界。

(三)端点检测:自动检测出语音的起始点及结束点。
书中提到采用双门限比较法,以短时能量E和短时平均过零率Z作为特征,结合两者的优点。
(四)动态时间规整

  • DTW(Dynamic Time Warping)算法:基于动态规划的思想,解决了发音长短不一的模板匹配问题。简单来说,就是构建一个邻接矩阵,寻找最短路径和。(循环等式:output[i][j] = Min(Min(output[i-1][j], output[i][j-1]), output[i-1][j-1]) + distance[i][j])

(五)傅里叶变换
将音频数据提取到一个数组后,可以将N个数据样本传递给计算离散傅里叶变换的函数(或更有效地快速傅里叶变换)。

  1. 离散傅里叶变换(discrete fourier transform, DFT)
    音频信号可以分解为不同振幅、频率、相位的正弦波叠加。波的相位用复数来表示。离散傅里叶变换总体上是一个将n个复数的向量映射到n个复数的另一个向量的函数。使用基于0的索引,令x(n)表示输入向量的第n个元素,并让X(m)表示输出向量的第m个元素,然后基本的离散傅里叶变换由以下公式给出:(等式变换用到了欧拉公式)

    其中,向量x表示各个时间点的信号水平;向量X表示各个频率下的信号水平。上述公式的含义是,频率m处的信号水平等于每个时间n的信号水平乘以复数指数和。
# 代码后面自己查,公式还要做变化才行。
  1. 快速傅里叶变换(FFT)
  • Cooley-Tukey算法(最常用):以分治法为策略,递归地将长度为N=N1N2的离散傅里叶变换分解为长度为N1的N2个较短序列的离散傅里叶变换,以及与O(N)个旋转因子的复数乘法。
# 公式、代码后面自己查。

(六)MFCC特征

  1. 以MFCC为例,对语音信号处理如下:(与论文《Speaker Recognition by Machines and Humans: A tutorial review》P84-P85所提到的步骤一致)
  • 输入16kHz采样音频。
  • 以一个25ms的窗口(每次移动10ms将输出一个向量序列)产生数值序列。
  • 乘以Windows函数。例如,海明距离。
  • 执行快速傅里叶变换。
  • 在每个频率桶中记录能量,也就是计算每个频率区间的能量。
  • 执行离散余弦变换(DCT),得到“倒谱”。
  • 保留倒谱的前13个系数。
    【注:深度学习中,可以直接读取声音的波形文件,不用MFCC特征】
  • 点赞
  • 收藏
  • 分享
  • 文章举报
梁小娘子 发布了36 篇原创文章 · 获赞 0 · 访问量 555 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: