语音信号采集与处理

音频是多媒体信息的一个重要组成部分,音频信号的频率范围大约是20Hz~20kHz。音频信号的采集与处理已经广泛应用于材料无损检测、语音识别、噪声抑制等工程领域。对采集音频信号并进行分析处理的技术和方法进行探讨,具有一定的意义。

绪论

1.1  课题的背景与意义

通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息的形式。语言是人类持有的功能,声音是人类常用的工具,是相互传递信息的最主要的手段。因此,语音信号是人们构成思想疏通和感情交流的最主要的途径。并且,由于语言和语音与人的智力活动密切相关,与社会文化和进步紧密相连,所以它具有最大的信息容量和最高的智能水平。现在,人类已开始进入了信息化时代,用现代手段研究语音信号,使人们能更加有效地产生、传输、存储、获取和应用语音信息,这对于促进社会的发展具有十分重要的意义。

让计算机能听懂人类的语言,是人类自计算机诞生以来梦寐以求的想法。随着计算机越来越向便携化方向发展,随着计算环境的日趋复杂化,人们越来越迫切要求摆脱键盘的束缚而代之以语音输入这样便于使用的、自然的、人性化的输入方式。作为高科技应用领域的研究热点,语音信号采集与分析从理论的研究到产品的开发已经走过了几十个春秋并且取得了长足的进步。它正在直接与办公、交通、金融、公安、商业、旅游等行业的语音咨询与管理。工业生产部门的语声控制,电话、电信系统的自动拨号、辅助控制与查询以及医疗卫生和福利事业的生活支援系统等各种实际应用领域相接轨,并且有望成为下一代操作系统和应用程序的用户界面。可见,语音信号采集与分析的研究将是一项极具市场价值和挑战性的工作。我们今天进行这一领域的研究与开拓就是要让语音信号处理技术走人人们的日常生活当中,并不断朝更高目标而努力。

语音信号采集与分析之所以能够那样长期地、深深地吸引广大科学工作者去不断地对其进行研究和探讨,除了它的实用性之外,另一个重要原因是,它始终与当时信息科学中最活跃的前沿学科保持密切的联系.并且一起发展。语音信号采集与分析是以语音语言学和数字信号处理为基础而形成的一门涉及面很广的综合性学科,与心理、生理学、计算机科学、通信与信息科学以及模式识别和人工智能等学科都有着非常密切的关系。对语音信号采集与分析的研究一直是数字信号处理技术发展的重要推动力量。因为许多处理的新方法的提出,首先是在语音信号处理中获得成功,然后再推广到其他领域。

 

1.2  国内外研究现状

