音高(Pitch)

概念:音高(Pitch)是语音信号的一个很重要的特征,直觉上而言它表示声音频率的高低,这个频率是指基本频率(基频),也即基本周期的倒数。 若直接观察语音的波形,只要语音信号稳定,我们可以很容易的看出基本周期的存在。例如我们取一个包含256个采样点的帧,单独绘制波形图,就可以明显的 看到它的基本周期。如下图所示:

其中最上面的波形为|a|的发音,中间的为上图中红色双竖线(位于语音区)所对应的帧的具体波形,而最下面的是上图中绿色双竖线(位于静音区)所 对应的帧的具体波形。很容易看到中间的波形具有明显的周期性。

过零率(Zero Crossing Rate)

概念:过零率(Zero Crossing Rate,ZCR)是指在每帧中,语音信号通过零点(从正变为负或从负变为正)的次数。 这个特征已在语音识别和音乐信息检索领域得到广泛使用,是对敲击的声音的分类的关键特征。

ZCR的数学形式化定义为:

$zcr = \frac{1}{T-1}\sum_{t=1}^{T-1}\pi\{s_{t}s_{t-1}<0\}$.
其中$s$是采样点的值,$T$为帧长,函数$\pi\{A\}$在A为真是值为1,否则为0.

特性:
(1).一般而言,清音(unvoiced sound)和环境噪音的ZCR都大于浊音(voiced sound);
(2).由于清音和环境噪音的ZCR大小相近,因而不能够通过ZCR来区分它们;
(3).在实际当中,过零率经常与短时能量特性相结合来进行端点检测,尤其是ZCR用来检测清音的起止点;
(4).有时也可以用ZCR来进行粗略的基频估算,但这是非常不可靠的,除非有后续的修正(refine)处理过程。

1.概述(Introduction)

本系列文主要介绍语音信号时域的4个基本特征及其Python实现,这4个基本特征是:
(1)音量(Volume);
(2)过零率(Zero-Crossing-Rate);
(3)音高(Pitch);
(4)音色(Timbre)。

2.音量(Volume)

音量代表声音的强度,可由一个窗口或一帧内信号振幅的大小来衡量,一般有两种度量方法:
(1)每个帧的振幅的绝对值的总和:

$volume = \sum_{i=1}^{n}|s_{i}|$.
其中$s_{i}$为第该帧的$i$个采样点,$n$为该帧总的采样点数。这种度量方法的计算量小,但不太符合人的听觉感受。
(2)幅值平方和的常数对数的10倍:
$volume = 10 * log_{10}\sum_{i=1}^{n}s_{i}^{2}$.
它的单位是分贝(Decibels),是一个对数强度值,比较符合人耳对声音大小的感觉,但计算量稍复杂。

语音信号的分析分为时域、频域、倒谱域等,时域分析简单、运算量小、物理意义明确,但对于语音识别而言, 更为有效的是频域的分析方法,那么为什么还有进行时域的分析呢?

语音信号具有时变特性,但在短时内可以看做是平稳的,所以语音的时域分析是建立在“短时”的条件下的,经研究统计, 语音信号在帧长为10ms~30ms内是相对平稳的。

语音信号是模拟信号,在进行处理之前,要进行数字化,模拟信号数字化的一般方法是采样,按照Nyquist采样定理进行 采样(一般在8K~10KHz)后,在进行量化(一般用8bit,也有16bit等)和编码,变为数字信号。

在语音信号数字化之后,就可以开始对其进行处理了,首先是预处理,由于语音信号的平均功率谱受声门激励和口鼻辐射的影响, 高频端大约在800Hz以上按6dB/倍频程跌落,为此要在预处理中进行预加重。预加重的目的是提升高频部分,是信号变得平坦, 以便于进行频谱分析或声道参数分析。预加重可以用具有6dB/倍频程的提升高频特性的预加重数字滤波器实现。预处理的另一 方面工作是分帧和加窗:分帧的帧长一般在10ms~30ms,分帧既可以是连续的,也可以是有部分over-lap;短时分析的实质是 对信号加窗,一般采用Hamming窗,其他的还有矩形窗、汉宁窗等,如下图所示。

五一天晴气爽,登高望远,强身健体!只可惜“不畏浮云遮望眼,只缘身在最高层” 这句诗在空气严重污染的今天已不适用了!

前段时间有好几位同学询问如何用Alize实现说话人识别的问题,由于寒假前赶Paper,来不及详细解答,更没时间写Demo。 开学后不久抽时间写了一个Demo,并上传到了GitHub:VoicePrintReco-branch-master. 现在新版的 Alize 3.0 已经提供了更多的官方 demo,我也将 GitHub 的源码升级了 VPR2.0, 其中的Demos文件夹有Alize官方的4个demo和我自己写的这个demo。

基本流程

下面将利用Alize+SPro进行简单的GMM-Based的说话人识别的基本流程总结如下:

1.Features extraction 特征提取

sfbcep.exe(MFCC)或slpcep.exe(LPCC)

2.Silence removal 静音检测和去除

NormFeat.exe 先能量规整
EnergyDetector.exe 基于能量检测的静音去除

3.Features Normalization 特征规整

NormFeat.exe 再使用这个工具进行特征规整

4.World model training

TrainWorld.exe 训练UBM

5.Target model training

TrainTarget.exe 在训练好UBM的基础上训练training set的GMM

6.Testing

ComputeTest.exe 将testing set在training set的GMM上进行测试和打分

