,
(苏州科技大学 电子与信息工程学院,苏州 215009)
一种噪声混叠下的阵列语音采集系统*
张杰,潘欣裕
(苏州科技大学 电子与信息工程学院,苏州 215009)
设计了一种简易的阵列语音采集系统,该系统以STM32F103系列MCU为核心,加载语音放大电路、通信电路等,实现了5路语音信号的采集、显示、通信与存储,利用独立成分分析算法,实现了混叠语音信号的分离,获得了较为纯净的语音,为后续的语音处理、分析与识别等工作提供了保障。
阵列语音采集;混叠语音处理;独立成分分析
在视频会议、电话会议和多媒体系统中,通常采用孤立麦克风作为语音拾取工具。而环境中总是不可避免地存在噪声,孤立麦克风拾取的声音信号包含了语音和噪声,严重影响语音质量,这使得纯净语音信号采集存在困难。随着阵列信号处理技术的高速发展,采用多个麦克风来拾取语音信号为获取纯净语音提供了一个有效的解决方案。通过阵列语音采集技术,可实现语音增强[1]和多声源分离[2],提高信噪比。
目前,阵列语音采集技术是语音处理技术领域的一个研究热点,对于去噪、多声源分离、语音识别及声源定位[3]都有着极其重要的意义。施剑等[4]设计了基于USB2.0的麦克风阵列语音采集系统,具有接口简单、使用方便、各通道同步、扩展性好等特点,可广泛应用于音、视频采集系统中。陈立春[5]开发了基于MSP430的多通道低功耗语音采集系统,实现了多路语音的采集、存储和USB回传功能,具有成本低、功耗低、尺寸小、录音质量好等特点,该系统已在实际环境下使用,并可进一步推广到生产、安全、监察、新闻采访等众多领域。何强等[6]设计了基于麦克风阵列的高信噪比定向采音系统,具有采音效果好、硬件实现简单等特点,实现了对声源的定向采音。蔡渤[7]创新地实现了一种基于麦克风阵列的子带自适应波束形成和自适应后置滤波联合的语音增强系统,解决了抑制环境噪声干扰的问题。
本文从上述应用背景出发,设计了一种基于STM32的阵列语音采集系统,详细分析了软硬件实现方案,并利用盲源分离[8]方法和ICA算法对混叠语音信号进行分离,获取纯净的语音,为后续的语音处理、分析与识别等工作提供了有力的保障。
图1 阵列语音采集系统原理图
本系统主要由电源系统、串口通信系统、语音采集与放大系统以及主控系统组成,整体电路原理如图1所示。主要实现5路语音信号的实时采集与传输,硬件系统实物图如图2所示。
图2 硬件系统实物图
1.2.1 放大电路
麦克风拾取的语音信号是微弱的,放大电路的作用是将微弱的语音信号放大,以便STM32F103C8T6内置的ADC能准确采集到语音信号。该电路采用LM386芯片来实现,芯片电压增益最低为20 dB,最高为200 dB。输出端电压会被自动偏置到电源电压的一半,如果电源电压为3.3 V,则偏置电压为1.65 V,此时如果输入语音信号,信号会加载在1.65 V直流电压之上。放大电路的原理图如图3所示。当引脚1和引脚8断路时,电压增益为20 dB;当引脚1和引脚8短路时,电压增益为200 dB。为使电压增益在20~200 dB之间可调,在引脚1和引脚8之间加一个10 μF电容,在引脚5和GND之间加一个10 kΩ的电位器,通过调整电位器来改变增益大小。
图3 放大电路原理图
1.2.2 A/D转换器
本文中主芯片STM32F103C8T6内置的ADC分辨率为12位,其数字量变化范围为0~(212-1),输入电压的范围是0~3.3 V,可分辨的最小电压为3.3 V/212=0.805 7 mV。考虑到串口通信传输速率有限,所以只保留12位数据的高8位作为最终A/D转换的结果。
1.2.3 串口通信协议
本系统利用定时器中断来实现8 kHz的采样率,即每1/8 000 s产生一次中断,在中断服务子程序里采集和传输语音数据。为了实现数据的高速传输,采用DMA方式来传送数据。
为防止5路语音信号在采集和传输过程中丢失数据,给5路语音数据加上帧头“0xFF”和帧尾“0x00”。一次A/D转换产生一帧数据,一帧数据有7个,每个数据大小为8位,每秒传输8 000帧数据,则串口通信的波特率应设为:8 000×8bit×7=448 kbps。通信流程如图4所示。
图4 系统通信流程
语音信号通过麦克风阵列采集后,由串口发送到PC上。PC端构建实时显示系统,可以实现多路语音信号的波形显示及存储。本系统采用Matlab的图形用户界面工具来完成。
该系统主要包含一个列表框、两个按钮和5个坐标系。列表框用来选择STM32与PC相接的串口号,Open按钮用来打开串口,Plot按钮用来绘图。阵列语音采集硬件系统与PC端连接完毕后,打开电源,运行阵列语音采集软件系统。串口号一栏中可选择的串口为COM1~COM8,若PC识别的串口号为COM8,则在列表框中选择COM8。然后按下Open按钮,则可以打开COM8串口。串口打开后,串口号不可更改,Open按钮变为Close按钮。要想重新选择串口号,就必须关闭当前串口,即按下Close按钮,这时Close按钮变为Open按钮,串口号可更改。如果选择了错误的串口号,按下Open按钮系统会提示打开串口发生错误。Open按钮打开后,仅仅是打开了相应串口,并未开始接收数据。按下Plot按钮后,软件系统才开始接收数据并实时显示语音信号的波形。
软件系统可实时显示多路语音信号波形,如图5所示。从波形可看出,多路语音数据已被正确解析。同时系统生成了5个.wav文件,可正常播放。分析表明,各个通道数据精确同步,软件系统正确完成了采集和存储多路语音数据的功能。
图5 阵列语音信号波形实时显示结果
环境中总是不可避免地存在噪声,所以需要消除掉噪声,获取纯净的人声,如果仅仅采用单通道麦克风来拾取人声,可以通过线性滤波或者稀疏编码压缩来去噪,但效果不佳。所以采用多个麦克风来采集更多的数据,利用空间特性提高去噪效率,这便是阵列语音采集系统的意义所在。在采集语音信号时,麦克风与声源的相对位置不是固定的,所以混合过程是未知的。要想获得原始声音信号,只能通过盲估计的方法实现。可以看到,这种情况正好符合所谓的ICA模型,而去噪的实质就是一种盲源分离问题。
独立向量分析是从多元统计数据中寻找内在成分的一种方法。ICA是由盲源分离发展而来的,是BSS的一类方法,而BSS比ICA的适用范围更宽。
ICA方法的目的是在源信号和传输通道特性未知的情况下,通过一定的算法分离出混合信号中的各个独立源信号。可以用数学语言来描述ICA问题,假设观测信号为x(t),它是由源信号s(t)线性混合而成,在没有噪声时,这种线性混合模型可表示为:
x(t)=Hs(t)
式中,s(t)=[s1,s2,…,sn]表示n维源信号,x(t)=[x1,x2,…,xn]是n维观测到的信号,H=[h1,h2,…,hn]表示n×n阶混合矩阵。在源信号和混合特性未知的情况下,仅利用源信号的统计特性和观测信号对源信号的约束条件来估计出源信号就是ICA要实现的目的。
为了完整独立地恢复出各个源信号,可构建一个解混矩阵W,那么x经过解混矩阵W变换后,就可得到n维输出源信号的估计y=[y1,y2,…,yn]。ICA问题的求解就可表示为:
y(t)=Wx(t)=WHs(t)=Gs(t)
式中,G为全局传输矩阵,若通过学习使得G为单位矩阵,则y(t)=s(t),从而恢复出源信号[1]。
在本文的语音分离实验中采用了Fast ICA算法。Fast ICA是一种快速寻优迭代算法,有大量的样本数据参与到每一步迭代运算中,Fast ICA算法大致有三种形式,本文将对基于负熵最大的Fast ICA算法进行探讨,它的搜寻方向为负熵最大,可用来分离出混合信号中的各个独立源信号。Fast ICA的收敛结果较为稳定,且速度较快,因为它采用了定点迭代优化算法。
负熵可定义为:
Ng(Y)=H(Ygauss)-H(Y)
式中,任意随机变量Y的熵用H(Y)来表示,高斯随机变量的熵用H(Ygauss)来表示,Y的负熵用Ng(Y)来表示。任意随机变量Y的熵也可以表示为:
由信息论可知,当随机变量的方差相同时,熵最大的是服从高斯分布的随机变量。Y的熵的大小总与其高斯性强度成反比,一个极端的情况是:当Y服从高斯分布时,Ng(Y)=0。综上所述,Y的非高斯性可用Ng(Y)来度量。由上式可知,要想计算出H(Y),就必须知道随机变量Y的概率密度。而随机变量Y的概率密度是未知的,所以不能用上式计算负熵,可采用如下简化公式:
Ng(Y)=E[g(Y)]-E[g(Ygauss)]2
Fast ICA是基于定点迭代结构的算法,目的是使wTx具有极大非高斯性,其中x为观测向量,w为W的一行。可通过E{(wTx)}的最适条件来获取wTx的近似负熵值,由库恩-塔克条件可知,约束条件为E{(wTx)2}=‖w‖2=1时,E[g(Y)]的解可通过下式获得:
E{xg(wTx)}-βw=0
用牛顿方法解此方程,定义方程左边为F,得到它的雅克比矩阵JF(w)为:
JF(w)=E{xxTg′(wTx)}-βI
上式右边第一项可简化为:
E{xxTg′(wTx)}≈E{xxT}E{g′(wTx)}=E{g′(wTx)}
雅克比矩阵变成对角的、可逆的。因此获得近似牛顿迭代式:
本文采用Fast ICA算法对阵列语音采集系统采集到的混合语音信号进行处理,恢复出各个声源信号。
本文所设计的阵列语音系统是为了从混合语音信号中分离出各个声源信号。先搭建好硬件系统,再用阵列语音采集软件系统采集和接收语音信号,采集到的语音信号为各个声源及噪声的混合信号。通过串口传送到PC端的5路语音信号包含帧头“0xFF”和帧尾“0x00”,软件系统的功能是正确解析出5路语音信号。
在软件系统界面中,可实时显示多路语音信号波形,同时将语音数据保存为.wav文件。也就是说,整个系统的功能是完成语音信号的实时采集和存储。最后,需要在Matlab环境下利用Fast ICA算法对混合语音信号进行去噪和分离。
图6 两路混合语音信号波形
先在两个纯净语音信号混叠的情况下对算法进行测试,可在软件系统中看到2路混合语音信号波形如图6所示。利用Fast ICA算法对其进行处理,最终实现了语音分离。分离得到的2个声源信号如图7所示。播放混合后的音频文件和分离得到的音频文件,进行对比,发现分离的语音较为干净,去噪效果也很好,说明Fast ICA算法较好地实现了去噪和多声源分离,完成了预期目标。
图7 分离得到的两个声源信号波形
[1] Seongjae Lee,David K Han,Hanseok Ko.Single-channel speech enhancement method using reconstructive NMF with spectrotemporal speech presence probabilities[J].Applied Acoustics,2017(117):257-262.
[2] Cosme Llerena-Aguilar,Roberto Gil-Pita,Manuel Utrilla-Manso,et al.A new mixing matrix estimation method based on the geometrical analysis of the sound separation problem[J].Signal Processing,2017(134):166-173.
[3] 陈晓峰,肖熙.传声器阵列语音数据采集系统的设计与实现[J].电声器件与电路,2008,32(7):43-46.
[4] 施剑,何成林,杜利民.基于USB2.0的麦克风阵列语音数据采集系统设计[J].计算机工程,2006(24):216-218.
[5] 陈立春.基于TI MSP430芯片的多通道低功耗语音采集系统[J].电声技术,2013(4):58-60.
[6] 何强,杨朱杰,郭晨,等.基于麦克风阵列的高信噪比的定向采音系统[J].硬件纵横,2013(1):14-16.
[7] 蔡渤.基于阵列麦克风的语音采集增强系统设计[J].襄阳职业技术学院学报,2016,15(2):22-24.
[8] Meriem Zoulikha,Mohamed Djendi.A new regularized forward blind source separation algorithm for automatic speech quality enhancement[J].Applied Acoustics,2016(112):192-200.
ArraySpeechAcquisitionSysteminMixedNoisesEnvironment
ZhangJie,PanXinyu
(School of Electronics and Information Engineering,Suzhou University of Science and Technology,Suzhou 215009,China)
In the paper,a simple array speech acquisition system is designed,which takes STM32F103 series MCU as the core,loads speech amplification circuit,communication circuit and so on.The system achieves the collection,display,communication and storage of the 5 channels speech signals.And the independent component analysis algorithm is used to realize the separation of the overlapping speech signals,and obtains more pure speech,which provides a powerful guarantee for subsequent speech processing,analysis and recognition.
array speech acquisition;overlapping speech processing;independent component analysis
国家自然科学基金资助项目(61372146,61472267);苏州科技大学青年基金项目(XKQ201515)。
TP368.1
A
薛士然
2017-08-31)