用坑函数匹配进行基音估计_第1页
用坑函数匹配进行基音估计_第2页
用坑函数匹配进行基音估计_第3页
用坑函数匹配进行基音估计_第4页
用坑函数匹配进行基音估计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用坑函数匹配进行基音估计陈必红深圳大学理学院数学系(518060)email:math摘 要:声音可分为乐音(浊音)和噪音(清音)两种。乐音是在短时间内近似呈现周期性的声音。在声音识别中需要测出乐音的振动频率(称为基音)。本文给出了一种坑函数匹配技术寻找频率的峰值点来进行基音的测量,取得了较好的效果,相应的C源程序也在FTP网站上给出。关键词:语音识别;基音检测;基音估计引 言本文的研究是一个大课题的一部分。大课题是希望一个人唱上一段歌曲后,计算机能够知道他唱的是什么歌。而唱歌过程中的乐谱和每一时刻的声音振动频率相关联。这振动频率也称作声音信号中的基音。即首先要求计算机能够估计出每一时刻的振动

2、频率,这在语音识别中被称为基音检测或基音估计。在尝试了文献提出的各种基音估计技术后,觉得这些技术误差都比较大,效果不好。本文给出了一种坑函数匹配技术来寻找各个谐波的频率,从而获得基频的技术,取得了良好的效果。研究结果的执行程序在网址短时傅里叶变换我们用44100Hz的采样率录下一段唱歌的声音。为了获得每一时刻的基频,需要在那个时刻附近截取一小段时长的样本。这一小段时长的长度不可过长,因为我们是要知道“瞬时频率”,却也不可过短,至少最低的基频也有机会振荡几周。我们选择每次取4096个样本值,相当于4096441000.093秒的时长,这样,低至100Hz的周期信号,也有机会振荡10周左右。那么,

3、当获得了某一瞬时的4096个采样值构成的片断之后,我们是不是就直接进行4096点的FFT(快速傅里叶变换)呢?那是不行的。因为我们将要测量的是频率值,即与变换后的数组下标有关系,从测量精度考虑,也是频点越密,精度越高的。因此,在这4096个采样值后面补零补到16384个点的长度,做16384点的FFT。做完之后获得的16384个点的复数值,前面一半8192个点就代表了全部的频率信息,第8192个点对应于频率22050Hz。但就我们的课题而言,我们只对前面1000个点感兴趣,它覆盖了从0Hz到2691Hz的语音信号,对于识别基频是足够了(想到在电话中唱歌我们仍然能够知道唱的什么歌)。而这样变换后

4、的频率点的间隔为2.7Hz,是此方案的测频量化误差。大家知道,一个周期为T,或者说频率为fb=1/T的信号函数s(t),总是能够表示为傅里叶 - 1 -级数的形式:Ns(t)=aksin(2kfbt+k) (1)k=1其中的N在一般教科书中是无穷大,而在实际情况中,去除掉超声波的成份后当然是有限的。我们的目标,是要测量上式中的基频fb。因此,对s(t)做傅里叶变换再取模得S(f)后,在频率点fb, 2fb, 3fb, 处将会出现单位脉冲的冲击。而在实际操作时s(t)是有限时长的,因此就不是冲击而是一个尖锐的峰值。图 1 图 1是笔者唱歌中的一个小片断的FFT变换后绘制的图形,在这个瞬间由于正处

5、于乐音中,所以明显看出等间隔的峰值。S 图 2而图 2则是在唱歌过程中的各乐符转换中产生的清音,并不是周期信号,因此呈现复杂的噪声形式。虽然其中有杂乱无音的各个峰值,却明显不是乐音,遇到这种声音片断应当判定为噪声,并不进行基频估计。注意我们只关心FFT变换后取模获得的频谱函数,对于相位不感兴趣,也是因为人耳对于相位并不敏感。- 2 -用坑函数匹配找到各个峰值点观察图 1,我们希望将函数中对应于周期函数的频谱的各个峰值点f1,f2,f3, 都能够被搜索出来,在这些点处,函数通常都有一个取局部极值的针形的拔地而起的峰值形状。因此,首先我们寻求一种坑函数(f),坑函数(f)是这样一种函数,它在其它地

6、方的函数值都约等于1,而在原点则以极快的速度下降为0。如图 3所示。因为象是在原点处挖了一个坑,因此称之为坑函数。当然,坑函数有许多种,哪一种更为有效,坑的宽度应当是多少,则由试验或者理论分析来确定。图 3因此,对于一个频谱函数S(f),要考察它在一给定的频率点f0处是不是存在着峰值,首先要看它在f0处是否取极值。当然,取了极值,也不能够保证它就是我们所要的峰点,然后再计算S(f)在f0点附近的局部功率W(f0),即W(f0)=f0+ff0fS(f)2df (2)其中f取适当小的值。然后,我们用S(f)乘上坑函数(ff0),则如果S(f)在f0点处存在着峰值,这个乘坑函数的动作势必导致局部功率

7、的惨重损失。设乘上坑函数(ff0)后的局部功率为U(f0),即U(f0)=f0+ff0fS(f)(ff0)2df (3)因此,将W(f0)与U(f0)之比称为S(f)在f0的峰度(成峰的程度),记作P(f0),即 P(f0)=W(f0) (4) U(f0)当在某频率点f0处P(f0)的值超过了某一事先设定的阈值p0,我们就认为频谱函数S(f)在f0处存在着峰值了,或者说f0是S(f)的一个峰点。用这种办法编写程序,对于每一个时间瞬间片断进行FFT,获得的局部频谱函数,再对之进行扫描找到所有的峰值点,结果大获成功,发现如图 1所示的大部分峰值点都能够正确找到,而如图 2所示的噪声或清音情况,即使