语音信号的采集与分析作为一个重要的研究领域,已经有很长的研究历史。但是它的快速发展可以说是从1940年前后Dudley的声码器(vocoder)和potter等人的可见语音Visible Speech)开始的[1]。1952年贝尔(Bell)实验室的Davis等人首次研制成功能识别十个英语数字的实验装置。1956年Olson和Belar等人采用8个带通滤波器组提取频谱参数作为语音的特征,研制成功一台简单的语音打字机。20世纪60年代初由于Faut和Steven的努力,奠定了语音生成理论的基础,在此基础上语音合成的研究得到了扎实的进展。 20世纪60年代中期形成的一系列数字信号处理方法和技术,如数字滤波器、快速傅里叶变换(FFT)等成为语音信号数字处理的理论和技术基础。在方法上,随着电子计算机的发展,以往的以硬件为中心的研究逐渐转化为以软件为主的处理研究。然而,在语音识别领域内,初期有几种语音打字机的研究也很活跃,但后来已全部停了下来,这说明了当时人们对话音识别难度的认识得到了加深,所以1969年美国贝尔研究所的Pierce感叹地说“语音识别向何处去?”。

    到了1970年,好似反驳Pierce的批评,单词识别装置开始了实用化阶段,其后实用化的进程进一步高涨,实用机的生产销售也上了轨道[2]。此外社会上所宣传的声纹(Voice Print)识别,即说话人识别的研究也扎扎实实地开展起来,并很快达到了实用化的阶段。到了1971年,以美国ARPA(American Research Projects Agency)为主导的“语音理解系统”的研究计划也开始起步。这个研究计划不仅在美国国内,而且对世界各国都产生了很大的影响,它促进了连续语音识别研究的兴起。历时五年的庞大的ARPA研究计划,虽然在语音理解、语言统计模型等方面的研究积累了一些经验,取得了许多成果,但没能达到巨大投资应得的成果,在1976年停了下来,进入了深刻的反省阶段。但是,在整个20世纪70年代还是有几项研究成果对语音信号处理技术的进步和发展产生了重大的影响。这就是20世纪70年代初由板仓(Itakura)提出的动态时间规整(DTW)技术,使语音识别研究在匹配算法方面开辟了新思路;20世纪70年代中期线性预测技术(LPC)被用于语音信号处理,此后隐马尔可夫模型法(HNMM)也获得初步成功,该技术后来在语音信号处理的多个方面获得巨大成功;20世纪70年代未,Linda、Buzo、Gray和Markel等人首次解决了矢量量化(VQ)码书生成的方法,并首先将矢量量化技术用于语音编码获得成功。从此矢量量化技术不仅在语音识别、语音编码和说话人识别等方面发挥了重要作用,而且很快推广到其他许多领域。因此,20世纪80年代开始出现的语音信号处理技术产品化的热溯,与上述语音信号处理新技术的推动作用是分不开的。

    20世纪80年代,由于矢量量化、隐马尔可夫模型和人工神经网络(ANN)等相继被应用于语音信号处理,并经过不断改进与完善,使得语音信号处理技术产生了突破性的进展。其中,隐马尔可夫模型作为语音信号的一种统计模型,在语音信号处理的各个领域中获得了广泛的应用。其理论基础是1970年前后,由Baum等人建立起来的,随后,由美国卡内基梅隆大学 (CMU)的Baker和美国IBM公司的Jelinek等人将其应用到语音识别中。由于美国贝尔实验室的Babiner等人在20世纪80年代中期,对隐马尔可夫模型深人浅出的介绍,才使世界各国从事语音信号处理的研究人员了解和熟悉,进而成为一个公认的研究热点,也是目前语音识别等的主流研究途径[3]。

进入20世纪90年代以来,语音信号采集与分析在实用化方面取得了许多实质性的研究进展。其中,语音识别逐渐由实验室走向实用化。一方面,对声学语音学统计模型的研究逐渐深入,鲁棒的语音识别、基于语音段的建模方法及隐马尔可夫模型与人工种经网络的结合成为研究的热点。另一方面,为了语音识别实用化的需要,讲者自适应、听觉模型、快速搜索识别算法以及进一步的语言模型的研究等课题倍受关注。

 

1.3  本文主要工作

本文简要介绍了语音信号采集与分析的发展史以及语音信号的特征、采集与分析方法,并通过PC机录制自己的一段声音,运用Matlab进行仿真分析,最后加入噪声进行滤波处理,比较滤波前后的变化。第2章主要介绍语音信号的特点与采集,仿真主要是验证乃奎斯特定理。第3章主要是对语音信号进行时域、频域上的分析,如短时功率谱,短时能量,短时平均过零率,语谱图分析等等。第4章是对语音信号的综合和分析,包括语音信号的调制,叠加,和滤波。第五章主要是介绍了关于语音增强的一些概念,并完成了谱减法语音增强的仿真实现。

1.4  本文的仿真软件Matlab

MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分[4]

  MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathworks也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用[5]

通过对大量语音信号的观察和分析发现,语音信号主要有下面两个特点:

(1) 在频域内,语音信号的频谱分量主要集中在300~3400Hz的范围内。利用这个特点,可以用一个防混迭的带通滤波器将此范围内的语音信号频率分量取出,然后按8kHz的采样率对语音信号进行采样,就可以得到离散的语音信号[6]。

(2) 在时域内,语音信号具有“短时性”的特点,即在总体上,语音信号的特征是随着时间而变化的,但在一段较短的时间间隔内,语音信号保持平稳。在浊音段表现出周期信号的特征,在清音段表现出随机噪声的特征。

下面是一段语音信号的时域波形图(图2-1)和频域图(图2-2),由这两个图可以看出语音信号的两个特点。

 

图2-1  语音信号时域波形图

    

图2-2  语音信号功率谱图