7.Score Normalization

ComputeNorm.exe 将得分进行规整

8. Compute EER 计算等错误率

你可以查查计算EER的matlab代码,NIST SRE的官网上有下载DETware_v2.1.tar.gz 。_

学术研讨

VALSE是Vision And Learning SEminar的缩写,它主要目的是为计算机视觉、图像处理、模式识别与机器学习研究领域内的中国青年学者(以70后研发 人员为主)提供一个深层次学术交流的舞台。虽然参与会议和做报告的人主要是做视觉的,但很多问题是机器学习和模式识别当中的一般性问题,所以我这 个搞语音的也去打酱油了^_^。

今年的VALSE在南京东南大学召开,参加会议的人数超出预期,会场爆满,仅学校的老师和公司的研究人员就占了会场大半,学生沦落到只能座最后两排, 或者座分会场(这个太不科学了-_-!)。会程安排也很紧凑,中午几乎没有休息时间,吃饭都很赶,而下午也很晚(6点半左右)才结束。这次会议有好几个 perfect的报告,但也有些不太感兴趣的,有的甚至感觉很2。除了一些报告,还有两个主题讨论会,印象中主要包括三个论题:学术界与工业界的Gap及衔接 问题,深度学习是否是计算机视觉的终极解决方案,计算机视觉要不要从生物视觉机理中受启发等。

闲话少说,言归正传,数萝卜下窖的讲讲这两天的经历吧。 第一天上午,第一个做报告的是MSRA的张磊,主要讲了计算机视觉的一些基本问题,从AI的历史将起,提到了Turing Test,是人工智能 的Benchmark。而CV的一个基本问题是Object Recognition,人们的研究经历了从之前的Model Based到如今的Data Driven及Big Data的过程,各种模型和方法可谓 层出不穷,然而对于真正解决问题、真正达到人类一般的视觉智能,还相差甚远。接着他讲了关于在路灯下找钥匙的故事(详询http://tongyanyan.blog.edu.cn/2006/427512.html), 听了这个故事后,感觉那个找钥匙的人很滑稽可笑,然而再想想我们自己正在做的研究,是不是在某种程度上和故事中的这个人一样呢。通过这个故事,他引出自己 的观点:要想解决Object Recognition这个问题或者说要解决CV的问题,就需要More Effective Representation & Match。接下来讲在Representation方面一些研究 人员提出的一些人工设计的Feature,而在Match方面则从Point、Line、Plane、Volume(点线面体)进行了详尽的讲述。最后还提了一下Deep Neural Network在CV中的 应用,可以discover hidden patterns。虽然对CV中的很多概念和模型方法不太了解,但感觉还是挺有收获的。

上午的后两个报告都是讲Sparse的,虽然之前看过关于Sparse Coding的东西,但当他们在上面讲的,主要偏重与Sparse这个问题的优化求解方法及其变形, 涉及到很多数学公式和推导,感觉很枯燥,加之晚睡早起,有点犯困,所以基本没有听进去。贾佳亚的报告还似懂非懂,而陈欢欢的Sparse Bayesian Learning 表示完全没听懂。个人感觉Sparse还是很重要的,所以在弄完Deep Learning这个专题后,我想有必要对这两个报告及其相关论文再做深入的学习和研究。

由于深度置信网络(Deep Belief Networks,DBN)是基于限制性玻尔兹曼机(Restricted Boltzmann Machines,RBM)的深层网络结构, 所以本文重点讨论一下玻尔兹曼机(BM),以及它的学习算法——对比散度(Contrastive Divergence,CD)算法。在介绍BM前,我们首先介绍一下 基于能量的模型(Energy Based Model,EBM),因为BM是一种特殊的EBM。

1. 基于能量的模型(EBM)

基于能量的模型是一种具有普适意义的模型,可以说它是一种模型框架,在它的框架下囊括传统的判别模型和生成模型,图变换网络(Graph-transformer Networks),条件随机场,最大化边界马尔科夫网络以及一些流形学习的方法等。EBM通过对变量的每个配置施加一个有范围限制的能量来捕获变量之间的依赖 关系。EBM有两个主要的任务,一个是推断(Inference),它主要是在给定观察变量的情况,找到使能量值最小的那些隐变量的配置;另一个是学习(Learning), 它主要是寻找一个恰当的能量函数,使得观察变量的能量比隐变量的能量低。

基于能量的概率模型通过一个能量函数来定义概率分布,

$p(x) = \frac{e^{E(x)}}{Z}.$ ... ①
其中Z为规整因子,
$Z = \sum _{x} e^{-E(x)}.$ ... ②
基于能量的模型可以利用使用梯度下降或随机梯度下降的方法来学习,具体而言,就是以训练集的负对数作为损失函数,
$l(\theta,D) = -L(\theta,D) = - \frac{1}{N}\sum_{x^{(i)}\in D} log p(x^{(i)}).$ ... ③
其中$\theta$为模型的参数,将损失函数对$\theta$求偏导,
$\Delta = \frac{\partial l(\theta,D)}{\partial \theta} = - \frac{1}{N} \frac{\partial \sum log p(x^{(i)})}{\partial \theta}.$ ... ④
即得到损失函数下降最快的方向。

2013英特尔信息技术峰会(Intel Developer Forum, IDF)上,来自Nuance的声龙语音合成和识别技术的演示,中文语音识别不给力, 笑点频出啊,哈哈