8、是频谱上的起伏,也没有被判定为峰值点。 根据各峰值频点作基音估计因此,从每一瞬间的时间片前后取出4096个样本点,通过补零加到16384点作FFT再取模,获得短时FFT频谱S(f),然后在其中用上一章的坑函数匹配技术进行逐点扫描找到N个 - 3 -峰值点f1,f2,fN, 如果N=0则说明是噪声(清声)。如果N1,则找到的峰值点就是对基音的估计。下面讨论当N>1时的情况。能不能就将最低的峰值频率点作为基音估计呢?经过试验,发现效果不理想。原因在于,即使在乐声发声期间,仍然有背景的噪声干扰,而这个噪声往往是在低频处幅度较大的,当基音频率较低时,就会因为这种干扰而导致检测不出。此外,观察公式

9、(1),有的时候傅氏级数的基波幅度a1甚至二次谐波幅度a2都等于0,或者近似等于0,而函数的周期仍然是1/fb。这都导致检测出来的最低峰值点f1并不一定就是基音频率,而有可能是基音频率的倍数。观察图 1让人想到,能不能以检测到的N个峰值频率中的最短距离作为基音频率的估计呢?试验发现也不理想。再从公式(1)来说明,如果其中的各个谐波的幅度都等于0,只有a3与a5不等于零,则函数仍然以1/fb为周期。在一个人唱歌的过程中,由于要唱歌词,导致周期振荡经常受到各种形式的噪声干扰,因此能够检测出哪些峰值频率,是不能够确定的。因此,合适的办法,也是充分利用到各个峰值频率的办法,就是寻找f1,f2,fN这N

10、个峰值频率的最大公约数,当然,是实数的最大公约数。而且,由于频率上的量化误差,这个最大公约数也是近似的。也就是寻找一个最大的基频fb使得各个峰值频率都正好近似是它的倍频,这就是我们要估计的基频了。编程实现根据前面几节的办法,用VC+6.0编写了一个基音估计程序,全部源程序在网址上下载,执行程序名为cbhecho.exe,无须安装,将它拷贝到本机直接运行即可。图 4图 4是程序的界面,是在我刚对着话筒唱完简谱“1 3 5 3 1”之后显示的曲线。右下角的视图曲线显示了这几个简谱的变化情况,而左边的视图曲线显示了其中的一个小的时间片的FFT后的频谱函数曲线,曲线都是用的蓝线。而用坑函数寻找到的各个

11、峰值点则用浅绿色的直线绘在相应的频率处。每次单击按钮“开始录音”后,对着话筒缓慢地唱一段歌曲(不要超过10秒),则程序首先播放一遍录得的声音,然后进行基音测量,再根据测出的基音频率调制一个正弦波送到扬声器。- 4 -对话框中的水平和垂直滚行条分别控制右边和左边两个视图的红色游标线,则上方的静态文本框显示出有关峰度等信息,及是否噪声的信息。结语在获得了对基频的测量后,下一步可以做许多模式识别的事情。例如,可能出这样的一个软件产品,当使用者对话筒唱一句歌曲后,能够通过数据库检索出他唱的是什么歌,从而调出相应的伴奏音乐文件。此外,之所以在上面要求缓慢地唱一句歌,也是因为0.1秒的短时不够短。下面打算

12、进一步试验0.05秒的短时FFT变换的效果。本文并没有对为什么要用坑函数匹配技术作出理论上的说明。这其实来源于我提出的“观测过程”理论,或者最大似然估计理论。由于篇幅所限,这些都将在进一步的论文中进行叙述。无论如何, 与文献1,2,3中的算法和各种其它的基音检测算法相比,本文提出的首先找到频谱上的各个峰值点, 再估计基音频率, 就长远看来是声音信号(不仅仅是语音信号)处理的方向。例如,对一段有各种乐器及男女声高低音混合的交响乐曲, 一个资深的音乐专家是能够分析出其中的各个乐器和声部的, 则人能够做到的, 早晚人工智能也能够做到。而要做到这一点, 从频谱上找到各个峰值点是必不可少的一步。参考文献

13、1 美F.Q.Thomas. 离散时间语音信号处理. 赵胜辉, 刘家康, 谢湘等译, 北京: 电子工业出片社, 2004年.2 易克初, 田斌, 付强编著, 语音信号处理. 北京: 国防工业出版社, 2003年.3 张雄伟, 陈亮, 杨吉斌编著, 现代语音处理技术及应用. 北京: 机械工业出版社, 2003年.- 5 -The Pitch Estimation by Hole Function MatchingCHEN BihongDepartment of Mathematics,Shenzhen University,Shenzhen,P.R.China (518060)AbstractS

14、ound can divide to music sound and noise sound. The music sound is period in short time. In sound recognition, the frequency of the music sound (pitch) need to be estimated. In this paper, a technology of finding peak value point of frequency by hole function is given, and a good result is got. The

15、C+ source code is given on a FTP network station.Keywords: pitch estimation, pitch recognition, frequency estimationReferences1 F.Q.Thomas. Discrete-Time Speech Signal Processing: Principles and Practice. Translated by Zhao Shenhui,Liu Jiakang, Xiexiang, BeiJing: Publishing House of Electronics Industry, 2004. (in Chinese).2 Yi Kexiong, Tian Fu, Fu Qiang, Speech Signal Processing. BeiJing: Publishing House of De

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论