在将语音信号进行数字化前,必须先进行防混叠预滤波,预滤波的目的有两个:①抑制输入信号各领域分量中频率超出fs/2的所有分量(fs为采样频率),以防止混叠干扰。②抑制50Hz的电源工频干扰。这样,预滤波器必须是一个带通滤波器,设其上、下截止频率分别是fH和fL,则对于绝人多数语音编译码器,fH=3400Hz、fL=60~100Hz、采样率为fs=8kHz;而对于语音识别而言,当用于电话用户时,指标与语音编译码器相同。当使用要求较高或很高的场合时fH=4500Hz或8000Hz、fL=60Hz、fs=10kHz或20kHz。

为了将原始模拟语音信号变为数字信号,必须经过采样和量化两个步骤,从而得到时间和幅度上均为离散的数字语音信号[7]。采样也称抽样,是信号在时间上的离散化,即按照一定时间间隔△t在模拟信号x(t)上逐点采取其瞬时值。采样时必须要注意满足奈奎斯特定理,即采样频率fs必须以高于受测信号的最高频率两倍以上的速度进行取样,才能正确地重建。它是通过采样脉冲和模拟信号相乘来实现的。下图是一段语音信号在采样频率44.1KHz情况下的频谱图[8]。

由图可知,这段语音信号的频率主要集中在1KHz左右,当采样频率为44.1KHz时,由于采样频率比较大,所以采样点数就越密,所得离散信号就越逼近于原信号,频谱也没有发生混叠。

对上述信号进行1/80采样频率抽取,即采样频率变为将近500Hz时,由于采样频率比较小,所以采样点数就稀疏,所得离散信号就越偏离于原信号,频谱也发生了混叠。

在采样的过程中应注意采样间隔的选择和信号混淆:对模拟信号采样首先要确定采样间隔。如何合理选择△t涉及到许多需要考虑的技术因素。一般而言,采样频率越高,采样点数就越密,所得离散信号就越逼近于原信号。但过高的采样频率并不可取,对固定长度(T)的信号,采集到过大的数据量(N=T/△t),给计算机增加不必要的计算工作量和存储空间;若数据量(N)限定,则采样时间过短,会导致一些数据信息被排斥在外。采样频率过低,采样点间隔过远,则离散信号不足以反映原有信号波形特征,无法使信号复原,造成信号混淆。根据采样定理,当采样频率大于信号的两倍带宽时,采

 

图2-3  原始信号的时域和频域波形

 

图2-4 抽取后的信号的时域和频域的波形图

 

样过程不会丢失信息,利用理想滤波器可从采样信号中不失真地重构原始信号波形。量

化是对幅值进行离散化,即将振动幅值用二进制量化电平来表示。量化电平按级数变化,实际的振动值是连续的物理量。具体振值用舍入法归到靠近的量化电平上[9]。

语音信号经过预滤波和采样后,由A/D变换器变换为二进制数字码。这种防混叠滤波通常与模数转换器做在一个集成块内,因此目前来说,语音信号的数字化的质量还是有保证的。市面上购买到的普通声卡在这方面做的都很好,语音声波通过话筒输入到声卡后直接获得的是经过防混叠滤波、A/D变换、量化处理的离散的数字信号。

Data Acquisition Toolbox是MATLAB中主要用于数据采集的工具箱,它提供了一套完整的工具集,用于对基于PC的数据采集硬件进行控制和与之通讯,并将采集的数据写入MATLAB工作区进行分析。Data Acquisition Toolbox通过MATLAB接口与硬件设备打交道,通过MATLAB编程来直接控制声卡进行数据采集。

采集方法主要有以下两种:

方法一:将声卡作为一个模拟输入对象来进行采集,分四个步骤进行:

(1) 建立设备对象,进行初始化。MATLAB将声卡等设备都做对象处理,通过对对象的操作来作用于硬件设备,并同时建立起模拟信号采集的对象:

ai = analoginput ('winsound'); % 'winsound'为声卡的驱动程序

(2)给ai对象添加采集通道,设置音频采集的属性参数:

addchannel(ai,value); % 设置采集音频的通道

set(ai,'SampleRate',value); % 设置音频信号采集的采样频率

set(ai,'SamplesPerTrigger',value); % 设置采集音频信号的长度

set(ai,'TriggerRepeat',value); % 设置连续采集的次数

set(ai,'TriggerDelay',value); % 设置延长的时间长短

