赞
踩
Cano P, Batle E, Kalker T, et al. A review of algorithms for audio fingerprinting[C]//Multimedia Signal Processing, 2002 IEEE Workshop on. IEEE, 2002: 169-173.读书笔记。
前段时间研究回声消除中的延时估计方法,了解了webrtc的延时估计方法,同时看了另外一个用二元谱差audio fingerprinting方法。看完两个算法后就找到了这篇关于声纹综述性的文章。这篇文章里头不但描述了声音指纹识别的总体框架,并且介绍了大量声纹识别的主要方法。该文章提到声音指纹的多个特征,这些特征都是研究声音信号处理和声音匹配非常有用的特征。这篇文章对声音特征的认识有启发式的意义。
因为是一篇综述文章没有办法概况得太简练,因此对文章主体部分做了翻译,也借此加深相关算法和名词的印象。其中下面提到的部分名词翻译不太确切,大家可以根据原文理解,下面提到的指纹(figureprint)特指声音指纹,或者简称声纹。
文章结构:
1、介绍
本文介绍了声音指纹的应用领域,以及声音指纹需要满足的条件。声音指纹算法应该能够处理变速播放、均衡、背景噪声、D/A和A/D和转换编码器等等带来的声音失真。同时声音指纹算法应该具有较小的声音特征复杂度和搜索复杂度。
2、一般架构
声音指纹识别的一般架构如下:
图1的框架中有两个基本的流程,一个是指纹的抽取,另外一个是匹配算法。指纹要求满足:
1)具有区别度;
2)对畸变具有不变性;
3)压缩性好;
4)计算简单。
明显的,以上有的的特征都是相互矛盾,必须牺牲一些性质获得另外一些性质。
指纹抽取的模块如下图2:
图2中描述的前置运算包括一些转换信号的方法,其作用在于便于特征的提取。指纹建模块记录最后的指纹表现形式,包括向量、向量轨迹、码本、HMM声音类别的一系列索引、一组错误校验码或者是音乐意义上的高级属性。
给定了一段声音的声音特征,剩下的问题就是从数据库里头找到最匹配的声音特征。根据文章[1],搜索算法应该满足一下几个条件:
1)快速:对于大的数据库,大量的扫描和距离计算会导致算法非常慢;
2)准确:能够有效地拒绝,同时不要漏掉太多判断;
3)占用内存少:算法要求尽量减小内存开销;
4)容易跟新:算法应该能够方便地加入或删除相关的目标。
3、前置转换
前置转换将声音信号转换为一组具有相关特征的信号,以便指纹建模模块块使用。选用前置转换的时候需要考虑以下几点:
1)减小维度;
2)感知上有效的参数(类似用于人听觉系统的参数);
3)不变形性和鲁棒性(对于信道失真,噪声,等等);
4)时间相关性(特别在那些使用动态谱的系统中)。
A、预处理
这一步包括把信号离散化并转化成需要格式:例如 16bitPCM,5-44.1khz,单声道格式等等。另外也包括编解码、预增强以及归一化到(-1,1)等等操作。
B、分帧和重叠
分帧和重叠需要考虑信号短时平稳性,精度和帧之间的连续性(包括使用什么窗做变换)。这一步也会影响到计算复杂度。
C、线性变换:谱估计
线性变换背后的思想就是:把一组测度变成新的一组特征集合。选择适当的线性变换,能够有效减少数据冗余。在解相关和信息压缩意义上的最优变换包括KLT,SVD等[9],但是必须考虑其运算复杂度。因此,最常用的仍是时频变换。也有像Lourens[11](为了简化计算)和 Kurth[12](时频分析存在失真时,对严重失真信号建模)等人使用功率测度,本质上说,功率测度也是时频分析的一种,只是它仅仅考虑频点而不考虑相位。
最普遍应用的是FFT,其他一些变换例如DCT,Haar 变换Walsh-Hadamard[2]变换也被使用到这个领域。Richly等人发现DFT和Walsh-Hadamard变换对平移变换不敏感[13],而Mihc ¸ak等人[5]和Burges等人[14]使用的Modulated Complex Transform (MCLT)的方法几乎具有平移不变性[5]。
D、特征抽取
这一步中有大量的算法用于产生最后的声音特征向量,这些算法目标在于减少维同时增加对失真的鲁棒性。很多算法运用了人的感知学知识来提取有用的参数,使用频谱critical-band分析抽取重要的特征,例如文章[6]和[15]用到MFCC。文章[7]使用平度测度算法,这种方法可以估计某一个频带中语音或者是噪声的质量。Papaodysseus等人[16]提出频带表示向量(band representative vectors)的方法,它是一个有序的频带中突出音调的索引列表(例如峰值和明显幅度)。每个频带的能量也被Kimura等人作为特征[3]。Haitsma等人使用33个Bark-scaled的频带来获得它们的哈希字符串,它是能量带的差的符号(同时在时间和频率轴上计算)[4]。
然而Sukitanon和Atlas等人声称当声音信道发生失真时,谱估计和相关的特征将变得不准确[8]。他们提出了一种调试频率分析方法来描述音频信号的时变表现,他们把19个Bark空间子带滤波器能量的调制频率估计的几何均值最为特征。
音乐信息检索的方法用到的特征能够改善声音匹配的有效性,这些特征包括调和性(harmonicity)、带宽、响度[15]和ZCR等等。
另外Burges等人提出常用的启发式的特征未必是最优特征[14],他们提出一个种改进KL变换的定向主分量分析方法(Oriented Principal Component Analysis ,OPCA),在没有监督的情况下,用这种方法寻找最优的特征。如果PCA(KL)方法找到了最大化信号方差的正交方向,那么OPCA能够将一些预定义失真纳入考量,获得一组可能非正交的方向。
E、后处理
在获得特征后,为了更好地衡量其时变的变量,特征对于时间的高阶导数也被引入到信号模型中。论文[6]和[17]就用到了级联的MFCC以及能量的一阶和二阶导数作为特征向量。某些系统只用到特征的导数而不是绝对特征[7],[12]。使用特征导数往往会放大噪声[10],但同时能够滤除线性是不变或者是慢变信号带来的畸变(例如均衡)。倒谱均值归一化(Cepstrum Mean Normalization ,CMN)方法就能用于减小线性慢变的信道失真[17]。如果使用了欧几里得距离,建议使用均值减法(mean subtraction)和归一化方差变量。一些系统例如[6],[17]会用变换(如PCA)压缩特征值向量。
当然三元化[13]、二元化[4],[12]这种非常低精度的量化方法也广泛应用。量化的目的就在于增加算法对于失真的鲁棒性([4],[12])、归一化([13])、易于硬件实现、减少内存使用以及方便后续模块的处理。文章[5]和[12]中,二元序列要求提取错误校验字。在文章[5]中,为了减少指纹的冲突概率,使用离散化来增加随机性。
4、指纹模型
指纹模型模块通过一帧一帧地计算主要分量的方式获得一系列的特征向量。在空余的时间里,改善整个数据库和当前录音的冗余,能够有效减少指纹大小。
通过综合全首歌的多维向量序列到一个向量的是指纹的一种非常简明的形式。Etantrum[18]计算出一段30秒的音频信号中基于16个子带滤波能量的方差和均值的向量,并用512个比特来标记。这个标记随着原始的语音一起传输到服务器用于识别。Musicbrainz的TRM标记[19]包括这么一组向量:平均过零率、估计的每分钟节拍数BPM、平均谱和其它反映一段语音(26s)的特征。上面的两个例子计算效率非常高并且指纹形式非常简洁。这些方法被用于关联MP3文件到数据库(题目、作者等等),并且它具有特异性,服务端和客户端要求低复杂度,音频流剪切和广播要求鲁棒性。
指纹也可以是一组特征序列(跟踪轨迹、轨迹等),例如文章[15],当然这些序列也可以是二元或者三元的,例如文章[4]。文章[16]使用二元编码的频带表示向量序列作为指纹来减少内存使用。
一些系统,例如[15]和[19],特征包括高级音乐意义的属性,例如像节奏(BPM)或者是突出的基音。
为了找到次优的启发式特征,Burges[14]等人使用OPCA的多层次来减少时间意义上特征向量的本地统计冗余。另外,减少维度、对于平移和倾斜额外的鲁棒性也是设计变换需要考虑的因素。
一首歌里的“全局冗余”在文章[17]中也有探索。如果假设多个音频段的某些特征是相似的,那么可以通过聚类特征向量获得更加简洁的表现形式。这样可以通过码本的形式来简洁表示这些特征向量或者特征向量组。这种近似会导致音频的时间变化特性消失。如果像文章[7]一样,把短时的统计特性也收集起来,结果可以获得高识别率和快速的匹配。这是因为考虑到了时间相关的特性和减少了序列的长度。
文章[6]和[17]使用了指纹模型来进一步减少全局冗余,这个原理对于语音搜索非常具有启发意义。在语音中,使用声音类别的字母表,例如,电话能够用于分段原始语音信号变成文本,这样能够大大地减小冗余而不丢失太多的信息。同样地,可以把一段声音看成是由有限个声音类别组成的句子。例如感知上相同的打鼓声音大量出现在流行音乐中。这种近似产生服从于声音类别表的由一系列索引组成指纹。这些声音类别可以通过无监督的聚类算法和用HMM模型建模来估计。信号时间上的统计建模能够减少局部的冗余。指纹留存着声音随着时间变化的信息,表现为声音类别一组索引。
在文章[5]中,离散的序列被映射到误差校验字的字典中。在文章[12]中,误差校验码在以索引方法为基的空间中。
5、距离和搜索方法
A、距离
距离测度是一个与模型类型非常相关的概念。相关性在比较向量序列的时候广泛使用。文章[15]中,应用了欧几里得距离和为处理不同长度序列的欧几里得轻微变种。在文章[8]中,使用根据熵估计获得最近邻属性作为距离。在向量特征序列被量化的系统中,Manhattan距离(二元时为汉明距离)被广泛应用[4]。Mihcak等人[5]称,指数伪范数(“Exponential Pseudo Norm” (EPN))的另一种误差测度能够比线性范数更合适区分距离的远近。
目前我们展示一种根据模板匹配范式的识别架构[9]:参考样本(存储在数据库里的指纹)和测试样本(从未知音频抽取的指纹)使用相同的格式并且更加相同的距离测度(例如汉明距离、相关性等等)做对比。在某些系统中,只有参考样本的指纹才作为真正的指纹,这些指纹可以被简洁地建模为码本或者是一组HMM的索引,例如文章[7],[17]。在这些例子中,通过直接比较未知音频的特征序列与知识库中存储的参考信号指纹获得距离测度。在文章[7]中,通过特征向量序列与不同的码本匹配来计算距离测度。对于每个码本,误差是累积的。未知的音频信号分频到具有最小累积误差的类别中。在文章[17]中,使用Viterbi算法揉和特征序列和指纹(其特征为描述在HMM声音类别中一组串联的索引),最后在数据库中选出最可能的通路。
B、搜索方法
除了指纹匹配中距离测度的定义,如何有效地把未知语音与可能几百万个指纹做对比也是系统易用性的基本问题。匹配算法依赖于指纹信号表现形式。向量空间能够利用空间存储算法的高效性[1]。在一个匹配发生时,一般的目标是建立数据结构、索引并且减小匹配距离计算次数。正如Chavez等人所述,大部分基于索引的算法近似地搜索等价类别结构集合,舍弃另一些类别,最后搜索剩下的部分[20](例子在文章[3])。用更简单的距离来快速评估许多假设,以及使用索引方法来克服复杂距离的蛮力匹配的想法在CBID相关的文章中有体现,例如[21]。Haitsma等人提出一种指纹的可能性片段的索引,它能够指向歌曲的位置。对于文章[4]中的穷尽搜索中,候选歌曲和位置列表能够非常有效并且提供精确的搜索。在文章[6]中,使用了启发式的方法,它类似于在计算生物学中匹配DNA的方法,这能够提升指纹是一系列符号的系统的搜索速度。Kurth等人在文章[12]中提到了使用从声音二元序列抽取的码字作为索引。这些方法尽管非常快速,但是用于建立索引的关键字会导致漏警错误。正如文章[22]中证明的,为了保证没有漏警,用于舍弃不可能假设简单的距离必须低于更复杂距离的下界。
6、假设检验
略。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。