中图分类号: TN912.3
文献标识码: A
文章编号: 1006-7167(2017)05-0126-05
收稿日期: 2016-09-15
网络出版日期: 2017-05-20
版权声明: 2017 《实验室研究与探索》编辑部 《实验室研究与探索》编辑部 所有
基金资助:
作者简介:
作者简介:梁瑞宇(1978-),男,江苏徐州人,博士,副教授,主要研究方向语音信号处理。Tel.:15380920360;E-mail:lly1711@163.com
展开
摘要
为体现教学与科研相互促进的教学理念,面向语音信号处理教学和科研需要,以Cortex-A8微处理器和专用音频编解码芯片WM8960为硬件核心,构建一款嵌入式语音信号处理综合实验平台。基于该实验平台,利用QT开发软件,设计一款语音信号处理综合实验教学与开发软件。文中完整地讲述了系统的硬件构成,驱动程序的移植,并结合基于谱减法的语音增强算法,介绍了基于QT的语音开发流程。基于该实验平台,学生不仅可以掌握语音信号处理的基本知识,还可以熟悉面向语音应用的嵌入式软件开发流程。系统界面友好,功能强大,可有效用于高校语音及信号处理教学工作,也可用于相关科研人员进行语音信号处理相关课题的研发工作。
关键词:
Abstract
To embody the idea of mutual promotion between teaching and scientific research, and to meet the needs of teaching and research for speech signal processing, an integrated experimental platform for embedded speech signal processing is design by using Cortex-A8 microprocessor and WM8960 audio coding and decoding chip as core hardware. Moreover, an integrated experimental teaching and development software is designed on this platform by using QT development software. Then, the system hardware structure and transplant of driver are described. By taking an example of the speech enhancement algorithm based on spectral subtraction, the speech development process based on QT is introduced. Based on this experimental platform, students can master not only the basic knowledge of speech signal processing, but also the development process of embedded software for the speech application. The system had friendly interface and strong functions, can be used for the teaching of speech and signal processing in colleges and universities, and for the research and development of related topics on speech signal processing.
Keywords:
随着人机交互和智能机器人技术的发展,语音信号处理已成为信息科学研究领域中发展最为迅速的一个分支。语音信号处理是用数字信号处理技术和语音学知识对语音信号进行处理的一门新兴学科,是一门理论性强、实用面广、内容新、难度大的交叉学科[1-2]。语音信号处理作为信息处理专业的一门重要的专业课,所涉及的理论知识较多。语音信号处理包括语音增强[3]、语音编码、语音合成、语音识别[4]、说话人识别[5]、情感识别[6]、语音隐藏、声源定位[7]等。围绕着这些应用,该课程还会涉及一些相关理论,如矢量量化、隐马尔科夫模型、高斯混合模型,支撑向量机等。因此,如何激发学生的学习兴趣,从枯燥的理论中升华出来,是提升课堂教学质量的关键。
目前,很多高校的语音信号处理课程的授课时间在32~48学时。在短暂的课堂授课时间内,使学生对各种应用有所了解,并从中选择一到两种进行深入研究,是非常困难的一件事。为此,很多高校都会增加实验环节使学生对课堂内容进行巩固和吸收。但是,目前语音信号处理实验主要以MATLAB仿真为主[8],虽然有助于学生快速理解理论知识,但是缺乏对语音如何采集、处理和播放整个流程的深入了解。因此,开发出一款功能强大且实用的语音信号处理综合实验平台,为学生和老师从事教学科研工作提供方便,已经成为语音信号处理教学工作的重中之重。一个有效的实验平台不但可以使学生掌握理论知识,还可以使学生了解语音信号处理的整个开发流程,为学生后期从事语音信号处理科创、竞赛或工作积累经验。针对目前语音教学科研平台较少的现状[9-10],本文按照主流的嵌入式系统开发设计理念,研发了一款语音信号处理综合实验平台,介绍了平台的硬件构成和软件实现,并通过语音增强实验验证了平台的有效性。
嵌入式语音实验平台的硬件结构如图1所示,实验平台由S5PV210核心处理器、WM8960语音编解码芯片、存储电路、扬声器、麦克风、外设接口、电源和时钟电路构成。其中,电源和时钟电路提供系统工作必需的电源和时钟。外设接口包括串口、USB接口、网络接口,用来与电脑通信,实现人机交互等功能。
实验平台的核心处理器选用Samsung公司高端的ARM Cortex-A8微处理器S5PV210芯片。S5PV210基于ARM v7指令架构,适用于复杂操作系统及用户应用,芯片功耗在300 mW以下,而性能却高达2 000 MIPS[11-12]。S5PV210微处理器具有复杂的流水线架构,带有先进的动态分支预测,可实现2.0 DMIPS/MHz。
语音编解码芯片选用欧胜微电子公司的低功耗、高质量的立体编解码器芯片WM8960。该芯片内置有麦克风接口和立体声耳机驱动器以及立体声24 bit sigma-delta模数转换器和数模转换器。其运行的模拟电源电压低至2.7 V,数字内核运行电压可低至1.7 V。其高级的片上数字信号处理能够实现麦克风输入的自动电平控制,并支持多种采样率。该芯片与麦克风和扬声器进行配合,可实现语音的采集和播放。
存储电路由DDR2 SDRAM芯片K4T1G164QQ和NAND Flash芯片K9F2G08UOD构成。系统采用4片16位128MB的SDRM芯片来构成32位的数据接口,总大小为512MB。DDR2 SDRAM相比于老式的DDR SDRAM具有更高的运行速率与更低的功耗。SDRAM主要用来存储临时数据,而NAND Flash主要用来存储根文件系统、boot代码、系统内核代码和简单的数据。NAND Flash是连续存储介质,适合存放大的数据量,其共用地址和数据总线,对一个固定大小的区域进行操作,且使用寿命长。
因为嵌入式Linux的开源性、可裁剪性和可移植性,所以其成为嵌入系统开发最常用的操作系统之一。在Linux操作系统中,内核主要用来管理软硬件资源,并提供运行环境。要想通过Linux系统来对硬件进行操作,必须在硬件和内核之间架设一个通道,即Linux设备驱动。平台以WM8960作为语音采集和播放芯片,因此下面简单介绍WM8960芯片的驱动移植过程。
由于WM8960语音芯片是采用模块的方式编译进Linux内核系统的,故其驱动程序的入口和出口函数分别为WM8960_modinit,WM8960_exit。所谓的入口和出口函数指的是:当系统上电时,内核会将所有的驱动代码挂载到系统里,而加载驱动首先执行的就是驱动的入口函数。而当卸载不想要的驱动时,执行的是对应驱动的出口函数。
入口函数只是将WM8960设备对应的数据结构注册到I2C总线中。采用的方式就是调用I2C总线的接口函数i2c_add_driver()。为增强驱动的移植性,内核采用了驱动-设备分离的方式,即与硬件相关的信息放在一个结构体里注册进内核,而与硬件无关的信息放在另一个结构体中注册进内核。驱动和设备二者通过匹配注册的name来进行识别,此处的注册name为WM8960。
当驱动层和设备层通过name匹配成功之后,第一个会执行的函数就是probe函数。probe函数会判断是否是负责驱动的设备,然后完成该设备的初始化操作。代码如下:
static __devinit int WM8960_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id){
struct WM8960_priv *WM8960; //WM8960的私有数据结构体
struct snd_soc_codec *codec; //Codec结构体
WM8960 = kzalloc(sizeof(struct WM8960_priv),GFP_KERNEL);//分配空间
if (WM8960 == NULL)
return -ENOMEM;
codec = &WM8960->codec;
i2c_set_clientdata(i2c,WM8960);
codec->control_data = i2c;
codec->dev = &i2c->dev;
return WM8960_register(WM8960,SND_SOC_I2C); //注册
}
probe函数首先定义了两个非常复杂数据结构:一个WM8960的私有数据结构体WM8960,另一个是片上Linux音频架构中的Codec结构体codec。然后,程序调用Linux内核内存分配接口kzalloc函数分配了一个空间,并且将空间的首地址交给了WM8960私有数据结构体。为了让其他函数也能使用该内存,此处通过i2c_set_client函数将地址保存到i2c_client结构体下面的一个void*指针里。这样,其他函数可以通过i2c_get_client函数接口来得到保存的数据。probe函数最后调用WM8960_register函数来完成WM8960的注册。
完成上述驱动添加和注册工作后,音频文件的采集和播放就可以通过调用Linux系统的声卡驱动,再调用刚注册的WM8960音频编解码芯片来完成。通常,在进行语音信号采集与处理前,主程序需要对音频采集参数进行设置,主要包括采样率的设置、单双通道的配置、录音与播音缓冲区大小的设置、采样位数的设置等。配置完成后,算法便可以从录音缓冲区读取采集的语音数据,处理完成后,送入语音播放缓冲区。
录音程序的核心代码如下:
......
int SIZE = 8;
int CHANNELS = 1;
int RATE = 8000;
int LENGTH = 3;
if (snd_open(SND_PCM_STREAM_CAPTURE, CHANNELS, RATE, SIZE) < 0) {
fprintf(stderr, "设备打开失败=\n");
return; }
size_t c, frame_size;
c = (off64_t)capture.chunk_bytes; //定义块的大小
int count = (LENGTH*RATE)/c; //计算块的数量
unsigned char data_buff[count*c]; //定义数据缓存大小
frame_size = c * 8 / capture.bits_per_frame; //求帧的数量
for(int i=0;i<count;i++){
if (SND_readPcm(&capture, frame_size) != frame_size) {
fprintf(stderr, "读取错误\n");
return; }
memcpy(data_buff+i*c, capture.data_buf, c); //从数据缓冲区读出数据
}
QVector<double>Y1(count*c);
for(int i=0;i<Y1.size();i++)
Y1[i] = (data_buff[i]-128)/128.0; //预处理
snd_close(SND_PCM_STREAM_CAPTURE); //关闭设备
......
本文设计的语音信号处理综合实验平台功能比较强大,可以面向不同层次的学生进行实验。教师可以根据学生基础,为学生量身定制实验套餐。如表1所示,实验主要分为3类。
表1 实验套餐及适用学生
套餐类型 | 提供资料* | 学生条件* | 适用实践课类型 |
---|---|---|---|
1 | I | A,B,C | 课程设计或课外实验 |
2 | I,II | B,C | 课外实验 |
3 | I,II,III | C | 课堂实验 |
由表可知,根据学生的学习基础,老师可以选择不同的套餐进行实验设置,而学生可以跨过不同阶段进行超前学习。不同于MATLAB的教学方法和实验设置,该实验设置并不固定在一种单一模式下,可进行选择性扩展和加深。通过分层次的设置,教师可以通过不同层次的实例演示来激发学生的学习兴趣,加深学生对知识的理解,也为学生从事语音信号处理相关的实际课题或竞赛提供一种切实可行的实现方案和思路。对于电子类学生来说,C语言或C++是非常重要和普遍的基础课,因此学生进行实验困难不大,还可以锻炼学生C语言的编程能力。下面以语音增强算法为例,介绍面向套餐3的学生实验安排情况。
对于任何实验来说,学生都必须首先了解实验的基本原理。因此,简单介绍基于谱减法的语音增强算法的基本原理。
语音增强主要研究如何利用信号处理技术消除信号中的强噪声干扰,从而提高输出信噪比以提取出有用信号的技术。语音增强是语音算法中最基本,最常用的算法之一,其主要目的:①改进语音质量,消除背景噪音,使听者乐于接受,不感觉疲劳,这是一种主观度量;②提高语音可懂度,这是一种客观度量。这两个目的往往不能兼得,所以实际应用中总是视具体情况而有所侧重。根据语音和噪声的特点,常用的语音增强算法包括谱减法、维纳滤波法、卡尔曼滤波法、自适应滤波法等。考虑到学生的理解程度,本文以谱减法[13]为例来进行说明。整个算法的原理如图2所示。
设语音信号的时间序列为x(n),加窗分帧处理后得到第i帧语音信号为xi(m),帧长为N。任何一帧语音信号xi(m)做FFT后为
对Xi(k)求出每个分量的幅值和相角,幅值是|Xi(k)|,相角为
已知前导无话段(噪声段)时长为IS,对应的帧数为NIS,可以求出该噪声段的平均能量为
谱减公式为
式中:a和b是两个常数,a称为过减因子,b称为增益补偿因子。
谱减后的幅值为|
此处选择QT作为编程载体目的:①为了便于学生直观观测结果;②QT是优秀的跨平台C++图形界面应用程序开发框架。基于QT进行Linux下的图形界面开发,可以大大提高Linux下的编程效率[14-16]。
在没有QT编程的基础下,教师可以选择套餐3开展实验。此时,套餐3提供的基本资料包括:添加好语音采集设备的Linux内核,构建好的QT执行界面,QT的运行说明文档以及针对该实验的函数定义:QVector<double>ssubspec(QVector<double>&signal, int wlen, int inc, int NIS, double a, double b)。这里,谱减法的实现函数为ssubspec,其输入变量包括signal(输入语音信号),wlen(帧长),inc(帧移),NIS(前导帧数),a(过减因子),b(增益补偿因子)。基于谱减法原理设计的语音增强函数如下:
QVector<double>ssubspec(QVector<double>&signal, int wlen, int inc, int NIS, double a, double b)
{
QVector<double>wnd = hamming(wlen) ; //设置窗函数
QVector<double> output,X ; //谱减后的语音序列和幅值
QVector<double>Yphase,Yeng; //谱减前相位和能量
int N = signal.size();//信号长度
int nf = (N-wlen)/inc +1 ; //帧数
QVector<double> Y = enframe(signal,wnd,wlen,nf,inc); //信号分帧
//噪声段平均能量,参考式(3)
QVector<double> D=noiseeng(Y,NIS,wlen);
//计算信号相位
for(int i= 0 ; i<nf ; i++){
std::complex<double>f[wlen];
for(int j =0 ; j<wlen ; j++){
f[j].real() = Y[i*wlen+j];
f[j].imag() = 0;}
//求信号的傅里叶变换,参考式(1)
fft(f,wlen);
for(int j=0 ; j<wlen/2+1 ; j++){
//求信号相位,参考式(2)
Yphase<<angle(f[j]);}
for(int j=0 ; j<wlen ; j++){
Yeng<< abs(f[j])* abs(f[j]);}
//谱减法降噪,参考式(4)
for(int j=0 ; j<wlen/2+1 ; j++){
if(Yeng[j]>=a*D[j]){
X<<sqrt(Yeng[j]-a*D[j]);}
else{
X<<sqrt(b*Yeng[j]);}
}}
output = OverlapAdd2(X,Yphase,wlen,inc,nf); //合成谱减后的语音
return output;
}
当输入为一段信噪比为5 dB语音信号时,谱减法语音增强后的效果如图3所示。显示的软件为语音信号处理平台的综合性实验软件(此处为实验平台的完整界面,在单独实验时可根据需要进行裁剪)。菜单栏显示了平台可以完成的实验,中心区为波形显示区域,右边为参数显示区域。中心区的上部为原始语音信号,下部分两段,分别为带噪的语音波形和谱减后的输出信号。由图可知,增强后的信号信噪比由5 dB变为12.843 7 dB,提高了7.843 7 dB,改善效果比较明显。从信号波形也可看出,谱减后的波形较带噪语音有了明显改善。
针对目前语音信号处理课程偏重于理论教学的现状,本文秉承学以致用原则,开发了一款基于嵌入式系统的语音信号处理综合实验平台。本文重点介绍了系统的硬件构成和软件设计架构,并通过基于谱减法的语音增强实验,验证了平台的性能有效性和界面友好性。此外,该平台涉及了语音信号处理目前的主流研究方向,因此既可用于高等学院语音信号处理课程的教学工作,也可以满足从事语音信号处理相关科研人员学习和研发的需要。
The authors have declared that no competing interests exist.
[1] |
语音信号处理实验教学研究探索 [J]. |
[2] |
|
[3] |
Sparse hidden markov models for speech enhancement in non-stationary noise environments [J].DOI:10.1109/TASLP.2015.2458585 URL [本文引用: 1] 摘要
We propose a sparse hidden Markov model (HMM)- based single-channel speech enhancement method that models the speech and noise gains accurately in non-stationary noise environments. Autoregressive models are employed to describe the speech and noise in a unified framework and the speech and noise gains are modeled as random processes with memory. The likelihood criterion for finding the model parameters is augmented with an lp regularization term resulting in a sparse autoregressive HMM (SARHMM) system that encourages sparsity in the speech- and noise-modeling. In the SARHMM only a small number of HMM states contribute significantly to the model of each particular observed speech segment. As it eliminates ambiguity between noise and speech spectra, the sparsity of speech and noise modeling helps to improve the tracking of the changes of both spectral shapes and power levels of non-stationary noise. Using the modeled speech and noise SARHMMs, we first construct a noise estimator to estimate the noise power spectrum. Then, a Bayesian speech estimator is derived to obtain the enhanced speech signal. The subjective and objective test results indicate that the proposed speech enhancement scheme can achieve a larger segmental SNR improvement, a lower log-spectral distortion and a better speech quality in stationary noise conditions than state-of-the-art reference methods. The advantage of the new method is largest for non-stationary noise conditions.
|
[4] |
基于噪声鲁棒性特征和SVM的耳语音可懂度增强 [J].DOI:10.3969/j.issn.1003-7985.2012.03.001 URL [本文引用: 1] 摘要
提出了一种基于机器学习的耳语音可懂度增强方法.该方法利用已经 训练好的2类支持向量机来估计一个二元时频掩蔽值,进而合成增强后的耳语音.输入支持向量机的特征向量GFCCs是基于听觉外周模型进行提取的,具有噪声 鲁棒特性.在增强仿真实验中,将该算法同传统语音增强算法进行语音可懂度增强性能比较.客观评价和主观听力实验结果均表明,所提出的方法能有效提高含噪耳 语音的听觉可懂度;相比谱减法和log-MMSE方法在低信噪比时无法提高语音可懂度,该方法在低信噪比时仍可有效提高含噪耳语音的听觉可懂度.此外,含 噪耳语音通过所提出的方法进行增强后,其可懂度比未增强时明显提高.
|
[5] |
Power control algorithm in cognitive radio system based on modified Shuffled Frog Leaping Algorithm [J].DOI:10.1016/j.aeue.2011.10.004 URL [本文引用: 1] 摘要
Based on the non-cooperative power control game introduced by David Goodman, in this paper, we will introduce the concept of target SIR, modify the utility function, and propose a modified power control game algorithm. In this proposed power control game algorithm, it will be proved that the Nash equilibrium exists and is unique. To further improve the accuracy of the solution, the Shuffled Frog Leaping Algorithm (SFLA) will be modified and adopted by incorporating the basic ideas of Artificial Fish (AF). It can be shown that the proposed algorithm will have better global convergence and will have less possibility to be tripped in local optimum. Simulation results show that the proposed power control algorithm based on modified Shuffled Frog Leaping Algorithm (MSFLA) can not only increases the controllability on the target SIR but also reduces the user transmission power and improves system performance.
|
[6] |
语音情感特征的提取与分析 [J]. |
[7] |
基于改进的蛙跳算法与支持向量机的实用语音情感识别 [J]. |
[8] |
语音信号处理实验的改革与实践 [J].DOI:10.3969/j.issn.1006-7167.2014.04.031 URL [本文引用: 1] 摘要
随着数字信号处理的发展,语音信号领域越来越受到关注,语音信号处理是实现人机交互和通讯技术的必要方法。语音信号处理教学实验课程在国外著名大学已经得到广泛开设。本文介绍了一门最新开设的将基础知识与理论研究相结合的语音信号处理实验课程。该课程主要由一系列由浅入深的语音信号处理实验构成,通过这些实验,使学生深入理解语音信号领域的前沿知识。在自主实验环节,学生自主提出实验题目及内容,通过小组形式完整地完成一个项目的设计、开发和汇报过程。本文将一个小组的语音分离项目为例,来说明该课程不仅能够培养学生的动手和分析解决问题能力,并能激发学生对相关领域的研究兴趣。
|
[9] |
嵌入式数字语音处理实验系统的设计与实现 [J].DOI:10.3969/j.issn.1006-7167.2012.10.014 URL [本文引用: 1] 摘要
提出了智能化和微型化的设计理念,并充分考虑其系统的可扩展性,采用多媒体SoC微处理器Z228为核心单元,结合专用的立体声音频处理器AK4643,构建了嵌入式数字语音处理系统模型.基于该模型设计并研制了一种智能化程度高、微功耗、体积小、重量轻的嵌入式数字语音处理系统.理论分析和实验结果表明:该系统能高保真地完成语音处理,提高了便携式语音设备的整体性能.该系统已应用于便携式电子导游系统,也可推广应用于其他便携式语音设备及音视频监控系统.
|
[10] |
机器人语音识别实验设计与实现 [J].DOI:10.3969/j.issn.1002-4956.2013.02.012 URL [本文引用: 1] 摘要
基于Matlab设计了以动态时间规整(dynamic time warping,DTW)算法和Mel频率倒谱系数(Mel frequency cepstrum coefficients,MFCC)参数提取算法为基础的孤立词自动语音识别系统;然后结合机器人语音识别的需求,基于凌阳SPCE061A设计了语音识别应用系统。结合上述两部分工作,设计、实现了机器人语音识别系统演示实验和机器人语音识别半开放实验,实现效果达到预期实验设计目标。
|
[11] |
基于ARM Cortex平台的嵌入式系统课程虚拟实验平台设计 [J].DOI:10.3969/j.issn.1002-4956.2014.07.028 URL [本文引用: 1] 摘要
针对高校嵌入式系统课程逐渐迁移到全新的Cortex-M平台,设计开发了一套分层次的基于Cortex-M3的虚拟实验教学平台。实验平台分基础型、综合型和设计型3个层次,采用递进教学方式,由浅入深,循序渐进,以适用不同知识基础的学生。虚拟实验教学平台可在教学时间与教学空间上拓展嵌入式系统课程的学习范围,激发学生的学习兴趣,提高了教学质量。
|
[12] |
|
[13] |
Suppression of acoustic noise in speech using spectral subtraction [J].DOI:10.1109/TASSP.1979.1163209 URL [本文引用: 1] 摘要
A stand-alone noise suppression algorithm is presented for reducing the spectral effects of acoustically added noise in speech. Effective performance of digital speech processors operating in practical environments may require suppression of noise fr...
|
[14] |
移动终端实验教学平台设计与应用 [J]. |
[15] |
嵌入式Linux系统中基于QT库的应用程序设计 [J].DOI:10.3969/j.issn.1006-7167.2014.05.021 URL 摘要
基于S3C2440微处理器所构建的ARM9硬件平台,配置并移植了嵌入式Linux系统,在主机和开发板之间建立交叉编译环境以及QT和QT/Embedded的GUI的开发环境.提出了基于嵌入式QT界面中应用程序的设计方法,在此基础上设计并实现了具有加、减、乘、除四则运算功能的数学运算器,实现了基于QT的嵌入式应用程序的设计,应用程序可以在开发板上正常运行.
|
[16] |
基于RFID和QT/E车辆出入监控系统的设计 [J].DOI:10.3969/j.issn.1006-7167.2014.11.022 URL [本文引用: 1] 摘要
随着汽车保有量的增长,高效智能的车辆监控系统已成为许多社区、 公司的迫切需求.本设计基于ARM处理器和嵌入式Linux操作系统,采用QT/E(Qt/Embedded)编程语言,利用RFID技术进行车辆标识, 实现车辆出入的自动化监控和管理.在车辆出入口安装本系统,对合法的车辆进行核对识别,实现正常车辆不停车快速通过;并可记录统计车辆出入流量.设计中采 用Sqlite数据库实现底层数据的管理与维护.基于ARM处理器的便携式设计在成本、安装等方面都更具有优势;利用QT/E和触摸屏实现图形化人性化的 交互界面,界面美观,操作方便.测试表明该设计能够实现车辆出入的自动化管理,满足现代化管理的需求.
|
版权所有:《实验室研究与探索》编辑部
主管单位:中华人民共和国教育部 主办单位:上海交通大学 出版单位:上海交通大学学报编辑部 地址:上海市华山路1954号包图1516号 邮编:200030 电话:(86-21)62932952 62932875 |
/
〈 |
|
〉 |