set(ai,'TriggerType',value); % 设置音频信号采集的触发方式

set(ai,'TriggerConditionValue',value); % 设置音频信号采集的触发临界值

set(ai,'TimeOut',value); % 设置超时等待的时间长短

在进行数据采集时,可通过以上函数按照实际实验或工作要求来节制数据采集时的行为。其中采样频率是由声卡物理特性直接决定的参数,在对其进行设置时需根据采样定理选择声卡支撑的采样频率。

(3)启动设备对象,开始采集数据:

start(ai);

[data,time]=getdata(ai,ai.SamplesPerTrigger); % 获得采样值向量

当声卡被触发后,声卡设备会自动将采集的数据存入MATLAB data Engin中,利用函数 getdata即可从中提取所需数据,同时在data Engin中删除。也可以通过save 函数直接将包含数据的变量存成MAT文件保存于计算机中,并通过调用函数load进行数据加载,从而利用MATLAB中其他工具箱的函数做进一步数据分析和处理。

(4)停止采集并清除设备对象:

stop(ai) ;

delete(ai);

方法二:直接调用wavrecord功能函数采集音频信号。wavrecord是利用windows 音频输入设备

录制声音,函数调用方式为:

wavrecord(n,fs,ch,dtype);

n:采样点数,决定录音长度;

fs:采样频率,为8000Hz、11025Hz、22050Hz、44100Hz之一,默认值为11025Hz;

ch:样本采集通道,1为单声道,2为双声道,默认值为1;

dtype:采样数据存储格式,即每个样本的解析度。

方法三:在实际工作中,我们可以利用windows自带的录音机录制语音文件,图2-3是基于PC机的语音信号采集过程,声卡可以完成语音波形的A/D转换,获得WAVE文件,为后续的处理储备原材料。调节录音机保存界面的“更改”选项,可以存储各种格式的WAVE文件。

3.1  语音信号分析技术

语音信号分析是语音信号处理的前提和基础,只有分析出可表示语音信号本质特征的参数,才有可能利用这些参数进行高效的语音通信、语音合成和语音识别等处理[8]。而且,语音合成的音质好坏,语音识别率的高低,也都取决于对语音信号分析的准确性和精确性。因此语音信号分析在语音信号处理应用中具有举足轻重的地位[10]。

贯穿于语音分析全过程的是“短时分析技术”。因为,语音信号从整体来看其特性及表征其本质特征的参数均是随时间而变化的,所以它是一个非平稳态过程,不能用处理平稳信号的数字信号处理技术对其进行分析处理。但是,由于不同的语音是由人的口腔肌肉运动构成声道某种形状而产生的响应,而这种口腔肌肉运动相对于语音频率来说是非常缓慢的,所以从另一方面看,虽然语音信号具有时变特性,但是在一个短时间范围内(一般认为在10~30ms的短时间内),其特性基本保持不变即相对稳定,因而可以将其看作是一个准稳态过程,即语音信号具有短时平稳性。所以任何语音信号的分析和处理必须建立在“短时”的基础上,即进行“短时分析”,将语音信号分为一段一段来分析其特征参数,其中每一段称为一“帧”,帧长一般取为10~30ms。这样,对于整体的语音信号来讲,分析出的是由每一帧特征参数组成的特征参数时间序列[11]。

根据所分析出的参数的性质的不同,可将语音信号分析分为时域分析、频域分析等;时域分析方法具有简单、计算量小、物理意义明确等优点,但由于语音信号最重要的感知特性反映在功率谱中,而相位变化只起着很小的作用,所以相对于时域分析来说频域分析更为重要。本文将简要介绍时域分析、频域分析以及语谱图分析。

 

3.2  语音信号的时域分析

语音信号的域时分析就是分析和提取语音信号的时域参数。进行语音分析时,最先接触到并且也是最直观的是它的时域波形。语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理等。这种分析方法的特点是:①表示语音信号比较直观、物理意义明确。②实现起来比较简单、运算量少。③可以得到语音的一些重要的参数。④只使用示波器等通用设备,使用较为简单等[12]。

语音信号的时域参数有短时能量、短时过零率、短时自相关函数和短时平均幅度差函数等,这是语音信号的一组最基本的短时参数,在各种语音信号数字处理技术中都有应用[6]。在计算这些参数时使用的一般是方窗或汉明窗。