基于LabVIEW的语音信号处理
方案灵活、性能提高快、综合成本更低等优点[2]。不论是工程实践还是学校教学,它都是一个很不错的工具软件,也越来越多地在工业领域、教育领域得到推广。
1 系统设计
1.1 LabVIEW简介
LabVIEW是一种程序开发环境,由美国国家仪器(National Instruments,NI)公司研制开发,是目前国际上唯一的编译型图形化编程语言[3]。LabVIEW类似于C和BASIC开发环境,但是与其它计算机语言有着明显的差别。其它计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。 不仅使编程变得简单,而且生动有趣,有助于语言学习。
1.2 信号采集过程
声卡(Sound Card)也叫音频卡,是多媒体技术中最基本的组成部分,是实现声波/数字信号相互转换的一种硬件。声卡的基本功能是把来自话筒、磁带、光盘的原始声音信号加以转换,输出到耳机、扬声器、扩音机、录音机等声响设备,或通过音乐设备数字接口(MIDI)使乐器发出声音。电脑声卡的工作原理很简单,麦克风和喇叭所用的都是模拟信号,而电脑所能处理的都是数字信号,声卡的作用就是实现两者的转换。从结构上分,声卡可分为模数转换电路和数模转换电路两部分:模数转换电路负责将麦克风等声音输入设备采集到的模拟声音信号转换为电脑能处理的数字信号,而数模转换电路负责将电脑使用的数字声音信号转换为喇叭等设备能使用的模拟信号[4]。
LabVIEW中提供了强大的数据采集程序包,可以很简单地通过程序包对声卡进行调用。例如使用Acquire Sound获取相关声音信息,只需要设置相关参数就可以获得所需要的语音信息。
由于声卡直接对收集的声音信号进行模数转换,因此声卡所得到的信息直接为数字量而非模拟量,不需要再次进行模数转换。根据对信号采集和保存的相关要求,程序后面板设计如图1所示。
对声音进行采集时主要的参数为录音时间、采样位数、采样频率和声卡通道。在LabVIEW的Acquire Sound程序包中都涵盖了相关参数的设置。双击该函数即可看见设置面板,为了方便修改相关信息,也可外接。
1.3 語音信号分析处理
对语音信号进行采集保存后,便可对存储的信号进行读取进而进行处理分析。由于语音信号携带着大量的信息,而语音分析的目的就是对这些信息进行处理分析,因此需要对语音信息进行不同的变换。语音信息分析可分为时域和变换域等处理方法[5]。而利用傅里叶变换对信号进行处理,进而得到其频域信息是研究语音信号特征的重要方法之一。傅立叶变换是数字信号处理领域一种很重要的算法。傅立叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。而根据该原理创立的傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。
和傅立叶变换算法对应的是反傅立叶变换算法。该反变换从本质上说也是一种累加处理,这样就可以将单独改变的正弦波信号转换成一个信号。因此,可以说,傅立叶变换将原来难以处理的时域信号转换成了易于分析的频域信号(信号的频谱),可以利用一些工具对这些频域信号进行处理、加工,最后还可以利用傅立叶反变换将这些频域信号转换成时域信号[6]。傅里叶变换如下:
F(ω)=F[f(t)]=∫∞-∞f(t)e-jωt dt(1)
其逆变换如下所示:
f(t)=F-1[F(ω)]=12π∫∞-∞F(ω) ejωtdω(2)
在LabVIEW中可利用已有的工程包简单方便地对信号进行快速傅里叶变换,并针对不同的傅里叶变换信息进行分类处理。由于录音时无法完全录入所需信息,其中必然会夹杂一些非有效信息,需要将这些无效的杂音或者并未发声的信息进行滤除,因而需要进行端点检测,探查出语音信号是从何处开始又在何处结束的。由于LabVIEW内部是拥有Matlab节点的,所以可以使用Matlab进行联合编程。后面板如图2所示。虽然使用了Matlab,但是这样处理仍然比单独使用Matlab编程快得多。
在进行时域分析时,要对信号进行预加重,主要是加窗,并对高频部分进行加重,进而加强其高频部分的分辨率。其结果是高频部分的幅值得到提升,频谱变得平坦。
在加强高频部分时,传递函数为:
H(z)=1-a·z-1(3)
一般通过式(3)的一阶FIR高通数字滤波器实现预加重,其中a为预加重系数,一般a取值为0.9 接下来需要进行加窗分帧处理。所谓分帧,就是语音信号平稳性只在很短的时间内(一般认为在10~30ms内语音信号可近似相等),这就意味着可以将语音信号分割成短段来处理。而语音信号的分帧多是采用可移动的有限长度的窗口进行加权处理。一般分帧为33~100帧/s,不同的情况分帧长度也会不同。而分帧方法采用的是交叠分段的方法,即前后帧的交叠部分称为帧移,帧移与帧长相对度(即比值)控制在0~0.5之间[7]。而加窗时可采用汉明窗来进行加窗处理,汉明窗函数如下:w(n)=0.54-0.46cos[2πnN-1],0≤n≤N 0,其他 (4) 然后对所需要的信息进行滤波提取。 综上所述,图3是设计后面板。 2 实验结果分析 首先,先录一段語音,然后对所存语音信息进行提取即端点提取。结果的时域信号如图4和图5所示。 由图5不难发现,在之前保存的语音信号已经得到了裁剪,原始语音信号开始部分的无效信号的大部分成分已经被滤除。 接下来使用LabVIEW中的快速傅里叶函数对信号进行傅里叶变换,得到信号的频率谱以及能量谱密度函数。由于人所能接受的语音信号的频率为300~3 400Hz之间,可以对所得到的语音信号进行300~3 400Hz带通滤波。可在LabVIEW后面板中选择滤波器,并将类型选择为带通,这里可选择使用IIR、巴特沃斯滤波器,阶数选择3,对滤波后的信号进行观察。所得结果如图6-图10所示。 本实验中使用的窗函数为汉明窗。从实验结果中不难看出,预处理后得到的信号高频部分得到加强,波形整体变得更加平坦,滤波效果明显。此信号可以直接对照运用Matlab实现对语音的采集与分析,结果相同[8]。 3 结论 本实验利用声卡对声音信号进行采集和保存,并利用LabVIEW进行信号有效部分截取(端点检测)、预处理和滤波处理。虽然设计简单,但是对处理后的信息可以进行再次加工,获得诸如声纹识别、语音加密等用途,充分证明了LabVIEW的简单性和功能的强大性。面对将来对语音信息越来越大的需求,运用LabVIEW对相关信息进行处理会越来越快速、简单、可靠。该实验就很好地证明了这一点。 参考文献: [1] 于振江.一种基于Matlab的语音信息采集与分析系统设计[J].科学情报开发与经济,2012,22(12):112-112. [2] 张易知,肖啸,张喜斌,等.虚拟仪器的设计与实现[M].西安:西安电子科技大学出版社,2002. [3] 火元莲,齐永峰,张鹏万,等.基于LabVIEW的数字信号处理模拟实验系统[J].西北师范大学学报:自然科学版,2008,67(4):114-115. [4] 饶志芳.声卡工作原理[J].电子测试, 2000,7(2):156-160. [5] 李春泉,伍军云,熊殷,基于MATLAB的语音信号时频域参数分析[J].科技广场,2007,20(9):22-24. [6] 冷建华.傅里叶变换[M].北京:清华大学出版社, 2004. [7] 刘代龙.基于MATLAB的语音信号预处理[D].毕节:贵州工程应用技术学院, 2014. [8] 陈宇峰.基于声卡和Matlab的语音信号采集和处理[J].中国现代教育装备,2006,9(5):49-56.