基于LabVIEW的语音信号处理
2017-09-09刘鑫金暄宏
刘鑫+金暄宏
摘 要:针对LabVIEW的语音信号分析,为了体现LabVIEW的简洁性与可靠性,分别通过声卡和LabVIEW自带的程序包对声音进行信号采集与声音信息保存,并利用LabVIEW自身强大的信号处理能力进行信号分析处理,对语音信号进行端点检测、滤波、加窗等预处理。研究结果表明,通过与理论数值的对比,可以得到与预期一致的实验结果,并能够通过更加简单易懂的程序完成该功能,从而充分体现了G语言的简洁性、可靠性。
关键词:LabVIEW;声卡;信号采集;声音保存;信号分析;G语言
DOIDOI:10.11907/rjdk.171328
中图分类号:TP319
文献标识码:A 文章编号文章编号:1672-7800(2017)008-0135-03
0 引言
语音信号的处理与人工智能、计算机科学、信号处理学等领域关系越来越密切。语音信号采集与分析更是智能机器人发展的重要推动力量。但是现在市场上的语音分析系统价格昂贵、操作复杂,且仅能用于特定的方面,因此有关实验教学都是利用Matlab进行语音及其相关信号的处理[1]。但是Matlab却有学习慢、程序直观性不够等缺点,在进行语音信号处理时往往比较慢、比较难。
LabVIEW作为一种强大的信号处理软件,其基础语言G语言作为图形化语言,不仅可以代替传统的测量仪器,还拥有应用方案灵活、性能提高快、综合成本更低等优点[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编程快得多。
在进行时域分析时,要对信号进行预加重,主要是加窗,并对高频部分进行加重,进而加强其高频部分的分辨率。其结果是高频部分的幅值得到提升,频谱变得平坦。
在加强高频部分时,传递函数为:endprint
H(z)=1-a·z-1(3)