语音信息采集方法探讨毕业论文.doc
语音信息采集方法探讨【摘要】语音信号的基音周期检测是语音信号处理中的一个问题,在语音处理发展过程中出现了众多的基音提取方法,但所有这些都有它们的局限性,所以可以说,对各种说话人、广泛应用及适用的环境都能给出满意结果的有效基音检测方法至今还没有出现。本文主要是对语音信息的采集,将采集的语音信息通过Goldwave软件转换成模拟信号,然后利用Delphi编程软件,经过傅立叶变换,将模拟信号转变成数字信号,并应用了基音周期提取算法。该算法利用语音波形的一次峰值点和二次峰值点的幅度和位置以及后峰到前峰的距离等几种属性,来判断决定基因周期值,具有算法简单、运算量小、能准确定位各基音周期位置的特点。此外,由于不需要加窗处理,免去了加窗处理带来的平均效应,该算法在处理相邻基音周期差值较大的语音信号时具有明显优势。该算法比较适合于做各种基音同步算法的前处理。【关键词】语音信号处理 ;傅立叶变换;峰值;修正自相关;中心削波;平均幅度差函数(AMDF);基音周期第一章 引言现代语音数字处理,是研究人与人、人与机器之间的语音通信问题。包括语音通信,语音合成和语音识别。语音通信是在人与人之间进行的,不存在对语音合成和识别的问题。主要在于利用波形编码和分析合成两类方法达到高效率的良好语音传输;语音合成则要使用分析存储合成语音信号或按语言规则从文本到语音的方法,使机器能合成语音。语音识别基本方法是预先分析出语音的特征参数,在机器存储后,通过比较的方法达到识别的目的。根据现代语言学对语音信号研究来看,区分不同语音,至少要把握语音的三个特点,即分清浊音与清音、提取浊音的基音周期和共振峰识别。其中基音周期是最重要的语音信号特征参数。语音信号是一种典型的非平稳信号。而我们常用的信号处理方法比如傅立叶变换,自相关算法等都是针对的平稳信号的。那怎么应用这些算法呢?这需要考虑到语音的形成过程是与发音器官的运动密切相关的,这种物理运动比起声音振动速度来讲要缓慢的多,因此语音信号常常可假定为短时平稳的,即在10-20ms这样的时间段内其频谱特性和某些物理特征参数可近似地看作是不变的。这样我们就可以采用平稳过程的分析处理方法来处理了。基于上述特点,我们常常以10-20ms步长为语音信号分帧,如果是求基音周期也是每帧有各自的基音周期。基音周期的倒数就是基频,这个我们应该是比较熟悉的了。基音提取是语音信号处理中的一个比较重要的问题,它的方法总的来说可归纳为3类:时域法、频域法、时频混合法。目前常用的是时域法中的并联处理法和自相关法,前者容易实现,但抗噪声性能不强。本文提出的峰谷修正自相关法克服了通常使用的并联处理法抗噪声性能不强和自相关法不易实现的不足,同时具有并联处理法容易实时实现及自相关法抗噪声性能强的优点。第二章 语音信号的采集与处理2.1 语音信号的采集要想用计算机分析人的语音,就要将话筒中传来的语音信号转换成计算机所能处理的数字信号。这个从模拟量到数字量的转变过程称模数变换。现在只要在计算机上利用声霸卡再外接一个话筒就可以很容易地将话筒中传来的模拟语音信号采集成数字信号存入计算机。根据Nyquist 采样定理,信号的采样速度只需大于信号带宽两倍以上即可保证信号的采集不会丢失信息。因此,采样前要先对语音信号进行预滤波处理,其目的有两个:首先是用低通滤波器限制信号中的频域分量超过采样频率一半的部分,以防止信号混叠干扰;其次是要用高通滤波器抑制50Hz 的电源干扰。从总的效果来看,预滤波处理相当于使用一个带通滤波器对语音进行处理。进行预滤波处理后,再采用合适的采样频率进行采样。目前,设计较好的声霸卡通常都带有带通滤波器。由于语音信号的能量绝大部分集中在4KHz 以下的频段内,因此,语音识别时常用的采样频率为10KHz 或16KHz。2.2 语音信号的处理与分析完成了信号采集只是语音信号处理的开始,接下来就要对录制的声音进行处理。我选用Goldwave声音处理软件来处理所要研究的声音。2.2.1 声音处理软件的介绍GoldWave 是一个声音编译器,播放器,刻录机和转换器。 它能为激光唱碟,网站,答录机或窗口声音产生健全的文件。全套效果和编辑特征为专业的健全制造被包括在内。较高的质量声音激光唱碟可能被藉由连同激光唱碟录灌机软件使用 GoldWave 产生。下图便是该软件的窗口。Goldwave窗口图打开声音文件后的图2.2.2 A / D(模/数)转换利用Delphi开发软件,编写转换程序。在PC机上通过Delphi 环境下模拟的语音信号压缩与还原的过程,通过对还原图象的分析与讨论,我们得到了较好的压缩效果。再利用傅立叶变换,从而达到压缩数据的目的。1.Delphi软件简单介绍Delphi是美国Borland公司推出的功能强大的应用程序开发工具,是可视化应用编程开发环境、可重用性面向对象编程语言、快速编译器和数据库的完美结合。它的基础语言是Pascal程序设计语言,因而它继承了语言的优点,如代码结构清晰、可读性好和代码执行效率高等。2.傅立叶变换介绍 傅立叶变换是线性分析的一个有力工具,它使我们能够定量的分析诸如数字化的系统、采样点,电子放大器,卷积滤波器、噪声,显示点等的作用。这里我们讨论的是处理记录下的数据。 傅立叶变换是一个线性积分变换,它将一个(一般而言)有n个实变量的复函数变换为另一个有n个实变量的复函数,F(s)的傅立叶逆变换定义为: (2-2-2)傅立叶积分定理指出: (2-2-3)也就是说变换实互逆的,即: (2-2-4)函数f(t)和F(s)被称作一个傅立叶变换对。根据因子2在等式中的不同位置,(2-2-1)、(2-2-2)、(2-2-3)会有其他的表达式。在这里频率变量是用每个单位t的整周期(而不是弧度)个数来度量的。3.傅立叶变换的应用(声音处理)(1)输入语音信号波形 由于失真,输入的语音经过Goldwave软件处理后,形成的波形图显得不太连续,我们看到的是一个个连续的短线段构成的。(2)傅立叶变换现在我们对模拟的心电信号进行傅立叶变换压缩并还原,变换后的图象如下图,其中黑线是模拟的图象,红线是还原后的图象,还有一个是一次变换后的频域图。我们可以看到还原的图与原来的模拟图是很接近。如下图所示:有失真 其中,下图是模拟图和还原图的重合。 从这个图,我们可看出有失真发生。之所以这样,是因为在这一点有断点产生。而分开的模拟图和还原图分别是:模拟图还原图下图则是语音图的频域图: 经过在PC机上模仿对语音信号的快速傅立叶变换,其效果不是很理想。实际语音波形不会象输出的放大图那样有许多毛边,而是比较平滑的函数曲线,所以我们测试过程中加入了平滑点,为了使模拟图更接近实际波形,但考虑到失真问题,我们只加了10个平滑点。在实验中我们看到如果曲线不光滑,压缩效果就差一些。2.2.3 语音信号分析接下来要对采集的语音信号进行分析,从中抽取语音识别所需的信号特征。在语音信号分析中,我们首先要研究语音信号的特点,这可以从时域和频域上加以讨论。语音的最小组成单位是音素,最小发声单元是音节。一个音节是由元音和辅音构成的。无论从能量上看还是从时间上看,元音在一个音节中都是占主要部分。所有的元音都是浊音。辅音则是出现在音节的前端、后端或前后端,具有调整和辅助发音的作用。在语音信号中,若辅音遭到破坏,则将从很大程度上影响语音的清晰度。(1) 时域 在语音的时域分析中,主要有两个特征:短时能量和过零率。 短时能量是语音信号在某一时间段中(常取10ms 25ms)的能量。过零率是指语音信号的振幅在单位时间中穿过零点的次数。从时域上看,元音信号的振幅较大,过零率比辅音信号低,短时能量较大。元音在整个音节的总能量中占绝大多数,且信号具有相当良好的周期性,而这种周期性与人声带振动的周期性密切相关。通常认为,这种周期长度等于人在发浊音时喉及声带振动的周期,亦称为基音周期,是元音信号中最重要的参数之一,也是元音信号所特有的。基音周期的准确估计对语音编码、语音识别(特别是汉语的声调识别)及信号的频谱估计都有极其重要的作用。一般情况下,利用元音信号的自相关系数,可以较准确地得到信号的基音周期。另外,在信号分析中,短时平稳的统计性质主要存在于语音的元音段中。对语音信号来说,这种短时平稳的统计性质视语音发声的快慢而在元音段中的每一时刻约可存在10ms 30ms 左右,这也是在信号处理中可以对语音信号进行分帧处理的理由。在辅音信号中,信号的幅度较小,短时能量也较低,但其过零率较大。 在比较安静的环境下,仅依靠短时能量与过零率这两个特征就可以较好地完成语音信号的起终点判断和信号的浊/ 清音判决(U/V 判决)。但需要指出的是,这两个特征比较容易受外界噪声的干扰,鲁棒性(Robust) 较差。当语音信号的信噪比较低时,信号的短时能量和过零率将受到很大影响。相比之下,利用元音信号的自相关系数来作信号的浊/ 清音判决则具有较好的抗干扰能力。(2) 频域在频域分析方面,早期的分析方法是采用语谱仪来分析和记录语音信号的短时频谱。现在由于信号处理技术能力的提高,人们可以直接利用计算机进行语音的频谱分析。浊音的短时频谱有两个特点:其一是它有明显的周期性的谱线结构,其谱线间的距离与浊音的基音频率相吻合;其二是频谱的包络中有几个明显的凸起点,称为共振峰,凸起点处的频率称为共振峰频率。共振峰频率由底到高排列,分别为第一共振峰、第二共振峰、第三共振峰一般浊音中可以分辨的共振峰有5 个左右,其中前3 个对于区分不同的元音具有很大的作用。清音的短时频谱则没有这两个特点,它十分类似于一段随机噪声的频谱。(3)时/频转换周期信号可借助傅立叶级数展开成一系列离散的简谐分量。对于非周期信号,可以通过傅氏变换表示它的频域成分。时域信号f(t)的傅氏变换是:式中F(s)为信号的频域表示,f(t)为信号的时域表示,其中j2=-1。傅氏变换可将时域信号变换成连续的频域表达式。以下是语音分析图.第三章 语音信号基音周期提取3.1 人用视觉提取基音周期的过程人用视觉提取周期的一般过程为:首先找出各适当大小波形段内的最大峰值点(本文中的峰值点是指该点的采样值的绝对值为最大,下文中的峰值均取负的峰值),以这些最大峰值点为边界,将语音波形划分为各个小段,然后观测这些相邻的小段是否相似,如果相似,那么这些最大峰值点间的间隔就是所要提取的基音周期值。要想让观察者总结出相邻小段是否相似的详细知识是困难的,事实上,观察者判断的主要依据还是那些适当大小段内的最大峰值点。只要准确地检测出这些最大峰值,就可准确地提取大部分浊音段的基音周期值,这种情况比较典型的是图(1)的语音波形。图(1) 某一语音合成系统产生的一语音波形(基音周期不连续较明显)而有些浊音信号的尾部具有类似衰减的正弦波波形(如图2示),这时会在很大间隔内检测不到最大峰值。此时,人会参考前一基音周期,在前一基音周期大小的间隔附近检测是否有一峰值,如果有,那么将这一峰值列入上述的最大峰值。本文以这些最大峰值点来标定各基音周期所处的波形段,因此称这些最大峰值点为基音标记点。图2 某一韵母部分发音波形(尾部类似衰减的正弦波)3.2 修正自相关法在周期函数内,自相关函数在时延等于函数周期的地方呈现一个最大值,如图3所示图3 语音信号的自相关函数其中,(a)为元音A的自相关函数,(b)为鼻音n的自相关函数,(c)为摩擦音s的自相关函数。将该原理用于基音估值时,由于通常语音信号并不是严格的周期函数,基音频率和共振峰频率有所变动,因此语音自相关函数的最大值就可能低于且宽于期望值。另外在一些浊音中第一共振峰频率可能会等于或低于基音频率,如此时其幅度很高,就可能在自相关函数中产生一个同基音频率峰值相比拟的峰值。为此采用频谱平坦化的方法使得所有谐波基本上具有相同幅度,使第一共振峰不再占有幅度优势,自相关函数起到应有作用。借助于每个通道都带有自动增益控制的自适应滤波器组实现频谱包络搬移七十年代Markel使用简化的逆滤波器跟踪算法(SIFT)对自相关法作出修正改进。逆滤波器提供了简化的频谱平坦器。通过输出与门限的比较以确定浊音。3.3 非线性处理法包括中心削波和平均幅度差(AMDF)方法。1 中心削波法中心削波法是借助中心削波器消除语音信号的低幅部分,削波点中语音信号的峰值幅度来确定,如图4(a)所示。将幅度低于某个门限电平T(一般的T值要自动的保持在语音信号峰值幅度的30%)的波形全部剔除,如图4(b)所示。图4 利用中心削波剔除语音信号的低幅部分其中,(a)为中心削波的输入函数,(b)为输入信号,(c)为削波器的输出然后令经过中心削波的语音信号通过自相关器,此时自相关函数在多数时延上为零,在基音周期位置上呈现大而尖的峰值,及次要的很小的峰值。如图4(c)所示。图(a)为中心削波的输入函数中心削波法中,还有另外两个削波函数(Dubnowski,1976),如图5 (a)、(b)所示。 (a) (b)它们的函数分别是: (a)函数 (b)函数如果让语音波形通过一个传递函数为y(t)=x3(t)的非线性电路,同样可以使幅度在非线性处理后,削去语音的低幅度成分,且不必保持一个门限。2.平均幅度差函数(AMDF)法 平均幅度差函数(AMDF)法是和在1974年各自确立的方法。利用自相关函数的关键在于确定时延。他们都选用了延时信号样本之差的绝对值作为相似度的测度,即幅度差函数表明,当延时k等于基音周期时,该函数有最小值。与标准自相关函数比较,Dk与近似成比例。在AMDF算法中的运算逻辑找出这个最小值,并输出一个基音周期。如果找不到这个很小的最小值,表明不存在浊音。3.4 细基音计算过程 此计算功能是利用插值公式来提高输入信号基音周期的运算精度。假定整数基音周期为T(样数点),并且在之间有最大值。于是计算出和,比较它们的大小来判断最大值可能是在T和T+1之间还是在T-1和T之间。如果,那么最大值就可能位于T-1和T之间,基音周期减去一个偏移就可获得,反之亦然。偏移的小数值可以通过下面的插值公式计算得到。其中计算方法为(式)所定义。在某些情况下,这个公式计算出的偏移超出了0.0到1.0的范围,所以这个偏移被限制在-1和2之间。细基音计算过程得到的归化自相关下面的等式给出:细基音周期即为,其范围是20160。第四章 结束语本文研究的是在利用PC机如何进行声音信息采集,对采集的语音信息用语音处理软件转换成模拟信号,再利用Delphi语言编程,利用傅立叶变换将采集的声音模拟信号转换成数字信号,再加以研究分析.鉴于我们的水平有限,做出的设计还比较肤浅,且很多仅是我们的想法,还没应用于实际。通过本次毕业设计,我学到了很多理论知识,比如像基音周期,更加深了对傅立叶变换的了解。我不仅学到了理论,我的动手能力也得到了明显的提高。在此,我要衷心感谢我的论文指导老师陈主任,感谢系里给我们提供了毕业设计场所。【参考文献】 1 邹绘华 “超低速率语音编码算法研究” 大连理工大学硕士学位论文 2002年2 朱兆敏 “基于傅立叶变换的心电信号的压缩与传送” 阜阳师范学院 2003年3 陈永彬 王仁华 “语言信号处理” 合肥:中国科学技术大学出版社 1990年4 我校图书馆主页上的中国期刊全文数据库的IP地址:210.45.38.232【译文】The method in collecting speech signalChen qiujuan(Computer department, FUYANG Normal College 236032)Abstract:The pitch period examination of the speech signal is a problem that speech signal handles inside.There are many method withdrawing fundamental tone which appearing in speech handle development process ,are limited.So we can say that the pitch period examination of the speech signal still hasnt appeared on every kind of environment that talks the person, extensive application and suitable for use can give the valid fundamental tone examination method of the satisfaction result .This thesis mainly about collecting the speech signal, which will be transformed to analogical signal. Then the analogical signal was transformed to data by Delphi and Fourier transition .Finally we find out the way to withdraw the fundamental tone.This algorithm gets pitch periods by applying several attributes,such as the amplitude and position of peak and quadric peak of speech waveform and distance from one peak to the former peak.The algorithm has the following advantages(1)it is simple,and with high accuracy (2)it doesnt need too much calculation and (3)it can locate the pitch periods.In addition,without window processing,the average effect brought about by windowing is absent.When handling speech signals of large difference between two pitch periods,this algorithm has its apparent advantage,so the algorithm is fit for working as a pre-processor of the pitch-synchronous algorithm.Key phrase: speech signal processing;Fourier transition;peak valve;Revise from related;Weaken centeral wave;Bad function in average range( AMDF);pitch period【附录】 1)对信号用快速傅立叶变换源程序如下:Procedure FOUR1(var DATA:array of real; NN, ISIGN:integer);var N,J,JJ,I,M,II,MM,ISTEP,MMAX:integer; THETA,WR,WI,WPR,SUM,WTEMP,Y1,Y2,TEMPR,TEMPI,WPI:real;begin N:=2 * NN; J:=1; For II:=1 To NN do begin I:= II * 2 - 1; If J > I Then begin TEMPR:=DATAJ; TEMPI:=DATAJ + 1; DATAJ:=DATAI; DATAJ + 1:=DATAI + 1; DATAI:=TEMPR; DATAI + 1:=TEMPI; end; M:=N div 2; While (M >= 2) And (J > M) do begin J:=J - M; M:=M div 2; end; J:=J + M; end; MMAX:=2; While N > MMAX do begin ISTEP:=2 * MMAX; THETA:=6.28318530717959 / (ISIGN * MMAX); WPR:=-2 * Sqr(Sin(0.5 * THETA); WPI:=Sin(THETA); WR:=1; WI:=0; For II:=1 To (MMAX div 2) do begin M:= II * 2 - 1; For JJ:=0 To (N-M) div ISTEP) do begin I:= M + JJ*ISTEP ; J:=I + MMAX; TEMPR:=WR * DATAJ - WI * DATAJ + 1; TEMPI:=WR * DATAJ + 1 + WI * DATAJ; DATAJ:=DATAI - TEMPR; DATAJ + 1:=DATAI + 1 - TEMPI; DATAI:=DATAI + TEMPR; DATAI + 1:=DATAI + 1 + TEMPI; end; WTEMP:=WR; WR:=WR * WPR - WI * WPI + WR; WI:=WI * WPR + WTEMP * WPI + WI; end; MMAX:=ISTEP; end;end;Procedure REALFT(var DATA:array of real; N, ISIGN:integer);var I,I1,I2,I3,I4,N2P3:integer; WR,WI,C1,C2,THETA,WPR,WPI,WIS,WRS,WRI,H1R,H1I,H2R,H2I,WTEMP:real;begin THETA:=6.28318530717959 / 2 / N; C1:=0.5; If ISIGN = 1 Then begin C2:=-0.5; FOUR1(DATA, N, 1); end Else begin C2:=0.5; THETA:=-THETA; end; WPR:=-2* Sqr(Sin(0.5 * THETA); WPI:=Sin(THETA); WR:=1 + WPR; WI:=WPI; N2P3:= 2 * N + 3; For I:=2 To (N div 2) + 1 do begin I1:=2 * I - 1; I2:=I1 + 1; I3:=N2P3 - I2; I4:=I3 + 1; WRS:=WR; WIS:=WI; H1R:=C1 * (DATAI1 + DATAI3); H1I:=C1 * (DATAI2 - DATAI4); H2R:=-C2 * (DATAI2 + DATAI4); H2I:=C2 * (DATAI1 - DATAI3); DATAI1:=H1R + WRS * H2R - WIS * H2I; DATAI2:=H1I + WRS * H2I + WIS * H2R; DATAI3:=H1R - WRS * H2R + WIS * H2I; DATAI4:=-H1I + WRS * H2I + WIS * H2R; WTEMP:=WR; WR:=WR * WPR - WI * WRI + WR; WI:=WI * WPR + WTEMP * WPI + WI; end; If ISIGN = 1 Then begin H1R:=DATA1; DATA1:=H1R + DATA2; DATA2:=H1R - DATA2; end待添加的隐藏文字内容3 Else begin H1R:=DATA1; DATA1:=C1 * (H1R + DATA2); DATA2:=C1 * (H1R - DATA2); FOUR1(DATA, N, -1); end; end;使用说明:子过程REALFT需要调用FOUR1。REALFT(DATA,N,ISIGN)N :整形变量需要输入参数,为采样点数的一半,是2的整数幂。ISGN:整形变量需要输入参数,取+1或-1,是计算一个实数序列的傅立叶变换,否则是计算一个复数序列的逆傅立叶变换,此时要求次复数序列是一实数序列的傅立叶变换。DARA:实型数组DATA(2N+2),输入,输出参数,若ISIGN 输入+1,则开始存放2N个点的实数序列的傅立叶变换;若ISIGN输入-1,则开始存放N个点复数序列,结束时存放其逆傅立叶变换,这是结果应乘以1/N。2)调用程序如下:procedure TForm1.Button1Click(Sender: TObject);const N=256;vari,j,m,p,q,l,t:integer; r,y:real;data:array1.514 of real;da:array1.514 of real;size:array1.512 of real;beginRefresh;canvas.Pen.Color:=clblack;for i:=1 to 514 do begin datai:=0;dai:=0;end;for i:=1 to 514 dofor j:=1 to 275 do beginp:=getRvalue(canvas.pixelsi,j);if p<=strToint(edit1.Text)then begin datai:=j; break; end; end;for i:=1 to 514 dofor j:=275 downto 1 do begin p:=getRvalue(canvas.pixelsi,j);if p<=strToint(edit1.Text)then begin dai:=j; break; end; end; for i:=1 to 514 do datai:=(datai+dai)/2; m:=strtoint(edit2.text); for j:=1 to (512-m) do begin /平滑y:=0;for i:=0 to m do y:=y+dataj+i;dataj:=y/(m+1);end; For I:= 1 To 511 do begin canvas.MoveTo(i,trunc(datai)+200); / 横坐标的起点 canvas.LineTo(i+1,trunc(datai+1)+200); / 横坐标的终点 end;realft(data,N,1); for i:=1 to 256 do begin sizei:=sqrt(sqr(datai*2-1)+sqr(datai*2); if i=1 then sizei:=datai; end; for i:=1 to 255 do begin canvas.MoveTo(20+i,660); / 横坐标的起点 canvas.LineTo(21+i,660); / 横坐标的终点 if i mod 50=0 then canvas.LineTo(21+i,670); canvas.LineTo(21+i,660-Trunc(sizei+1/50);end;l:=256-strtoint(edit4.text); for i:=l to 256 do datai:=0; realft(data,n,-1); q:=strtoint(edit3.Text); For I:=2 To 511 do begin canvas.Pen.Color:=clred; canvas.MoveTo(i,trunc(datai)/256)+200+q); / 横坐标的起点 canvas.LineTo(i+1,trunc(datai+1)/256)+200+q); / 横坐标的终点 end;end;procedure TForm1.Button2Click(Sender: TObject);begin close;end;