语音数据采集

2024-05-14

语音数据采集(精选十篇)

语音数据采集 篇1

1硬件系统

Direct Pro Q10是美国Aardvark公司生产的一种最高支持24Bit/96KHz采样的数字音频接口,它由一块PCI插卡和一个外置接口盒组成。其中PCI插卡上的所有元件都被一个屏蔽罩遮盖,这可以保证该卡在电路非常密集的计算机主机内最大限度地减少电磁干扰,从而提高采集到的语音信号的质量。外置接口盒则实现了最大8路信号输入和2路信号输出,因此采用该数字音频接口最大可以支持8个麦克风同时进行语音数据采集,这对通常的应用而言是足够的。由于Direct Pro Q10的外置接口盒没有附带麦克风输入设备,需要用户根据需要自己制作一块麦克风输入电路板并通过电缆和外置接口盒连接。

在计算机PCI插槽内安装好Direct Pro Q10的PCI插卡后,需要将外置接口盒和PCI插卡连接正确后再安装驱动程序,否则操作系统将无法找到硬件设备。驱动程序安装完毕并重启计算机后,打开“控制面板”中的“声音和音频设备”控制程序,选择“音频”标签后,可以看到系统将Direct Pro Q10识别成了5个独立的双通道音频输入设备,如图1所示:

其中的“9,10 Direct Pro Q10”是一块虚拟的输入设备,无法真正地进行数据采集,因此实际上总的输入通道数量只有8路。

2软件实现

从图1可以看到,操作系统将Direct Pro Q10识别成了多个标准的双通道音频输入设备,因此可以使用标准的Windows音频输入函数waveIn系列函数族分别打开这些音频输入设备然后进行多路的语音信号采集。然而由于输入设备是被分别打开的,不可能做到在同一时间内所有输入设备被同时打开。这将造成部分设备比其他设备提前开始进行录音,而且这部分时间是随机的,无法通过软件补偿来消除,从而导致了录取到的语音信号不能同步,满足不了麦克风阵列语音信号处理的要求。

为了解决多个通道语音数据采集的同步问题,Direct Pro Q10的驱动程序里面包含了ASIO驱动程序。ASIO的全称是“Audio Stream Input Output”,是由Steinberg公司提出的一种音频技术规范。通过ASIO技术可以完全摆脱Windows操作系统对硬件的集中控制,达到直接控制音频硬件的目的。利用Direct Pro Q10的ASIO驱动程序,可以保证8个音频采集通道在同一时刻开始进行音频信号的采集,从而确保各路音频信号的同步。

要使用ASIO,首先需要下载ASIO SDK开发包,该开发包中包括有ASIO的函数原型声明以及为了方便用户使用而附带的C++类。

2.1ASIO驱动程序的初始化

在操作系统中可能有多个音频设备都提供了ASIO驱动,我们必须查找到需要使用的驱动程序并初始化该驱动程序。在ASIO SDK中提供了一个AsioDriverList类来完成列举操作系统中所有ASIO驱动程序的功能。AsioDriverList类的构造函数读取系统注册表中的信息得到了所有注册过的ASIO驱动程序并形成了一个链表结构,可以通过该类提供的asioGetNumDev方法得到系统中ASIO驱动程序的数量,随后使用一个循环分别调用asioGetDriverName方法就可以得到所有ASIO驱动程序的名字从而提供给用户进行选择。

当用户选择了指定的ASIO驱动程序后,开始进行指定的ASIO驱动程序初始化过程。首先得到用户选择的ASIO驱动程序名字,然后把驱动程序的名字作为参数调用loadAsioDriver函数来装载对应的驱动程序,如果装载驱动程序成功该函数将返回TRUE。驱动程序装载完成后,需要分配一个ASIODriverInfo结构并调用ASIOInit函数对该驱动进行初始化操作。

2.2设置数据采集通道

当ASIO驱动程序的初始化完成后,需要对各个音频输入通道进行设置才能正常地进行数据采集工作。首先需要知道的是每个通道应该分配的数据缓冲区大小,这可以通过调用ASIOGetBufferSize函数来实现,该函数可以返回ASIO驱动程序最大、最小和建议的数据缓冲区大小。为了方便起见,直接使用建议的数据缓冲大小就可以了。随后调用ASIOGetChannels函数获取指定的音频设备提供的输入和输出通道数量。得到了指定音频设备的输入通道数量后,首先分配一个成员数量等于输入通道数量的ASIOBufferInfo结构数组,并将该数组中每个ASIOBufferInfo结构中的isInput成员设置成ASIOTrue,表明该通道将用于音频数据输入,同时该结构中channelNum成员必须设置成对应的通道序号。

ASIO驱动程序通过用户程序指定的4个回调函数来通知用户程序对不同的事件做出不同的响应。这4个回调函数分别通知用户音频缓冲区已满,音频采样率被更改,通用的控制消息以及增强了部分功能的音频缓冲区已满事件。由于我们只对音频缓冲区已满事件感兴趣,因此只需要实现此回调函数即可,其他的3个回调函数可以直接使用空函数。

为了通知ASIO驱动程序正确的设置回调函数并为每个音频输入通道分配数据缓冲区,需要调用ASIOCreateBuffers函数。该函数带有4个参数,其中第一个参数就是前面已经分配并设置好的ASIOBufferInfo结构数组指针,第二个参数是输入通道的数量,第三个参数是每个通道单个缓冲区的大小,第四个参数则是一个ASIOCallbacks结构,该结构中就含有前面所说的4个回调函数指针。调用ASIOCreateBuffers成功后,ASIO驱动已经做好准备,可以正确地驱动音频硬件开始进行数据采集了。

2.3设置采样率

ASIO驱动程序并没有提供可以一次得到指定音频硬件所有支持采样率的函数,而是提供了一个ASIOCanSampleRate函数来查询音频硬件是否支持指定的采样率,当音频硬件支持指定的采样率时,该函数将返回ASE_OK。为此程序中需要首先建立一个常用的采样率数组,然后依次调用ASIOCanSampleRate来确认当前音频硬件是否支持该采样率并将支持的采样率提供给用户进行选择。当用户选定了一个可以支持的采样率后,调用ASIOSetSampleRate函数就可以将当前使用的采样率设置成指定值。为了稳妥起见,设置完成后可以调用ASIOGetSampleRate获取当前使用的采样率,以确保采样率设置成功。

2.4获取采样精度

ASIO驱动程序支持对不同的采样通道分别使用不同的采样精度。要得到指定通道的采样精度数据,首先需要分配一个ASIOChannelInfo,并将该结构中的channel成员设置成需要获取采样精度的通道序号,同时将isInput成员设置成ASIOTrue表示该通道是输入通道,随后用此结构的地址指针作为参数调用ASIOGetChannelInfo函数。ASIOGetChannelInfo函数将ASIOChannelInfo结构中的type成员设置成当前使用的采样精度代码。对于麦克风阵列语音处理这种应用环境而言,每路采样通道的采样精度是一样的,因此获取第一路输入通道的精度就足够了。由于ASIO的开发包没有提供设置采样精度的函数,要设置采样精度只能调用ASIOControlPanel函数将硬件厂商提供的ASIO控制板调出进行设置。

2.5开始和停止采样

在所有的初始化和设置工作都完成后,要命令ASIO驱动程序开始驱动音频硬件进行数据采集,只需要调用ASIOStart函数,此函数可以保证同时打开所有已经创建成功的音频输入通道并开始录音。在录音工作完成后,调用ASIOStop即可同时关闭所有已经打开的音频输入通道。

2.6在回调函数中处理采样数据

ASIO驱动程序为每一个成功创建的音频输入通道分配了两块大小相同的输入缓冲区,当一块缓冲区被数据填充满后,ASIO驱动会自动切换使用另一块缓冲区并回调用户在调用ASIOCreateBuffers函数时指定的处理函数。该回调函数的函数原型定义为

void (*bufferSwitch) (long doubleBufferIndex, ASIOBool directProcess)

其中doubleBufferIndex指定了当前需要处理的缓冲区序号,因为ASIO驱动程序使用了双缓冲,因此这个参数固定是0或者1。

在调用ASIOCreateBuffers函数时用户必须输入一个ASIOBufferInfo结构数组,当此函数调用成功后,ASIOBufferInfo结构数组中的buffers成员分别存放着ASIO驱动程序分配的缓冲区地址指针。由于bufferSwitch回调函数中的doubleBufferIndex参数指定了当前需要处理的缓冲区序号,可以知道ASIOBufferInfo.buffers[doubleBufferIndex]就是当前需要处理的缓冲区地址指针,在该地址中存放着采集到的音频数据。

2.7关闭ASIO驱动程序

在数据采集工作结束后,需要正确地关闭各个数据采集通道并卸载已经装入的ASIO驱动程序来释放系统分配的资源。通过调用ASIODisposeBuffers函数,可以通知ASIO驱动程序释放为各个输入通道分配的输入缓冲区,随后调用ASIOExit函数和removeCurrentDriver函数关闭所有的输入通道并卸载已经装入的ASIO驱动程序。

4运行结果

在整体的硬件和软件完成后,为了测试该系统能否确保各个输入通道间数据采集的同步,将8路输入通道接上了同一个麦克风并录制一个短时的声音脉冲,通过比较该脉冲的第一个峰值所处的时间轴位置来判断各个输入通道间信号数据的同步性。测试结果如图2所示:

图2中从上到下依次是通道1,3,5,7连接同一个麦克风采集到的短时声音脉冲波形,可以看出各个通道采集到的数据第一个峰值都出现在第9319个采样点,这表明各个通道间采集到的信号数据是完全同步的。

摘要:利用ASIO音频输入输出界面API,在基于Aardvark公司生产的Direct Pro Q10多通道输入输出设备的硬件基础上实现了一套完整的多通道同步语音数据采集系统。为进一步的麦克风阵列语音信号处理提供了一个可靠的实验平台。

关键词:ASIO,多通道,同步语音数据采集

参考文献

[1]Audio Streaming Input Output Development Kit.Steinberg,1999.

[2]http://namm.harmony-central.com/WNAMM01/Content/Aardvark/PR/Q10.html.

嵌入式系统语音采集与播放程序设计 篇2

--嵌入式系统语音采集与播放程序设计

班级: 学号: 姓名:

指导老师:

课程设计时间:2011.6.29---2011.7.8

江苏大学

目录

第一章 引言.........................................................1 1.1 设计目的......................................................1 1.2 设计任务与要求................................................1 第二章 课程设计平台构建与流程.......................................2 2.1 嵌入式系统平台构建............................................2 2.2 课程设计流程..................................................3 2.3 课程设计硬件结构与工作原理...................................3 第三章 BOOTLOADER移植与下载.......................................11 3.1 VIVI源代码安装...............................................11 3.2 VIVI源代码分析与移植.........................................11 3.3 VIVI编译与下载...............................................12 第四章 LINUX内核移植与下载........................................14 4.1 LINUX内核源代码安装..........................................14 4.2 LINUX内核源代码分析与移植....................................14 4.3 LINUX内核编译与下载..........................................15 第五章 课程设计功能模块程序设计与交叉编译..........................24 5.1 课程设计模块功能.............................................24 5.2 功能模块驱动程序设计.........................................24 5.3 功能模块交叉编译.............................................28 第六章 根文件系统建立与文件系统下载................................29 6.1 根文件系统分析...............................................29 6.2 文件系统映像文件生成.........................................30 6.3 文件系统下载.................................................31 6.4 功能模块运行与调试...........................................32 第七章 课程设计总结与体会..........................................34 7.1 得出的结论...................................................34 7.2课程设计过程中遇到的问题及解决方法...........................34 7.3 心得体会.....................................................34 参考文献...........................................................36

第一章 引言

1.1 设计目的

分析Linux操作系统下音频设备驱动的结构,编写应用测试程序,实现UDA1341芯片的实时录音及放音功能,进一步熟悉vivi、Linux内核和根文件系统的编译和烧写至开发板的开发流程。

1.2 设计任务与要求

在Samsung公司S3C2410处理器的edukit-Ⅲ开发板上,在嵌入式linux操作系统环境下,根据语音芯片UDA1341的驱动程序和语音数据的特点编写语音采集与播放的应用测试程序,实现语音数据的采集和实时播放功能。1.要求本系统实时的采集与播放

2.通过麦克风录制一段语音信息,对其进行播放 第二章 课程设计平台构建与流程

2.1 嵌入式系统平台构建

2.1.1软件部分

1)Linux或Windows 98/2000/NT/XP 2)cygwin cygwin是一个在windows平台上运行的unix/Linux模拟环境,是cygnus solutions公司开发 3)Embest IDE 英蓓特提供的一个嵌入式开发的集成环境。4)windows中的超级终端

5)Embest online Flash Programmer for ARM 烧写相关文件到NorFlash中的工具。

6)建立linux的交叉编译环境,各项源代码的安装等 2.1.2硬件部分

1)EduKit-II实验平台 2)S3C2410核心子板 3)PC机 2.2 课程设计流程

图2.1 设计流程

2.3 课程设计硬件结构与工作原理

2.3.1硬件模块(1)

SCLLRCIIS控制器SDOSDIMCL 图2.2 典型的IIS总线上的设备

(2)IIS总线结构

IIS总线只处理声音数据,其他控制信号等则需单独提供。IIS总线使用3根串行总线,分别是:提供分时复用功能的SD线(Serial data,串行数据),WS线(Word select,字段选择(声道选择))和SCK线(Continuous Serial clock,连续的时钟信号)。

音频编解码4 ADDRTxFIFODATASFTRBRFCRxFIFOSDCNTLCHHCSCLKIPSR_APCLKIPSR_BSCLKGLRCKCDCLK

图2.3 IIS总线接口内部结构

S3C2410A IIS总线接口各模块的功能描述如下:

● BRFC 表示总线接口、寄存器区和状态机。总线接口逻辑和FIFO访问由状态机控制。

● IPSR 表示两个5位的前置分频器ISPR_A和ISPR_B,一个前置分频器作为IIS总线接口的主时钟发生器,另一个前置分频器作为外部音频编解码器CODEC的时钟发生器。

● TxFIFO和RxFIFO 表示两个64字节的FIFO。在发送数据时,数据写到TxFIFO,在接收数据时,数据从RxFIFO读取。

● SCLKG 表示主IISCLK发生器。在主设模式时,由主时钟产生串行位时钟。● CHNC 表示通道发生器和状态机。通道状态机用于产生和控制IISCLK和IISLRCK。

● SFTR 表示16位移位寄存器。在发送模式时,并行数据移入SFTR并转换成串行数据输出;在接收模式时,串行数据移入SFTR并转换成并行数据输出。具体的相关寄存器的位功能描述请参观相关资料。2.3.2 工作原理

常用的数字音频处理集成电路包括A/D、D/A、DSP、数字滤波器和数字音频I/O接口及设备(麦克风、话筒)等。麦克风输入的模拟音频信号经A/D转换、音频编码器实现模拟音频信号到数字音频信号转换,编码后的数字音频信号通过控制器送入DSP或微处理器相应的处理。音频输出时,数字音频信号(音频数据)经控制器给音频解码器,经D/A转换后由扬声器输出。

数字音频涉及概念很多,重要的是理解:采样和量化。采样就是每隔一定时间读一次声音信号的幅度,而量化则是将采样得到的声音信号幅度转换为数字值。从本质上讲,采样是时间上的数字化,而量化则是幅度上的数字化。

根据奈奎斯特(Nyquist)采样理论采样频率应高于输入信号的最高频率两倍。为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,要达到DVD的音质需要采用更高的采样频率。

量化是对模拟音频信号的幅度数字化,量化位数决定模拟信号数字化以后的动态范围,常用的有8位、12位和16位。量化位越高,信号的动态范围越大,数字化后的音频信号就越接近原始信号,但所需要的存储空间也越大。

声道有单声道、双声道和多声道。双声道又称立体声,在硬件中有两条线路,音质和音色都优于单声道,但数字化后占据的存储空间的大小要比单声道多一倍。多声道能提供更好的听觉感受,不过占用的存储空间也更大。

数字音频数据有PCM、MP3、WMA、WAV、Ogg Vorbis、RA、AAC、ATRAC 3等多种不同的文件格式。

1)IIS总线

IIS总线(IIS,Inter-IC Sound Bus,数字音频集成电路通信总线)是Philip公司提出的音频总线协议,它是一种串行的数字音频总线协议,是音频数据编码或解码常用的串行音频数字接口。

(1)IIS总线的传输模式

数据的发送方和接收方需要采用相同的时钟信号来控制数据传输,数据传输方(主设)必须产生字段选择信号、时钟信号和需要传输的数据信号。在一个复杂的数字音频系统中,可能会有多个发送方和接收方,通常采用系统主控制模式,主控制模块控制数字音频数据在不同集成电路(设备)间的传输,数据发送方就需要在主控制模块的协调下发送数据。IIS总线的三种传输模式如图2、3、4所示,这些模式的配置一般需通过软件来实现。

clock SCKTRANSMITTERword select WSdata SDRECEIVERTRANSMITTER=MASTER

图2.4发送器为主设时的传输模式

clock SCKTRANSMITTERword select WSdata SDRECEIVERRECEIVER=MASTER

图2.5 接收器为主设时的传输模式

CONTROLLERclock SCKTRANSMITTERword select WSdata SDRECEIVERCONTROLLER=MASTER

图2.6 控制器为主设时的传输模式(2)IIS总线时序 1串行数据(SD)○串行数据的传输由时钟信号同步控制,且串行数据线每次传输1字节的数据。当音频数据被数字化成二进制流后,传输时先将数据分成字节(如8位、16位等),每个字节的数据传输从左边的二进制位MSB(Most Significant Bit)开始。当接收方和发送方的数据字段宽度不一样时,发送方不考虑接收方的数据字段宽度。如果发送方发送的数据字段宽度小于系统字段宽度,就在低位补0;如果发送方的数据字段宽度大于接收方的宽度,则超过LSB(Least Significant Bit)的部分被截断。

2字段选择(WS)○音频系统一般包含有左右两个声道,字段选择(WS)用来选择左声道或者右声道,WS=0表示选择左声道;WS=0表示选择左声道。如果不在外部加以控制,WS会在MSB传输前的一个时钟周期发生变化,使数据接收方和发送方保持同步。此外,WS能让接收设备存储前1字节,并且准备接收后1字节。

3时钟信号(SCK)○在IIS总线中,任何一个能够产生时钟信号的电路都可以称为主设备,从设备从外部时钟输入得到时钟信号。IIS的规范中制定了一系列关于时钟信号频率和延时的限制。

图2.7 IIS总线时序

(3)IIS总线接口的工作方式

IIS总线接口是用来连接外部的标准编解码器(CODEC)的接口。S3C2410A提供一个IIS总线接口,能用来连接一个外部8/16位立体声音频CODEC,支持IIS 总线数据格式和MSB-justified数据格式。该接口对FIFO的访问提供DMA传输模式,而不是采用中断模式。它可以同时发送数据和接收数据,也可以只发送或只接收数据。在只发送和只接收模式,S3C2410A的IIS总线接口有以下三种工作方式。

1正常传输方式 ○在正常传输方式,对于发送和接收FIFO,IIS控制寄存器有一个FIFO就绪标志位。当FIFO准备发送数据时,如果发送FIFO不空,则FIFO就绪标志位为“1”;如果发送FIFO为空,该标志为“0”。在接收数据时,当接收FIFO是不满时,FIFO就绪标志位为“1”,指示可以接收数据;若接收FIFO满,则该标志为“0”。通过FIFO就绪标志位,可以确定CPU读/写FIFO的时间。

2DMA传输方式 ○在DMA传输方式,利用DMA控制器来控制发送和接收FIFO的数据存取,由FIFO就绪标志来自动请求DMA的服务。

3发送和接收方式 ○在发送和接收方式,IIS总线接口可以同时发送和接收数据。(4)S3C2410A IIS总线接口的音频串行接口格式

S3C2410A的IIS总线接口支持IIS总线数据格式和MSB-justified数据格式。IIS总线格式 ○IIS总线有IISDI(串行数据输入)、IISDO(串行数据输出)、IISLRCK(左/右通道选择)和IISCLK(串行位时钟)4条线,产生IISLRCK和IISCLK信号的为主设备。串行数据以2的补码发送,首先发送是MSB位。首先发送MSB位可以使发送方和接收方具有不同的字长度,发送方不必知道接收方能处理的位数,同样接收方也不必知道发送方正发来多少位的数据。

当系统字长度大于发送器的字长度时,数据发送时,字被切断(最低数据位设置为0)发送。接收器接收数据时,如果接收到的数据字长比接收器的字长更长时,则多的数据位被忽略。另一方面,如果接收器收到的数据位数比它的字长短时,则缺少的位设置为0。因此,MSB有固定的位置,而LSB的位置与字长度 有关。在IISLRCK发生改变的一个时钟周期,发送器发送下一个字的MSB位。

发送器发送的串行数据可以在时钟信号的上升沿或下降沿同步。然而,串行数据必须在串行时钟信号的上升沿锁存到接收器,所以发送数据使用上升沿进行同步时会一些限制。

左右通道选择线指示当前正发送的通道。IISLRCK可以在串行时钟的上升沿或者下降沿改变,不需要同步。在从模式,这个信号在串行时钟的上升沿被锁存。IISLRCK在MSB位发送的前一个时钟周期内发生改变,这样可以使从发送器同步发送串行数据。另外,允许接收器存储前一个字,并清除输入以接收下一个字。

2MSB-justified数据格式 ○MSB-justified总线格式在体系结构上与IIS总线格式相同。与IIS总线格式唯一不同的是,只要IISLRCK有变化,MSB-justified格式要求发送器总是发送下一个字的最高位。

2)音频编解码芯片UDAl341TS UDA1431TS可把通过麦克风音频输入通道输入的立体声模拟信号转化为IIS格式的数字信号,传送给S3C2410的IIS控制器,然后CPU使用DMA控制器把得到的数字信号存放的一块内存空间上;同样DMA控制器也能把已存的数字信号通过IIS格式发送给UDAl341TS芯片,由该芯片转换成模拟信号,通过耳机音频输出通道输出。利用UDA1341TS内部的PGA(可编程增益放大器)、AGC(自动增益控制)功能对模拟信号进行处理。对于数字信号,UDA1341TS提供DSP(数字音频处理)功能。

S3C2410A的IIS接口线分别与UDA1431TS的BCK、WS、DATAI、SYSCLK相连。当UDA1431TS芯片工作在微控制器输入模式时,使用UDA1431TS的L3总线(L3DATA、L3MODE和L3CLOCK)。L3DATA、L3MODE和L3CLOCK分别表示与微处理器接口的数据线(L3DATA)、模式控制线(L3MODE)和时钟线(L3CLOCK)。微控制器通过对UDA1431TS中的数字音频处理参数进行配置。S3C2410A没有与L3总线配套的专用接口,可以利用通用I/O口进行控制。第三章 Bootloader移植与下载

3.1 Vivi源代码安装

进入cygwin,Vivi源代码的安装:

$> source /tmp/edukit-2410/set_env_linux.sh// Linux编译环境变量设置,第一次打开Cygwin必须设置。

$> cd $WORKDIR $> tar-xvjf /tmp/edukit-2410/source/vivi/vivi-20030929.tar.bz2 $> ls

„ vivi „ „为$WORKDIR目录下其他内容

正确解压后,可以看到多了一个vivi目录,即vivi源代码的安装目录,后面的vivi配置及编译都得进入vivi目录进行。再为EduKit2410实验系统打入vivi源代码的补丁文件:

$> cd vivi $> patch-p1

vivi的代码包括arch,init,lib,drivers和include等几个目录,共200多条文件。

Vivi主要包括下面几个目录:

arch:此目录包括了所有vivi支持的目标板的子目录,例如s3c2410目录。drivers:其中包括了引导内核需要的设备的驱动程序(MTD和串口)。MTD目录下分map、nand和nor三个目录。

init:这个目录只有main.c和version.c两个文件。和普通的C程序一样,vivi将从main函数开始执行。lib:一些平台公共的接口代码,比如time.c里的udelay()和mdelay()。include:头文件的公共目录,其中的s3c2410.h定义了这块处理器的一些寄存器。Platform/smdk2410.h定义了与开发板相关的资源配置参数,我们往往只需要修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。

3.3 Vivi编译与下载

1)Vivi源代码的编译

然后执行以下命令进行编译:

$> source /tmp/edukit-2410/set_env_linux.sh Linux编译环境变量设置

$> cd $WORKDIR/vivi $> make clean

图3.1 vivi编译

$> make menuconfig输入配置smdk2410-amd:Nor Flash boot

smdk2410:Nand boot

图3.2 图形界面下配置内核文件

其中,运行make menuconfig后,选择Load an Alternate Configuration file,配置文件名称如下:

smdk2410:编译 vivi 在 Nand Flash(K9S5608)中运行; smdk2410-amd:编译 vivi 在 Nor Flash(AM29LV160DB)中运行。这两个配置文件在usrlocalsrcedukit-2410viviarchdef-configs中,须复制

到usrlocalsrcedukit-2410vivi中;或者可以在 menuconfig 中输入全部路径。配置好后,输入:$> make

图3.3 vivi映像文件生成

如果编过程中没有出现错误,则编译后的执行文件存放于 vivi 目录下。2)下载:

在下载模式下,vivi为用户提供一个命令行人机接口,通过人机接口可使用vivi提供的一些命令。如嵌入式系统没有键盘和显示,可以利用vivi中的串口,将其和宿主机连接起来,利用宿主机中的串口软件(如Windows中的超级终端或Linux中的minicom)来控制。第四章 Linux内核移植与下载

4.1 Linux内核源代码安装

linux源代码安装

运行cygwin,执行以下命令完成cygwin 环境下的Linux源代码的安装: $> source /tmp/edukit-2410/set_env_linux.sh Linux编译环境变量设置

$> cd $WORKDIR $> tar –xvjf /tmp/edukit-2410/linux-2.4.18-rmk7-pxa1-mz5-i2c.tar.bz2 $> ls „ kernel „ „为$WORKDIR 目录下其他内容

图4.1 linux内核安装

正确解压后,相比之前可以看到多了一个kernel目录,即kernel源代码的安装目录,后面的Linux配置及编译都得在kernel目录进行。

实验中提供的linux内核已经包含了Linux源代码的补丁文件、I2C和网络驱动模块

4.2 Linux内核源代码分析与移植

4.2.1 Linux源代码分析

Linux内核由5个主要的子系统组成。这5个子系统分别是进程调度(SCHED)、内存管理(MM)、虚拟文件系统(Virtual File System,VFS)、网络接口(NET)和进程间通信(IPC)。

进程调度控制着进程对CPU的访问。当需要选择下一个进程运行时,由调度 程序选择最值得运行的进程。可运行进程实际是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。

内存管理允许多个进程安全地共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。硬件无关的部分提供了进程的映射和虚拟内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。

虚拟文件系统隐藏了各种不同硬件的具体细节,为所有设备提供了统一的接口,虚拟文件系统还支持多达数十种不同的文件系统,这也是Linux较有特色的部分。虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2、fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有相应的设备驱动程序

4.2.2 Linux内核及硬件模块驱动移植

内核和文件系统、图形用户系统(GUI窗口系统)可以分开,它们的开发、移植、下载甚至运行都是可以分开的。内核移植是一个比较复杂的任务,也是嵌入式系统开发中非常重要的一个过程。内核移植一般包括内核配置、内核编译和内核下载3大步骤。

4.3 Linux内核编译与下载

4.3.1 Linux内核源代码安装

运行cygwin,执行以下命令完成cygwin环境下的Linux内核源代码的安装: $> source /tmp/edukit-2410/set_env_linux.sh //Linux 编译环境变量设置 $> cd $WORKDIR $> tar –xvjf /tmp/edukit-2410/linux-2.4.18-rmk7-pxa1-mz5-i2c.tar.bz2 $> ls „ kernel „ //„为$WORKDIR 目录下其他内容

正确解压后,可以看到多了一个kernel目录,即kernel内核源代码的安装目录,后面的Linux内核配置及编译都得进入kernel目录进行。实验中提供的linux内核已经包含了Linux源代码的补丁文件、IIC和网络驱动模块。4.3.2 Linux内核的编译 $> cd kernel

图4.2 $> make mrproper 清除所有的旧的配置和旧的编译目标文件等 $> make xconfig 在图形界面下对内核进行配置(配置方法之一)执行make xconfig 后,弹出如图4.3的内核定制界面:

图4.3 内核定制界面

选择按钮”Load Configuration from File”,如图4.4输入smdk2410:

图4.4 内核配置文件

选择配置sound ,设置Sound support为y:

设置BT878 audio dma为y: 设置SMDK-2410 audio support为y:

设置OSS sound modules为y:

根据提示加载配置文件后,点击按钮”Store Configuration to File”,如图4.5输入audio1:

图4.5 存储配置文件

保存,Save and Exit。如图4.6

图4.6 $> make dep //搜索Linux编译输出与源代码之间的依赖关系并生成依赖文件。

图4.7

$> make clean //清除构造内核时生成的目标文件、模块文件和临时文件。$> make zImage //生成压缩的内核映像文件。

图4.8 编译通过后,在/usr/local/src/edukit-2410/kernel/arch/arm/boot/目录下生成内核的压缩映像文件为“zImage”,此文件是最后要烧写到开发板的内核映像文件。

4.3.1 Linux内核下载

内核下载:

1)启动超级终端(波特率为115200),连好串口线,在开机瞬间快速按空格键,进入vivi控制台命令行下;打开S3C2410&NandFlash_vivi.cfg,在Flash Programmer的Progarm页中选择:vivi.bon&load.bin文件进行烧写。如图4.9

图4.9 烧写界面

点击按钮Progarm开始烧写,直到烧写成功;连接串口到PC机COM1,运行成功;连接串口线到 PC 机 COM1,运行光盘中提供的 Windows 超级终端 Hyper Terminal.ht;开发板重新加电,程序运行后,在超级终端上可以看到串口输出类似以下信息:

图4.10 超级终端界面

看到以上信息后,表示正在等待用户从超级终端下载文件。这时,请点击超 级终端菜单“传送”选择 Xmodem 方式下载 vivi.nand 文件,点击 OK 后等待下载烧写结束即可。

图4.11 添加传送文件

图4.12 下载vivi nada 2)在vivi启动等待中,敲入空格键进入vivi界面环境,并输入以下命令: vivi> load flash kernel x <回车> 烧写更新内核约4分钟即可烧写完毕,如图4.13

图4.13 等待下载

3)立即选择要发送的文件,比如zImage文件,这里Linux环境下源代码arch/arm/boot目录下的zImage内核映像文件已转移到 windows某目录下。要选择合适的xmodem协议。以上操作完成 后,单击“发送,几分钟后即可发送完毕。

图4.14 发送zImage

图4.15 下载成功 第五章 课程设计功能模块程序设计与交叉编译

5.1 课程设计模块功能

5.1.1 三个模块:

I2S音频总线接口电路 ;音频编解码器芯片udal41; DMA控制器; 5.1.2工作过程:

麦克风输入的模拟音频信号在音频编解码器中经过A/D转换和编码将模拟信号转换成数字信号,将这些数字信号先传给I2S音频总线接口电路中的FIFO,再由DMA控制器送入DSP中做相应的处理,这是录音的过程;DMA控制器将DSP中存储的信号传送给I2S音频总线接口电路中的FIFO,再发送给音频编解码芯片进行D/A转换,通过耳机输出模拟信号。

5.2 功能模块驱动程序设计

5.2.1 关于驱动结构体

由于目前许多硬件厂商在出售各种产品时,一般都不带Linux下的设备驱动程序,而且编写驱动程序的工作量占整个系统工作量的很大的一部分,这使得Linux下设备驱动程序的开发变得越来越重要。

本课程设计不要求自己编写驱动程序,但要求分析UDAl341TS驱动程序,以便编写出语音采集与播放的应用测试程序,同时为以后编写驱动程序打好基础。嵌入式Linux系统下的IIS音频驱动程序是在/usr/local/src/edukit-2410/drivers/sound 中,3c2410-uda1341.c 文件即是。

关于结构体:

在音频驱动程序中有2个比较重要的结构体: typedef struct { int size;/* buffer size */ char *start;/* point to actual buffer */(内存虚拟地址起始地址)dma_addr_t dma_addr;/* physical buffer address */(内存物理地址起始地址)

struct semaphore sem;/* down before touching the buffer */ int master;/* owner for buffer allocation, contain size when true */(内存大小)

} audio_buf_t;typedef struct { audio_buf_t *buffers;/* pointer to audio buffer structures */ audio_buf_t *buf;/* current buffer used by read/write */ u_int buf_idx;/* index for the pointer above */ u_int fragsize;/* fragment i.e.buffer size */(音频缓冲区片大小)

u_int nbfrags;/* nbr of fragments */(音频缓冲区片数量)dmach_t dma_ch;/* DMA channel(channel2 for audio)*/ } audio_stream_t;audio_stream_t是一个管理多缓冲区的结构体,为音频流数据组成了一个环形缓冲区。audio_buf_t管理一段内存,audio_stream_t管理N个audio_buf_t。

音频驱动的两个file_operations结构定义如下: static struct file_operations smdk2410_audio_fops = { llseek: smdk2410_audio_llseek, write: smdk2410_audio_write, read: smdk2410_audio_read, poll: smdk2410_audio_poll, ioctl: smdk2410_audio_ioctl, open: smdk2410_audio_open, release: smdk2410_audio_release };static struct file_operations smdk2410_mixer_fops = { ioctl: smdk2410_mixer_ioctl, open: smdk2410_mixer_open, release: smdk2410_mixer_release };这里定义了两种类型设备的file_operations结构,前者是DSP设备,后者是混频器设备。Linux 内核内部通过file结构识别设备,通过file_operations数据结构体提供文件系统的入口点函数,也就是访问设备驱动程序里的函数。file_operations结构体原型是在 中定义的函数指针表。5.2.2关于函数:

read()、write()、open()和ioctl()是struct file_operations结构体中的接口函数。

1)read()函数:由已打开的文件读取数据,即播放。

(1)函数定义:ssize_t read(struct file *file, char *buffer, size_t count, loff_t * ppos);(2)函数说明:把参数file所指的文件传送count个字节到buffer指针所指的内存中;若参数count为0,则read()不会有作用并返回0;(3)返回值:返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。如果正确会返回实际读到的字节数,最好能将返回值与参数count作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期;2)write()函数:将数据写入已打开的文件内,即录音。

(1)函数定义:ssize_t write(struct file *file, const char *buffer, size_t count, loff_t * ppos);(2)函数说明:把参数buffer所指的内存写入count个字节到参数file所指的文件内。当然,文件读写位置也会随之移动;(3)返回值:若正确会返回实际写入的字节数;当有错误发生时则返回-1,错误代码存入errno中。

3)open()函数:打开音频设备。

(1)函数定义:int(*open)(struct inode *inode, struct file *file);(2)函数说明:参数inode为设备特殊文件的incode(索引结点)结构的指针,参数file是指向这一设备的文件结构的指针。open()的主要任务是确定硬件是否处在就绪状态,验证次设备号的合法性,控制使用设备的进程数;

(3)返回值:如果打开文件成功,open会返回一个文件描述符,以后对文件的所有操作就可以对这个文件描述符进行操作。比如程序中open()函数的返回值赋给了应用程序中的devfd,后面则可以对其进行操作;若打开失败返回负数。

4)ioctl()函数:用于设置编码比特、采样频率和选择声道。(1)函数定义:int ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg);(2)函数说明:设备驱动程序中对设备的I/O通道进行管理的特殊控制函数,可以通过它向设备传递控制信息或从设备取得状态信息,实现用户程序命令和驱动命令的相互联系;

(3)返回值:执行成功返回正数,失败返回-1。

5)s3c2410_uda1341_init()函数:动态加载驱动模块时的初始化函数。(1)函数定义:int __init s3c2410_uda1341_init(void);

(2)函数说明:该函数首先会初始化I/O和UDA1341 芯片,然后申请2个DMA 通道用于音频传输。将输出音频缓冲区的DMA通道设为通道2,输入音频缓冲区的DMA 通道设为通道1。最后调用register_sound_dsp()和register_sound_mixer()两个函数来分别注册驱动设备;

(3)返回值:初始化成功,返回0;DMA 通道初始化设置失败,返回负数。6)void __exit s3c2410_uda1341_exit()函数:动态卸载驱动模块时调用的函数。

(1)函数定义:void __exit s3c2410_uda1341_exit(void);

(2)函数说明:注销音频设备,分两次调用audio_clear_dma()函数来分 别释放已申请的音频输入和音频输出的DMA 通道;

(3)返回值:无。

5.3 功能模块交叉编译

用命令Makefile来编译:

图5.1 编译测试文件

将test文件拷贝到D:cygwinusrlocalsrcedukit-2410rootbin中 执行以下命令生成新的文件系统映象:

$>cd $WORKDIR/ $>$SOURCEDIR/mkcramfs root root.cramfs.new

图5.2 生成系统映像文件

生成文件系统映象文件root.cramfs.new。第六章 根文件系统建立与文件系统下载

6.1 根文件系统分析

6.1.1 cramfs 目录结构

一个完整的根文件系统通常包含以下几个目录: /bin 应用程序存放目录。

/sbin 系统管理员服务程序,其中最重要的就是供内核初始化之后执行的/sbin/init 进程。

/lib 存放程序运行所需要的动态库。/proc 系统状态文件目录。/dev 驱动程序存放目录。

/etc 系统配置文件及用户数据存放目录。

/mnt 用于设备安装的目录,通常包含etc 子目录和为块设备安装保留目录。/usr 用于存放用户程序和配置文件的目录,可以根据需要进行设置。一般情况下都要把已经规划好的目录结构转换成一个映象文件,即使用命令工具mkcramfs(cygwin下为mkcramfs.exe),把相应的cramfs 目录树压缩为单一的映象文件。其命令格式为:

mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile 使用mkcramfs.exe 在cygwin 下编译生成文件系统映象文件root.cramfs,再固化到开发系统FLASH 上运行。6.1.2 构建cramfs 文件系统

按照本节实验原理中自行构建一个cramfs 文件系统。运行cygwin,执行以下命令解压安装:

$> source /tmp/edukit-2410/set_env_linux.sh //Linux 编译环境变量设置

$> cd $WORKDIR/

图6.1 构建文件系统

$> tar-xvjf /tmp/edukit-2410/root.cramfs.tar.bz2 $> ls „ root „ root 文件夹中就是我们想要的cramfs 文件系统

6.2 文件系统映像文件生成

6.2.1 编译一个应用测试程序test.c 按设计原理要求编写一个应用程序test.c,存放在/home/app/audio目录下,进入该目录后执行以下命令编译链接测试程序:

$> cd /home/app/audio $> make(也可以编写Makefile 来编译)

图6.2 编译test文件

6.2.2 拷贝测试程序到文件系统中,并编译生成文件系统映象

把刚才编译输出的test文件拷贝到文件系统所在的工作目录 root/usr/audio 目录下,执行以下命令生成新的文件系统映象:

$> cd $WORKDIR/ $> $SOURCEDIR/mkcramfs root root.cramfs.new

图6.3 生成映象

刚刚编译生成的文件系统映象root.cramfs.new 中已经包含测试程序。

6.3 文件系统下载

(1)首先SW104 设为短接(从Nand Flash 启动),确定已经成功烧写vivi 和linux kernel,加电运行可以看到vivi 启动信息,输入空格进入命令状态;

(2)双击运行Download.pjf 工程文件(将启动Embest IDE 环境),点击连接Remote connect,程序应该正在运行(此时命令按钮STOP 为红色);在超级终端输入help 看看有没有反应,如果没反应,点击IDE 按钮:Reset->Start(F5);再输入help 测试,直到有反应为止;

(3)如果超级终端可以输出一些信息,再点击IDE 中的Stop,配置Debug 的Download 地址为0x30000000,并点击IDE 菜单Project 选择Settings 项,在Download 页下拉Category 到Download 项,在Download File 选择root.cramfs.new 文件,路径为d:Cygwinusrlocalsrcedukit-2410点击确定后:

图6.4 选择加载的文件

首先点击IDE 菜单DEBUG 选择Download 下载文件系统映象 约1-2 分钟

图6.5 下载成功

其次下载完毕后,点击Start(F5)然后在超级终端里输入:load flash root j(烧写更新文件系统)

图6.6 烧写

注意:只能在“vivi的烧写”和linux内核操作完成后,才可以按以上方法正确烧写root映象到NandFlash。重起实验板,观测超级终端窗口提示信息,引导整个系统启动到linux行命令输入状态。在超级终端输入一些linux命令查看执行结果是否正确。

6.4 功能模块运行与调试

重新加电,在超级终端根据提示启动Linux,按提示输入cd bin、./test指令。

图6.7 输入指令

图6.8 在控制台下运行测试程序

程序执行完后。如图6.9。

图6.9 程序运行时超级终端的输出

第七章 课程设计总结与体会

7.1 得出的结论

通过按上述步骤执行相关应用程序,可以实现对语音的实时采集和播放。需改进的地方:通过录制一段语音信息,录制完成后再播放

7.2课程设计过程中遇到的问题及解决方法

1.在给vivi打补丁时,$> patch-p1

2.在图形界面下进行内核配置时按实验指导书配置导致少了sound这一步导致出错。

3.重新在图形界面下配置后,发现无法生成压缩映像文件。请教研究生后解决了。原来之前配置错误生成了boot文件夹,要把之前boot删掉后重新编译。4.在调试时输入cd bin,./test指令后超级终端无反应。查找后发现,原来在根文件系统编译时没把生成的test文件复制到文件系统所在的工作目录root/bin目录下。重新编译后把生成的test文件复制后在调试后可以进行录放测试。

7.3 心得体会

课程设计刚开始的时候,思绪全无,我真的感到 “书到用时方恨少”,所以又重新把书和实验指导看了几遍,对知识系统而全面进行了梳理,对许多不理解的地方通过上网搜索翻阅图书弄懂,终于熟练掌握了基本理论知识,而且领悟诸多平时学习没有注意到的细节步骤,学会了如何思考的思维方式,找到了设计的灵感。

虽然每天要顶着30多度的高温在宿舍跟实验室之间往返,流了不少汗水,感觉确实不舒服,可最后看到自己的成果后心里很充实很高兴。

在课程设计过程中遇到了这样那样的困难。有时候是电脑出问题了,有时候

是实验箱出毛病,有时候是自己在操作过程中操作错误无法继续,可在研究生学长和其他同学的帮忙下都一一解决。使我深深感觉到团队力量的强大。

最后再次感谢陈老师这学期兢兢业业地给我们传授知识,感谢三位研究生牺牲自己的时间在炎热的夏天帮助我们解决遇到的问题!

参考文献

[1]徐英慧,等.ARM9嵌入式系统设计——基于S3C2410与Linux[M].北京:北京航空航天大学出版社,2007.[2]于明,等.ARM9嵌入式系统设计与开发教程[M].北京:电子工业出版社,2006.[3]田泽.ARM9嵌入式开发实验与实践[M].北京:北京航空航天大学出版社,2006.[4]孙天泽,等.嵌入式设计及Linux驱动开发指南——基于ARM9处理器[M].2版.北京:电子工业出版社,2007.[5]周立功,等.ARM9&WinCE实验与实践——基于S3C2410[M].北京:北京航空航天大学出版社,2007.[6]Samsung Electronics.S3C2410A-200MHz

&

266MHz

32-Bit

让语音引爆数据 篇3

语音识别技术是让机器通过识别和理解把语音信号转变为相应的文本或命令,也就是将人类语音中的词汇内容转换为计算机可读的输入,比如按键、二进制编码或者字符序列等。

比尔·盖茨早在2007年时就公开表示,用不了多久,电脑键盘等外部输入设置,将完全让位给语音识别软件。

虽然盖茨的预言尚未成真,但无论是国际大牌企业微软、苹果、谷歌,还是本土专注语音识别技术的科大讯飞、车音网,都积极布局市场,并不断有新势力加入。那么,在这场充满未来感的大战中,语音识别技术面临着怎样的瓶颈?这类由语音驱动的业务又瞄准了什么商机呢?

巨头环伺

众所周知,Siri使用的语音识别技术来自于美国的语音技术公司Nuance。据资料显示,这家从上世纪90年代就从事语音识别技术研发的公司已经拥有了近4000项专利及知识产权,能够识别约60种语言及方言,奥迪、宝马、福特、通用等诸多汽车厂商都采用了Nuance的语音识别、合成、自然语言理解解决方案。

移动互联网时代,语音识别在人机交互方面有着独特应用价值,越来越多的IT巨头已经把触角伸向了语音识别领域。谷歌先后推出Voice Search和语音助手Google Now;微软推出了Microsoft speech SDK的开发包,让新开发的产品能嵌入语音识别和合成功能;英特尔的“感知计算”蓝图中将语音计算放在了显要的位置;移动智能设备领域炙手可热的三星也早在Galaxy系列设备中推出了个人语音控制系统S-Voice。在国内的语音市场,既有百度、搜狗这样的重量级玩家,也有传统巨头科大讯飞,同时还涌现出了一批诸如云知声、虫洞、智能360这样的后来者。

其实40多年前专家们就曾宣称,语音识别将在5~10年内发展为一项成熟的技术。可多年过后,为什么他们依然重复着一模一样的说辞?其实,提供一个语音交互界面远比理解一打单词来得复杂。

语音识别软件就如同一个人的耳朵和嘴巴,但缺少了大脑理解,这条沟通渠道仍然会受阻。除了语音技术本身外,人机语音交流中还有其他因素在作怪:输出方式、互动形式还有语境。服务器收到文字串以后,要如何分辨用户真正的意图?它是要查天气、看电视,还是购物?这需要语义理解,但不同的领域,语义理解差距太大,而且涉及的词汇和数据库也不同;接下来是知识图谱,如何将所有的知识通过类似于数据库和图的方式联系?虽然目前匹配的算法已经相对成熟,但其准确性仍然依赖数据源的丰富程度,同时要在不断产生的“交互数据”中动态调整匹配结果;至于排除环境噪音、音色等因素,还要依赖半导体传感技术的进步。

如同“数学是科学的皇冠”一样,语音行业技术也有一个“皇冠”,那就是“语音识别”。为什么语音识别是“皇冠”?两点理由:一是技术上最难,二是实用前景最大。所以要考察一家语音公司的技术水平如何,就看它是否能提供高性能的语音识别产品。

除了Siri, Nuance的另一款智能机应用Dragon提供的语言支持中也包括中国普通话。虽然中文版Dragon和其它多数语音识别软件一样不能达到百分之百准确,但从基本层面来说,还是非常不错的。首先,对于语音识别来说,中文极具挑战性,因为普通话有400个单音节声音,根据声调予以区别。尽管普通话是被官方极力推广的,但是中国还拥有很多种方言和数不尽的地方口音, Dragon研发副总裁Jim·Wu就曾表示:“在中国,每个人都有不同的口音,其中的一项挑战就是确保系统能够用于口音较轻的普通话用户。”

在中文语音识别市场,科大讯飞一家就占据了中文语音市场约80%的市场份额。科大讯飞一直说自己的行业门槛高,主要就是指语音识别技术的门槛高。

意在数据

今天,几乎所有手机厂商和消费电子公司都试图将语音识别技术嵌入在其移动产品、应用和服务中。然而,语音软件不具备用户粘性,无法直接提供服务和内容。“试想,用户将语音转化成文本之后,下一步要做什么,和讯飞语音识别应用有关系吗?目前它只能作为一个插件、工具服务于后端的内容,例如社交、购物、搜索引擎、智能问答等。”独立财经分析师范小明以科大讯飞举例说道。

2001年就推出了中文语音合成技术的北京捷通华声语音技术有限公司董事长张连毅表示:“从公司2000年成立以来,累计在语音技术上的投入至少超过两亿元。前七八年股东没从有限的利润中拿过一分钱,全部投入再开发。但由于市场有限,企业效益并不能立竿见影。”然而,张连毅口中“没钱肯定不行,但有钱也不一定就行”的语音识别技术为何还能吸引众多厂商?

他们的目的不单单是为了让手机用户“解放双手”,抑或是让已成颓势的PC借此焕发青春,他们其实是瞄准了搜索的未来——语音搜索和通过其得到的海量数据。

当你向个人语音助理如Siri发号施令时,苹果的服务器就能最先得到这个数据,也就是用户的语音样本。而正是通过采集这些语音样本,各公司才能进一步优化他们的语音识别技术。不仅如此,你通过Siri搜索,苹果会创建一个关于搜索条目的新型数据库,这与Google利用用户在搜索栏的搜索条目建立数据库其实是一个道理。而实际上,苹果的系统比这还要强大,它可以智能识别用户是否在搜索一些硬数据,即一些易于收集的可量化的事实,这也是最需要收集的理想数据,包括产出、质量、成本和时间四大类。这类请求苹果会传送给Siri背后的智能搜索引擎Wolfram Alpha,一个能根据问题直接给出答案的网站。

虽然技术的进步总是让人惊叹,但语音识别是否真的能够取代触控技术?目前业界对此的看法也还很不一致。一方面是其技术难度较大;另一方面,虽然在游戏等领域的应用可能会让人比较期待,但是在一些涉密问题上是否也能应用语音呢?反正我不会对着电脑说出账号和密码登录网银。

语音数据采集 篇4

TMS320VC 55XX DSP是德州仪器 (TI) C 500016-bit定点DSP系列里最新的一代产品。C 55XX继承了C 54XX的发展趋势, 低功耗、低成本, 在有限的功率条件下, 保持最好的性能[1]。工作在0.9V下, 其核的功耗仅为0.05mW/MI/S, 而性能达到800MI/S (400MHz) , 与120MHz的C 54XX相比, 300MHz的C 55XX性能大约提高5倍, 而功耗降为1/6。正因为C 55XX系列的主要特点是低功耗[2], 所以非常适合在音频处理方面的应用。C 5509提供的多通道缓冲串口 (McBSP) 可以很方便地与语音编解码芯片TLV 320AIC 23直接连接, 使得电路的设计更加简捷。以C 5509为核心的语音处理系统中采用了专为音频处理的编解码器件TLV 320AIC 23, 来完成模拟语音信号的采样和数字音频信号的D/A转换。利用C 5509片内McBSP, 通过I2C总线来对AIC 23进行控制, 从而实现具有较强功能的语音处理系统。人的发音器官声音频段约是 (80~3 400) Hz, 而在 (300~3 000) Hz范围内的信号, 通常包含与人类语音相关的频率, 传统的电话信道带宽为 (300~3 400) Hz, 称为话音频带信道。因此, 经过 (300~3 000) Hz的带通滤波器后的语音信号将会更加有利于在信道中传输。下面将介绍以C 5509为基础搭建的一个语音数据采集及滤波的系统。

1硬件连接

1.1 McBSP的组成模块

McBSP包括一个数据流通路和一个控制通路, 通过7个引脚与外部设备连接, 如图1所示[3]。通过McBSP与外部设备的数据交换, 由DX引脚发送数据, RX引脚接收数据。通信的时钟和帧同步信号由CLKX (发送时钟) 、CLKR (接收时钟) 、FSX (发送帧同步) 以及FSR (接收帧同步) 引脚来控制。

CPU和DMA控制器通过外设总线与McBSP进行通信。当发送数据时, CPU和DMA将数据写入数据发送寄存器 (DXR 1, DXR 2) , 接着复制到发送移位寄存器 (XSR 1, XSR 2) , 通过发送移位寄存器输出至DX引脚。同样, 当接收数据时, DR引脚上接收到的数据先存储到接收移位寄存器 (RSR 1, RSR 2) , 接着复制到接收缓冲寄存器 (RBR 1, RBR 2) , RBR再将数据复制到数据接收寄存器 (DRR 1, DRR 2) 中, 并由串口事件通知CPU或DMA读取数据[4]。这种多缓冲方式使片内数据通信和串行数据通信能够同时进行。

1.2 TLV 320AIC 23芯片

TLV 320AIC 23是TI公司推出的一款高性能立体声音频编解码器, 内置耳机输出放大器, 支持mic和linein二选一的输入方式。输入和输出都具有可编程的增益调节功能。可以在8kHz至96kHz的采样率下提供16bit、20bit、24bit和32bit的采样数据。在ADC采集达到96KHz时噪音为90-dBA, 能够高保真的保存音频信号。在DAC转换达到96KHz是噪音为100-dBA, 能够高品质的数字回放音频, 在回放时功耗低于23mW。上述优点使得TLV 320AIC 23成为一款非常理想的音频编解码器。C 5509与AIC 23的硬件连接示意图如图2。

在图2的连接中, McBSP的接收和发送工作在同步方式下, 接收和发送可以独立配置, 利用C 5509的I2C模块[5], 可以对AIC 23内部的寄存器进行编程配置, 使AIC 23工作在要求的状态下[6]。下面给

出AIC 23初始化的部分源代码。

2软件设计

2.1 MATLAB中设计FIR带通滤波器

通常电话信道带宽为 (300~3 400) Hz, 当芯片AIC 23的采样频率设定为8KHz时, 理论上输入信号的频率范围可以是 (0~4 000) Hz, 大于给定的信道频带范围。当信号在信道中传输时, 为了更好的匹配信道特性, 可以经过一个 (300~3 000) Hz的带通滤波器使得滤波后的信号带宽小于信道带宽。系统采用窗函数法设计FIR滤波器, 采用的窗函数是汉明窗 (Hamming) 。在设计数字滤波器时, 通常采用MATLAB来进行辅助设计和仿真, MATLAB函数fir1可以用来设计加窗的有限冲激响应数字滤波器[7]。fir1函数用于设计常规的低通、高通、带通和带阻线形相位有限冲激响应滤波器。在系统中设计滤波器, 调用命令为:b=fir1 (N, Wn, Window) , 式中N为滤波器的阶数, 因此h (n) 的长度为N+1;Wn为归一化截止频率, 0<Wn<1, 这是以采样频率为基准频率的标称值, 故1对应采样频率的一半, 若Wn是一标量, 则用来设计低通滤波器, 如果Wn是1×2的向量, 则可以用来设计带通滤波器;Window表示设计FIR滤波器所采用的窗函数类型, 以列向量形式表示。向量Window的长度必须为N+1, 若Window缺省, 则fir1默认使用汉明窗;返回值b为设计的FIR滤波器系数。系统根据要求设计一个60阶、通带范围是 (300~3 000) Hz、采样频率为8 000Hz采用汉明窗函数的带通滤波器, 在MAT-LAB中调用设计带通滤波器的格式为:b=fir1 (59, [0.075 0.75]) 。

2.2 CCS中相关设置

通过在CCS (Codecomposerstudio, 代码集成开发环境) 中调用dsplib中的函数fir2最终实现信号通过带通滤波器的系统。在这里, fir2函数需要调用已经在MATLAB中设计好的带通滤波器的参数。使用dsplib库函数应该注意的地方是, 由于dsplib安装在固定子目录上, 而应用程序可能在其它目录上, 程序编译连接时, 可能找不到dsplib中相应的程序。为使程序正常运行, 需对工程的BulidOptions选项中两个地方进行设置[8]。其一是编译时打不开或找不到dsplib.h、tms320.h文件, 此时可以在Compiler标签下选中Preprocessor选项, 在Include SearchPath栏中填入dsplib.h、tms320.h所在子目录;另一种情况是, 连接时找不到fir2运算相应的汇编程序, 编译错误提示有些函数为未定义变量, 此时可在Linker标签下选中Basic选项, 在Library SearchPath栏中填入55xdspx.lib库文件所在路径, 在IncludeLibrary栏填入库文件 (本例为:55xdspx.lib) 。至此完成设置, 编译连接时可将应用程序及dsplib中程序连接起来, 程序可以正常编译。

3实验结果

图3为一段语音信号经过带通滤波器的结果。其中图3 (a1) 和 (a2) 是输入语音信号的时域和频域图, 图3 (b1) 和 (b2) 是经过滤波后的语音信号的时域和频域图, 图3 (c1) 和 (c2) 是带通滤波器的时域和频域图。由图3 (a1) 和 (b1) 相比较, 可以发现经过滤波后的信号更加的清晰和干净;而从图3 (a2) 和 (b2) 相比较, 可以看出在300Hz以前和3 000Hz以后的信号基本上滤除了, 也就达到了系统的目的。

4结束语

实验结果表明, 基于TMS320VC 5509的语音数据采集及FIR滤波具有明显的除去通带外噪声的效果, 改善声音质量, 并且可以工作在实时状态。

参考文献

[1]李绍胜, 赵振涛.TMS320C5000系列DSP开发应用技巧.北京:中国电力出版社, 2007:4—9

[2] Qi Lin, Zhang Yonghong, Bai Jing.Development of portable ECG mo-nitor on low-cost DSP.Springer Science, 2007;14 (6) :4058—4060

[3]彭启琮, 武乐琴, 张舰.TMS320VC55x系列DSP的CPU与外设.北京:清华大学出版社, 2005:276—287

[4]任治刚, 孙洪波, 张泽.TMS320C54x系列McBSP串口特性及其应用.内蒙古大学学报 (自然科学版) , 2001;32 (3) :336—339

[5]王嘉, 欧建平.利用I2C总线实现DSP与音频采样芯片TLV320AIC23的接口控制.微处理机, 2003;4:10—12

[6]汪春梅, 孙洪波.TMS320C55x DSP原理及应用 (第二版) .北京:电子工业出版社, 2008:270—274

[7] (美国) 米特拉.数字信号处理实验指导书 (MATLAB版) .孙洪, 等译.北京:电子工业出版社, 2005:105—111

QT语音语音讨论组功能 篇5

开启方法:

在QQ群会话窗口大工具栏中点击群语音按钮右侧的下拉箭头,选择下拉菜单中的【新建语音讨论组】项

选择联系人:

您需要先在【选择联系人】窗口左侧选择您想要邀请加入语音讨论组的QQ好友或群友

选择完联系人并点击【确定】按钮后,您邀请的好友或群友将收到语音讨论组邀请的QQ右下角弹窗提示,好友或群友点击Tips上的【接受】按钮后就能和您一块加入语音讨论组聊天了

语音数据采集 篇6

语音信号的处理是利用语音信号进行科学研究、工程应用的重要一环。而对语音信号进行怎样的处理,用怎么样的方式进行处理则是这项工作的关键所在。本文则在LabVIEW编程软件的基础上,对语音信号进行采集、存储、分析。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国国家仪器(NI)公司研制开发的一种程序开发环境,是一种用图标代替文本行创建应用程序的图形化编程语言。LabVIEW提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面,(用户界面在 LabVIEW中被称为前面板)。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。LabVIEW的图形化源代码在某种程度上类似于流程图,因此又被称作程序框图代码。LabVIEW大大简化了编程的复杂而繁琐的过程,被广大院校和各科研机构实验室采用。

1 语音信号采集与分析系统

语音信号采集的硬件是:声卡(ATI Function Driver for 高保真音频-ATI AA01)作为。语音信号采集与分析程序的则由LabVIEW声音采集函数VI构成的图形化程序来实现。整个系统分为两大模块:采集并保存实时语音信号,读取历史语音信号。两模块功能分时实现,独立控制其运行、停止,同时由下拉选择菜单控制切换。系统的两功能模块的切换,是通过while循环和条件选择结构来实现的。系统运行后选择相应的功能选项,条件结构做出判断,进入采集语音信号程序或读取语音信号程序。按下确认按键便可执行对应的功能,点击结束布尔控件便可停止运行对应功能。

信号在采集或读取后,交由信号处理类函数对其进行显示、滤波以及功率、幅度、相位频谱分析和失真分析。从而得到功率谱、幅度谱、相位谱以及谐波失真的相关数据。在对数据进行处理时,语音信号采集存储和历史语音信号读取部分都含有相同的信号显示和分析模块,且它们是分时独立运行的,可以共用一套控件,因而采用了局部变量。这样可以大大减少前面板的控件数目。

1.1 语音信号采集存储系统

在系统中设置的功能切换菜单中,选择采集语音信号,切入后点击采集确认按钮,执行语音信号的采集存储和分析功能。语音信号的采集,使用声音采集函数:Sound Input Configure.vi与Sound Input Read.vi。Sound Input Read.vi从声音输入设备读取数据时,必须使用Sound Input Configure.vi配置设备,设置相应的参数。采样率(S/s):通常为44100 S/s,22050 S/s,11025 S/s。本系统中设置为默认值22050 S/s。通道数:指定通道的个数。该输入可接受的通道数与声卡支持的通道数一致。对于多数声卡,1为单声道,2为立体声。设置为2。每采样比特数:有8比特和16比特。设置为16。Sound Input Configure.vi采集到的数据被发送到缓存,使用Sound Input Read.vi从声音输入设备读取数据。语音信号采集程序如图1所示。

当执行采集数据时,可以对信号进行存储和实时地显示、分析。语音信号的存储主要由Sound File Write Open.vi(设置为写入)和Sound File Write.vi实现。Sound File Write Open.vi用于创建待写入的新.wav文件。Sound File Write.vi将来自Sound Input Read.vi的输出数据写入.wav文件。程序中采用数字IIR滤波器:Digital IIR Filter.vi对数据进行处理。根据连接至信号输入和IIR滤波器规范输入端的数据类型可确定要使用的多态实例。由于语音信号的采集是以人的声音作为主要对象,因此将滤波器设置为低通。

数据的分析主要由一个信号分析子程序Sub VI实现。Sub VI的使用简化了程序框图的结构,使其更加简洁便于理解,也提高了VI的运行效率。如图2所示,信号分析子程序.vi有3个输入接线端子,6个输出端子。分析选项连接到“分析菜单”。分析菜单里有两个选项:功频分析、谐波分析。功频分析主要是通过频谱测量得到信号的幅度谱、相位谱、功率谱。谐波分析则对信号进行失真分析,测量谐波。谐波的失真分析是由Harmonic Distortion Analyzer.vi实现的,输入信号,进行完全谐波分析(包括测量基频和谐波),返回基频、所有谐波的幅值电平,以及总谐波失真(THD)。检测出的基频包含搜索频域时检测出的基频。所有谐波的测量结果为基频的整数倍。THD是谐波的均方根总量与基频幅值的比,包含达到最高谐波时测量到的总谐波失真,包括最高谐波。通过信号输入端,可确定要使用的多态实例,也可手动选择实例。

1.2 读取历史语音信号系统

将系统功能切换至读取语音文件模块,执行对历史语音信号的读取、显示、分析。在此程序中设置了一个条件结构,以等待确认是否开始读取历史语音信号,当条件为假时通过反馈接点将路径输入输出连线短接,将不实现程序的预定功能。Sound File Write Open.vi(设置为读取实例)读取文件的路径参数,打开用于读取的.wav文件。Sound File Read.vi接收来自Sound File Write Open.vi的数据,将.wav文件的数据以波形数组形式读出,输入到数字IIR滤波器和信号分析子程。Digital IIR Filter.vi对数据进行滤波处理。信号分析子程序.vi对语音信号的数据进行测量分析。信号的分析模块与采集语音信号的信号分析模块完全相同,通过局部变量分时独立使用。读取历史语音信号系统过程如图3所示。

1.3 前面板

程序的前面板(如图4所示)主要由声音采集函数格式参数和滤波器的参数控件、波形显示控件、 功能切换控件 、确认(读取、采集)控件、停止控件、路径控件组成。功能选择控件由枚举控件生成,通过功能选择控件,操作者可以方便地在前面板上完成功能切换,控制语音信号采集分析系统的运行状态。在前面板上,通过选择不同的功能,点击确认按钮,实现对语音信号的灵活地处理,整个系统变得实时、有序。对处理语音信号之前,需要在两个路径控件分别输入采集和读取语音文件的路径,集语音信号的硬件设备号和采样通道数也需要提前设置好。同时在声音格式控件里设置采用率、采样模式等参数。滤波器参数则在IIR滤波器规范控件里设置。随后便可运行系统程序。

在功能选择控件里包含两个选项:采集语音信号、读取语音信号,默认为采集语音信号。选择采集语言信号,条件结构作出判断,进入采集语言信号程序,该程序实现对语音信号进行采集、存储、滤波、显示、分析。进入程序后,程序运行在一个包含布尔确认控件的While,等待操作人员用鼠标点击采集按键,确认开始采集信号。信号被采集到时被实时输出到显示控件里,同时被保存到由程序新建的为wav格式的音频文件里。这要求事先设置建立一个保存.wav文件的目录。采集到的语音信号被送至语音分析模块,在语音分析子程序里的功能选项里,有两个选项:功频分析和谐波分析,功频分析测量语音信号的功率、幅度、相位,选择该功能就可以得到语音信号的功率谱、幅度谱、相位谱。谐波分析,主要测量分析信号的谐波失真,得到的数据输出到显示控件里。

2 结束语

利用LabVIEW图形化编程软件实现语音信号的采集和处理编程,在大大降低了编程复杂程度的同时保证了程序功能,节省了大量的时间。在设计程序之前,应对系统用到的各硬、软件性能有一定的了解,根据功能需求设置合理的参数。采用合理程序结构和合适的信号处理函数是保证系统功能的关键所在,达到了以最简单的程序框图实现系统功能的目的。本文中图形化的编程界面和人性化的人机交互界面使得程序易懂、系统操作简便。计算机自带的声卡足以实现对大量语音信号的采集,节约了成本。

参考文献

[1]雷振山.LabVIEW7Express实用技术教程[M].北京:中国铁道出版社,2004.

[2]雷振山,肖成勇,魏丽,等.LabVIEW高级编程与虚拟仪器工程应用[M].北京:中国铁道出版社,2012.

[3]肖光华,方勇.一种LabVIEW环境下的语音跟踪系统[J].电声技术,2008,32(12):54-57.

[4]杨洁,华宇宁,张勇.应用小波变换对语音信号消噪处理的研究[J].期刊资讯,2006,32:6-7.

语音数据采集 篇7

我们为关系型数据库提出一种新方案,以音频信号作为水印源信号。用混沌信号加密的音频信号根据不同权重作为版权信息嵌入数值中。作为生物识别特征,语音是固有的,并且不随时间而改变。我们可以利用语音特征和含义得出版权信息。

1 水印关系型数据库的语音算法

水印的主要思路是给数据引入微小的冗余。设计一个特殊的算法机制保护相关数据是有必要的。假定数据库的关系可以通过某些属性做标记,这些改变不会影响其他应用。我们知道在数据库(特别是大型数据库中)具有很多属性,针对不同的应用目的这些属性的重要性不尽相同。为了保证数据集的一致,一个属性越是重要,它就越不能被改动。所以我们提出了一种技术,根据不同的可能权重为某一个属性加水印。

我们的技术目标是根据权值标记数值大小。水印相关型数据库的模型描述如下,如果R是一个关系,用P来表示它的关键属性,A0,…,Ai-1来表示它的其他属性。我们为每一个数据库的所有者赋一个权值,表示为W0,W1,…,Wi-1(Σwi=1,i∈[0,i-1]).在关系R中元组t的属性A被标记为t.A,用符号t.A[i]可以访问t.A的第i个元素。关系R包括η个元组,还有一个关系因子ω=1/α,可以用来做水印。假设允许在一个小数值(1/α)中改变最低ξ位中的一个。数据所有者负责决策哪个属性适用于加水印,并且给出每一个可标记属性。同时也要帮着去决定两个重要的参数ξ和γ,它们是用来描述对一个数据库的修改权限的。

我们将嵌入版权信息在一些实数属性中。使用加密的特征语音激发水印产生算法器产生水印,然后进行相关的插入和检测算法。因为每一个人的语音都具有与其他人相比很独特且长期不会改变的特征,所以我们选择语音信号作为水印。

2 水印产生算法

过程包括3部分:压缩语音信号,增强语音信号,使用混沌信号加密水印。

水印信号的产生过程如下:(1)记录下数据库所有者语音信号片段,我们在不影响应用目的的前提下引入微小的错误信号(这个标记不能影响数据的应用,因此水印信号必须很小)。于是,由于信息量的庞大,语音信号需要压缩。我们使用小波来实验压缩。(2)语音信号增强。我们使用频谱去噪来实现这个目的。这种技术执行在频域并且假定输入信号的频谱可以表示为语音信号和噪音信号的和。过程包括两个难点:评估背景噪音信号的频谱;从语音信号中减掉噪声的频率。(3)加密水印。我们把信号转变为8位A律信号。在我们的机制中,使用Logistic混沌系统加密所有者的语音信号序列。混沌模型通过单向散列函数来加密一些属性。因此,通过使用混沌模型,水印系统的安全性可以加强。作为随机序列产生器,Logistic方程为:Xn+1=μXn(1-Xn){μ∈[1,4]n=0,1,2,…},设算式中μ=4。我们选择一个阈值Q值变化的混沌序列的二进制序列P(I),所有者的语音信号加密为E(i)=W(i)⊕P(i),i=1,2,…,n.⊕=XOR。Logistic的混沌系统重复这个过程直到B={B1,B2,…,BN×N}中的每一个元素都被加密。当每一个元素都被加密时,我们设定加密后集合为E={E1,E2,…,EN×N}。

3 插值算法

把有意义的水印M(平面水印)转变成具有一定长度的比特流E(EMC,加密标记代码)。单向散列函数(例如MD5)的H在我们的算法里至关重要。我们使用单向散列函数来决定哪些元组要标记。同样的方法用来决定哪一位是要标记的。至于属性,我们使用一个权值越大标记值越大的算法为每一个元组标记权限。由于散列结果预计要均匀分布,我们可以将其划分成不同的组,各组大小类似,从而得到L组。水印的第i位将被插入到第i组。I升序的范围从0到mark_length-1水印顺序自然保留。这在检测阶段很有用。水印插入算法如下:

4 检测算法

由于同分布的哈希函数,当由相同密钥进行种子生成时,插入算法中各组被选择的元组序列相同。对于同一顺序每个标记位,我们把它的值的计数为0或者为1,然后一个多数表决机制将决定这一位最终的值。检测到的结果是一个二进制序列,其中包括Data Set的版权信息。我们的二进制序列可以转换回语音信号,因此,版权所有者可以利用语音的特征来证明版权。水印检测算法如下:

5 实验和结果

为了检验该算法的有效性和鲁棒性,我们在2.4GHz CPU,512MB的RAM的Windows XP计算机上执行程序进行实验。由于我们的算法是面向属性的,因而测试方法也面向属性。算法使用Java的Eclipse平台版本3.0,使用ODBC连接访问Microsoft offi ce access 2003数据库。应用我们的算法生成的数据,具有5个属性,权值分别为0.4,0.3,0.2,0.05和0.05。生成的记录大小为24000。我们选择MD5作为单向散列函数。子集选择攻击算法,攻击者试图细分元组或者属性来破坏水印。我们选择不同比例的原始数据来模拟这种攻击,该标记的长度是64位,频率分子(ω/L)为5。图1给出了水印检测率攻击发生时,子集选择。

子集附加攻击:在这一部分,攻击者随机选择了被标记水印的关系部分,将他们和相似不带水印的元组混合形成新的关系,新关系尺寸和原来的尺寸大致相同。结果如图2所示。

亚群的变化攻击:在这一部分,攻击者修改了一些显著的关系元组擦除水印。或者是重置每个攻击位为相反位或者是随机重置每个攻击位。与非加权算法的比较,亚群攻击的变化如图3所示。

6 结束语

随着数据库安全的升级,迫切需要解决关系数据库的版权问题。我们提出了一个新颖的关系型数据库的数字水印产生方法,使用语音信号根据属性的权重将水印嵌入数据库。此外,我们提出了安全性分析,以显示我们的技术应对各种攻击的健壮性。通过实验,结果表明,使用图像特征给关系数据库增加水印的方法是正确的,可行的。这也意味着我们方法的安全性优于以前的算法。

我们利用语音信号保护关系型数据库版权的方法仅研究了数值属性,今后,要将研究扩展到非数值属性领域。由于关系数据的特殊性,在水印关系数据库中进行深入研究有一些困难。但是,关系数据库管理与水印著作权将会是数据库研究的重要课题。本研究方向将会获得越来越多的密切关注。

摘要:阐述了水印关系数据库在数据阻盗版中的需要,明确了对水印技术提出挑战的关系型数据的特点。创造性地提出了一个新型的方法,为关系型数据库产生水印,根据分配的权重不同,把语音信号嵌入到数据库中作为水印。实验结果表明在各种不同的攻击下该方案是健壮的。该方法更加直接,并支持简单的水印识别。

关键词:水印关系数据库,版权保护,信息隐藏

参考文献

[1]R.Agrawal,J.Kieman.Watermarking Relational Databases[C].Proceedings of the 28th VLDB Conference.Hong Kong,China,2002

[2]Radu,S.,Mikhail,A.,Sunil,P.:Rights Protection for RelationalData[C].Proceedings of ACM SIGMOD,2003

[3]N.Xiamu,Z.Liang,H.Wenjun,"Watermarking RelationalDatabases for Ownership rotection"[J].Chinese of JournalElectronics,2003

[4]Z.Zhi-Hao,J.XiaoMing,W.JianMing,"Watermarking relationaldatabase using image"[C].Proceedings of the 3rd InternationalConference on Machine Learning and Cybernetics.Shanghai,2004

[5]H.Zhongyan,C.Zaihui,S.Jianhua."An image based algorithmfor watermarking relational databases"[C].2009 InternationalConference on Measuring Technology and MechatronicsAutomation,2009

[6]S.Jianhua,C.Zaihui,H.Zhongyan."Multiple WatermarkingRelational Databases Using Image"[C].2008 InternationalConference on MultiMedia and Information Technology.HongKong,China

[7]C.Xinchun,Q.Xialin,G.Zhijin."Weighted algorithm forfingerprinting relational database"[J].Transactions of NanjingUniversity of Aeronautics&Astronautics,2009

语音数据采集 篇8

关键词:DMA,DSP,语音信号,MCBSP

1 引言

许多语音信号处理算法不是对样点处理(DSP算法对每一个输入的样点循环一次),而是每隔一定的时间间隔循环一次。因此在数据采集系统中,若采用查询方式采集数据会占用大量CPU的资源,采用中断方式来采集数据虽可以提高CPU的利用率,但是在采集数据的每个时刻还是由CPU完成的,同时降低了程序的可读性。本文设计的这个语音采集系统利用配置DMA来处理样值数据的交换,把它放置在一个指定的存储器位置,然后通过中断,通知CPU。这是一个典型的DMA—CODEC例子。

2 芯片介绍

TMS320VC5416是TI公司生产的从属于TMS320C54x系列的一个工作灵活、高速、具有较高性价比、低功耗的16位定点通用DSP芯片。其主要特点包括:采用改进的哈佛结构,1条程序总线(PB),3条数据总线(CB、DB、EB)和4条地址总线(PAB,CAB,DAB,EAB),带有专用硬件逻辑CPU,片内存储器,片内外围专用的指令集,专用的汇编语言工具等。TMS320VC5416含128K片内ROM和16K字节的双存取RAM,1个HPI(Host Port Interface)接口,3个多通道缓冲单口MCBSP(Multi-Channel Buffered Serial Port),单周期指令执行时间10ns,双电源(1.8V和3.3V)供电,带有符合IEEE1149.1标准的JTAG边界扫描仿真逻辑。

TLV320AIC23是TI公司生产的高性能立体声音频编解码器,该芯片高度集中了模拟电路功能。TLV320AIC2的模数和数模转换器使用了多比特sigma-delta工艺,传输字长可以是16、20、24、32Bit,它支持8~96kH的采样率,可以通过软件控制能与TI的MCBSP兼容,音频数据通过MCBSP相兼容的可编程音频接口输入和输出。

3 TLV320AIC23与DSP的接口设计

TLV320AIC23与TMS320VC5416的连接采用SPI方式连接,TLV320AIC23工作在主机模式,TMS320VC5416工作与SPI的从机模式。收发时钟信号CLKX1和CLKR1由TLV320AIC23的串行数据传输时钟BCLK提供,并由TLV320AIC2的帧同步信号LRCIN、LRCOUT启动串口数据传输,DX1和DR1分别与TLV320AIC23的DIN和DOUT连接,可用于完成DSP和TLV320AIC23之间的数据通信。

4 软件设计及要求

(1) TMS320VC5416串口的初始化。

对MCBSP0进行复位,然后对串口控制器进行编程设置,其要求为: MCBSP0工作在SPI模式,每帧1个阶段,每个阶段64个字,每个字32位,收发时钟和帧同步信号由外部器件驱动。

(2) TLV320AIC23的初始化。

该初始化的操作包括对左右输入声道的控制,还有样本速度的控制,其中采样频率为8KHZ,音频数据的输入和输出通过MCBSP接口。

(3) DMA通道的初始化。

将MCBSP0接收的32位字经过DMA传输到数据空间,DMA控制器自动被配置为自动读DRR20和DRR10,并将数据传输到起始为03000H(数据空间)的连续地址。

5 部分关键代码

下面是该算法实现的关键代码片段,所有实现用C语言。

(1)MCBSP0的初始化

SPSA0=SPCR1; //对MCBSP0进行复位

SPSD0=0x0000;

SPSA0=SPCR2;

SPSD0=0x0000;

SPSA0=RCR1; //设置DSP串口0工作在每帧64个字,每个字32位

SPSD0=0x3fa0;

……

SPSA0=SRGR1; //设置CLKGDV=0,使串口0工作在最大的频率

SPSD0=0x0100;

SPSA0=SRGR2; //设置CLKSM=0,采样率发生器的时钟来源于外部驱动

SPSD0=0x801;

SPSA0=PCR;//设置FSXP=1、FSRP=1,使帧同步低电平有效

……

(2)TLV320AIC23的初始化通过MCBSP1对TLV320AIC23进行编程控制

AIC23_Write(0xf,00); //对TLV320AIC23进行初始化

AIC23_Write(0x00,0x17); //左通道输入音量控制0dB

AIC23_Write(0x01,0x17); //右通道输入音量控制0dB

……

AIC23_Write(0x07,0x43); //DSP数据接口格式,芯片采用主式,数据字长32bit

LRP=1;

AIC23_Write(0x08,0x0d); //时钟为USB模式,采样频率为8KHZ

(3)DMA通道1的初始化

DMSA=DMSRC1; //设置源地址为DRR20

DMSDN=DRR20;

DMSA=DMDST1; //设置目的地址为3000H

DMSDN=0x3000;

DMSA=DMCTR1;

DMSDN=0x0039; //缓冲区的大小为64个双字

DMSA=DMSFC1;

DMSDN=0x1800; //MCBSP0的接手事件触发DMAT通道的DMA传输

DMSA=DMMCR1;

DMSDN=0x404c;

DMSA=DMIDX0; //设置单元地址变址偏置量为+1

DMSDN=0x0001;

DMPREC=0x0201; //使能DMA通道1

6 结束语

语音数据采集 篇9

关键词:OMAP5912,TLV320AIC23,DSP,语音采集

0引言

近年来, 高速发展的语音信号处理技术已在音频信息的处理、传输和存储等方面得到广泛应用。同时, 随着高性能数字信号处理器 (Digital Signal Processor, DSP) 的日益普及, 利用DSP对语音信号处理进行算法研究和实时实现正成为新的热点。在此设计并实现了一种语音采集系统。该系统为语音信号处理的算法研究和实时实现提供一个通用平台。同时, 与已有的声卡等具有语音采集功能的设备相比, 该系统具有结构简单, 效率高, 便于携带等特点, 因此也可以作为便携式设备或手持终端的一部分进一步加以开发和应用。

1芯片简介

OMAP5912[1]采用独特的双核结构, 内含1个实现控制功能的带有TI增强型ARM926EJ-S (简称ARM9) 内核的处理器和1个实现数据处理功能的高性能、低功耗TMS320C55x DSP (简称DSP) 内核。ARM9处理器可用来实现各种通信协议、控制和人机接口;DSP具有多条数据地址总线, 非常适合数据密集的多媒体处理, 并具有极低的功耗。

TLV320AIC23[2] (简称AIC23) 是TI推出的一款高性能的立体声音频Codec芯片, 内置耳机输出放大器, 支持MIC和LINE IN两种输入方式 (二选一) , 且对输入和输出都具有可编程增益调节。AIC23的模数转换 (ADCs) 和数模转换 (DACs) 部件高度集成在芯片内部, 采用了先进的Sigma-delta过采样技术, 可以在8~96 kHz的频率范围内提供16 b, 20 b, 24 b和32 b的采样, ADC和DAC的输出信噪比分别可以达到90 dB和100 dB。与此同时, AIC23还具有很低的能耗, 回放模式下功率仅为23 mW, 省电模式下更是小于15 μW。

2系统的硬件设计

2.1 系统的硬件结构

语音采集系统主要包括两个模块:以AIC23为核心的语音采集模块;以OMAP5912的DSP为核心的语音数据接收处理模块。

为使AIC23正常工作在需要的状态下, 必须通过I2C[3]总线对其进行配置。AIC23采集的语音信号经过A/D转换后, 通过McBSP1[4]传送到接收寄存器DRR, 然后经DMA[5]通道传送至接收缓冲区。存放在发送缓冲区的数据, 通过DMA通道传送到McBSP1的发送寄存器DXR, 然后传送至AIC23, 经过D/A转换后, 由HEADPHONE输出, 如图1所示。

2.2 系统的硬件接口设计[6,7]

利用OMAP5912的I2C总线和McBSP1完成对AIC23的控制和通信。I2C总线与AIC23的控制口相连, McBSP1与AIC23的数据口相连。AIC23设置为Master模式, 向McBSP1提供时钟和帧同步信号。McBSP1.DX作为AIC23的输入通道, McBSP1.DR作为AIC23的输出通道, 如图2所示。

3系统的软件设计

系统的软件分两个方面来说明:主程序和中断服务程序。

3.1 主程序

因为OMAP5912为双核结构, 且ARM9为主控制器, 所以首先必须在ARM9侧进行OMAP5912的初始化, 让DSP退出复位状态, 这里仅需调用TI提供的OSK5912 Board Support Library[8]中的OSK5912init () 函数即可。然后在DSP侧进行CPU、I2C总线、McBSP1、DMA的初始化, 以及AIC23芯片的配置, 如图3所示。

限于篇幅, 在此仅说明通过I2C总线配置AIC23的过程。AIC23芯片是一个可编程的芯片, 内部有11个16位寄存器决定芯片的工作状态。图2中的MODE引脚决定控制接口的工作模式:MODE=0为I2C模式, MODE=1为SPI模式。系统采用的是I2C模式, 即由DSP通过I2C总线完成对AIC23的初始化。I2C总线作为ARM9和DSP的共享设备, 其使用权由图1中的寄存器I2CSSWMPUCONF和DSPI2CSSWCONF 决定, 在默认的情况下由ARM9使用。为了让DSP能使用I2C总线, 需对上述两个寄存器做如下修改:MCBSPSSWMPUCONF=0x00000000, DSPI2CSSWCONF=0x0002。每个连接到I2C总线上的设备, 都有1个惟一的地址, AIC23的地址由图2中的CS#引脚决定, 即CS=0地址为0011010;CS=1地址为0011011。I2C总线首先发送AIC23的地址, 然后再把相应的AIC23内部映射寄存器的地址和配置参数合并为16位的控制字发送给AIC23。

3.2 中断服务程序

在DSP的RAM空间中定义一个接收缓存数组Rxbuffer[]和发送缓存数组Txbuffer[], 一个接收标志RxFlag和一个发送标志TxFlag。为了防止出现在执行中断服务程序的时候, 接收的新数据将缓存区未取走的数据覆盖, 将缓存数组分为上下两部分[9], CPU在处理其中一个部分的时候, DMA自动操作另一部分, 如图4 (a) 所示。

该语音采集系统以中断的方式工作, 在工作的过程中, 会产生两个中断:DMA接收中断;DMA发送中断。以DMA接收中断为例来说明中断服务程序。

当产生DMA接收中断时, 首先判断RxFlag的值, 若为0, 则取接收数组Rxbuffer下半部分的数据作进一步的处理, 同时置RxFlag为1;若为1, 则取接收数组Rxbuffer上半部分的数据作进一步的处理, 同时置RxFlag为0, 然后退出中断服务程序, 进入主程序, 等待中断的再次产生, 如图4 (b) 所示。

4仿真验证

为了验证设计的可行性, 对该系统进行了仿真测试。仿真软件为CCS (Code Composer Studio) 2.21[10]。系统由硬件仿真器TDS560USB通过JTAG仿真接口与计算机相连, 用户可以通过该接口向OMAP5912芯片加载程序并观察芯片内部存储器的数据, 完成系统仿真及程序调试的任务。

在ARM和DSP侧分别加载程序编译后生成的.out文件, 然后运行。经配置后的AIC23从MIC IN输入语音信号, 并对其进行8 kHz, 16 b的采样。不考虑图4 (a) 中的信号处理过程, 将采集到的语音直接送回AIC23芯片, 经D/A后, 由HEADPHONE输出, 此时, 听到的正是输入的语音信号。由此说明:该设计是确实可行的。

5结语

根据TI公司的OMAP5912和CODEC芯片TLV320AIC23的特性, 根据TI公司的设计并实现了一种基于OMAP5912的语音采集系统。在该系统中, DMA通道结合McBSP的使用, 可以大大减少CPU的工作量, 简化软件设计, 有效地利用DSP的硬件资源, 提高系统的执行效率。实践证明, 该系统能够满足实时信号处理的要求, 可以作为语音信号处理的算法研究和实时实现的一种通用平台, 也可以作为便携式设备或手持终端的一部分进一步加以开发和应用。

参考文献

[1]Texas Instrument Incorporated.OMAP5912 ApplicationsProcessor Data Manual[Z].2004.

[2]TI Corporation.TLV320AIC23 Stereo Audio CODEC, 8~96 kHz with Integrated Headphone Amplifier[Z].2001.

[3]Texas Instrument Incorporated.OMAP5912 MultimediaProcessor Serial Interfaces Reference Guide[Z].2004.

[4]Texas Instrument Incorporated.OMAP5912 MultimediaProcessor Multichannel Buffered Serial Ports (McBSPs) Reference Guide[Z].2004.

[5]Texas Instrument Incorporated.OMAP5912 MultimediaProcessor Direct Memory Access (DMA) Support Refe-rence Guide[Z].2004.

[6]Texas Instrument Incorporated.OSK5912 Schematics[Z].2004.

[7]孙红, 张涛.基于TMS320C5509 DSP的无线语音传输采集传输系统[J].微计算机信息, 2007, 23 (8Z) :184-186.

[8]Texas Instrument Incorporated.OSK5912 Board SupportLibrary[Z].2004.

[9]陈明义, 夏?.基于DSP的语音通信系统的设计[J].湖南大学学报, 2002, 29 (4) :63-66.

语音数据采集 篇10

说话人识别技术是从说话人的语音信号中提取体现说话人自身特征的信息, 通过对特征信息处理建立说话人识别模型并对说话人身份进行识别。说话人识别系统构成原理如图1所示, 该系统包括语音信号的特征提取, 语音参数的训练与识别, 经过后处理得到识别结果[1]。由图1可见针对说话人模型应该建立一个数据库, 通过特征提取后的数据经过训练形成说话人标准模型存储在该数据库, 而每次识别就是将新采集到的信息经特征提取环节处理后与说话人模型库中的标准模型进行匹配计算, 数据库的结构对于系统的识别时间有直接的影响。因此, 建立一个适合于特定说话人系统的模型语音库是关键, 对推动说话人识别技术的研究和应用具有重要意义。

目前, 欧美许多发达国家和地区都已建立了各种语言的国家级或专用的语音库, 例如美国的LDC (Linguistic Data Consortium) 开发的TIMIT语音库是最早应用于说话人识别研究的英语语音库, 欧洲的ELRA (European Language Resources Association) 开发的SIVA电话语音库是专门针对意大利语说话人识别的。汉语语音识别在近十几年来有很大进展, 例如中国科技大学、中国科学院声学研究所、中国社会科学院语言研究所联合开发的汉语语音识别资料库;在汉语说话人识别领域应用较为广泛的863中文语音数据库等。这些库的建立为语音技术的研究提供了宝贵的数据资源, 对语音技术的发展起到了促进作用[2]。这些机构开发的语音库大多是面向语音识别和语音合成等应用的[2]。为了适应基于支持向量机算法的说话人识别系统, 构建了一种基于SQLite技术的汉语语音识别数据库。

1基于SQLite语音库的构建原理

SQLite数据库是一款轻型的用C语言书写的, 遵守大部分ACID特性的数据库引擎。SQLite数据库支持嵌入式的设计目标, 目前已经应用在很多嵌入式产品中。SQLite数据库具有以下特性:

(1) 轻量级:

SQLite是进程内的数据库引擎, 故此, 无所谓客户端和服务器, 只需要一个350KB左右的动态库就能实现所有功能。该特性为语音库的建立提供了应用层面的方便。

(2) 零配置:

SQLite的核心引擎不依赖第三方软件, 并且不需要安装和配置数据本身。这样节省了语音库控制软件部署时间和配置冲突调试时间。

(3) 单一文件且访问简单:

数据库中所有的信息都包含在一个文件内且可以复制到其他目录或者机器上去。该特性保证了语音库的通用性和传播性。

(4) 跨平台性:

SQLite支持目前所有主流操纵系统, 同时也支持iphone4上的移动操作系统。方便了说话人识别系统在iphone4移动平台上面实际应用层面的开发。

鉴于上述特点, 选择SQLite作为建库内核。

2语音库的基本库结构设计

该数据库基本目录结构按着数据、组序数和语音序数三层结构设计。第一层把数据分为有噪声态和无噪声态;第二层再规划到具体的组别, 可以同时定义多个并行数据组;第三层记录语音序数, 该参数代表着第几次录音的号码。原始语音文件、经过语音处理后提取的mfcc特征参量和语音文本内容可以存入到同一文件夹中。对应文件夹所存入文件的文件名为<X><NB><S>.wav、<X><NB><S>.mfcc和<X><NB><S>.txt。当然需要添加语音信息分类详细的内容时, 可以通过扩充组群来实现。详见表1。

本课题研究的说话人识别系统建立在LabVIEW平台上, 因此, 势必要通过LabVIEW实现对语音库的管理及数据存取。根据LabVIEW软件平台访问数据库功能的特点可知, SQLite数据库提供了完备的开源API接口, 所以管理说话人语音库完全可以通过LabVIEW的API接口功能实现。具体的管理过程分为两步:第一步, 打开或者新建立一个数据库, 这里用到的函数是sqlite3_open () , 而建立的***.db文件只能保存在纯英文目录文件夹下。注意这时是在LabVIEW下打开数据库节点并对其配置。如果连接正常则反馈SQLITE_OK;第二步, 在建立了一个数据库之后, 要实现SQLite基本操作。其构成框图参见图2, 基本操作首要的是编译, 由于SQLite不直接支持SQL编译操作, SQL语句被执行之前必须先编译成字节码, 这里需要用到sqlite3_prepare () 函数来执行SQL语句的编译。SQL编译好后, 需要调用sqlite3_step () 来执行操作, 如果执行成功则返回SQLITE_ROW (100) , 执行任务完成后需要sqlite3_finalize () 语句来清除字节码。

3语音库的具体构建过程

语音库的构建主要包括了语料库建设和语音库管理系统。语料库的建设分为语音录制、信号检查、分段、标注这四个过程[3]。为适应研究工作的需要根据以上基本过程从实际情况出发建立了一个汉语语音识别数据库。具体构建流程参见图3。

首先从语音录制入手, 整个录音环境选择在同一间安静封闭的实验室, 语音采集设备包括PC机、声卡、录音软件、麦克风。麦克风选用双麦克风, 一个用来接收说话人的声音, 另一个监听周围环境, 然后计算这两个信号之间的差异, 从而消除或者降低信号中通过空气传播过来的噪音。录音软件选用Adobe Audition, 它可提供先进的音频混音、编辑和效果处理功能。说话人发出的语音信号通过这个双麦克风传送到PC机上就可以进行存储和分析处理, 得到所需要的语音信息。在系统语音库构建实验中, 共选择20人参与录音实验, 其中男女比例为1:1, 实验者均能熟练使用普通话。要求参与录音的人员在自然放松的条件下, 用普通话以正常语速和语调说出指定的语料。重复录音10次, 录音结束后, 需要对语音文件进行人工检验, 以排除录音过程中可能出现的错误。查看并剔除语音中的信号过载音段、不规则噪声 (例如咳嗽等) 和非正常停顿造成的长时静音等。对于错误严重的录音文件必要时可以请求说话人重新补录。接下来是对语音文件进行端点检测并去掉无声部分, 即分段处理, 分段过程的好坏影响着说话人识别系统的识别时间[4,5]。

如何使数据发挥最大的作用, 让所有的使用者能方便地共享数据, 这是建立语音数据库所面临的关键问题。语音标注很好地解决了这个问题。语音标注实质是利用某种可书写的文本符号来说明或描述语音波形中的各种语言现象。为此, 我们设计了语音库管理系统, 把每个人每个信道的录音文件分别按照个人信息切分并对其进行标注, 标注信息包括:

(1) 说话人信息表 (编号, 姓名, 性别, 出生年月, 民族, 口音) ;

(2) 录制环境信息表 (编号, 场所, 录音系统, 语种, 录制方式) ;

(3) 数据格式表 (编号, 语音文件格式, 采样频率, 量化比特数) ;

(4) 语音文本信息 (录音文本内容) 。

依靠这些标注文本, 可以很快地在语音库中检索出感兴趣的语音段, 并且是一对一的关系。语音库建立好后, 我们可以根据之前的标注来进行查询和使用。查询的基本步骤为:

(1) 新建一张包含字段的空表, 给它一个新的命名用于保存检索结果;

(2) 从录音人信息表中查询出符合要求的说话人编号;

(3) 根据录音人编号和语音文本信息在系统表中查询出所有满足要求的记录集;

(4) 对于记录集中的第一条记录, 把该记录集追加到新表中;

(5) 按第4步操作轮询第3步返回的所有记录;

(6) 查询结束后返回到新表;

(7) 遍历新表中的记录, 读取检索到的每个语音段中的语音数据, 然后完成需要的各种分析处理工作。

4语音库的测试

通过构建基于支持向量机 (SVM) 的说话人识别系统来对已构建的SQLite语音库进行测试。SVM作为一种说话人识别的手段具有独特的优势, 通过产生的支持向量来概括数据集合中的信息, 其分类核函数仅依赖于一小部分训练样本, 从而降低信息的采集量和识别时间[6]。本说话人识别系统是基于SVM中RBF核函数算法, 首先通过RBF核函数算法参数优化寻找最高识别率点, 平均识别率分布拟合曲线如图5所示。由此可见, 当帧数取5帧时, 识别率可以达到99.14%。当帧数太少时, 由于其包含的语音参数过少, 从而不能有效地反映说话人的个体特征;相反当帧数太多时产生了许多冗余的语音参数, 干扰了后继的训练和识别, 增加了计算的复杂性, 降低了识别率, 并加长了识别时间。由此可以找到优化参数。为了比对语音库的可靠性和完备性, 实验中任意指定20个说话人, 选择相同的语音内容作为研究对象, 取出与之对应的录制的音段分别作为说话人的参考样本和待识别样本。实验时需要将样本同时放入一个文件夹中和把样本放入语音库中作为两个实验源, 最后将这些样本准备好送到说话人识别系统训练和识别。实验中采用无序列样本和一语音数据库样本分别进行实验, 具体实验数据参见表2, 表3。识别时间对比曲线参见图6。

从表2和表3数据对比分析可见:无论是采用数据库样本还是无序样本对说话人识别系统本身的识别率没有影响, 但是训练时间和识别时间却有不同 (参见图6) , 当采样帧数增加时 (语音信息含量越高) , 训练时间和识别时间缩短的越明显。

5结论

本文基于SQLite技术基础上构建了一个适于SVM说话人识别系统的汉语语音识别数据库, 测试结果分析表明:合理优化的SQLite语音库使得采集语音样本数据按着特征结构存储和提取, 它不仅从可靠性和技术性方面能够满足对基于SVM说话人识别系统研究的需要, 而且与自然存取方式相比, 而最大的优势就是能够缩短识别时间, 数据量越大特性体现得的越明显。按照本文提出的设计方案, 语音库中的说话人可以按着需求随时增加。因此, 本系统基于SQLite技术构建的汉语语音识别数据库具有一定的实用性。

参考文献

[1]刘祥楼, 贾东旭, 李辉, 等.说话人识别中支持向量机核函数参数优化研究.科学技术与工程, 2010;10 (7) :1669—1673

[2]王宏, 李鑫, 高阳.基于大学生的汉语说话人识别语音库设计.昌吉学院学报, 2008; (6) :107—111

[3]吴淑珍, 吴阿华.说话人识别的参量研究和语音库建设.北京大学学报, 1995; (3) :316—322

[4]方棣棠.语音识别的顽健性与语音库的建立.计算机应用与软件, 1994; (1) :26—29

[5]杨莹春.面向移动互联环境的说话人识别语音库SRMC.第七届全国人机语音通信学术会议论文集, 中国中文信息学会, 2003;11:

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【语音数据采集】相关文章:

语音报警数据采集05-15

粤语语音与英语语音的比较探究09-11

歪歪语音(YY语音)详细使用教程04-27

中文语音05-01

语音融合05-02

语音阅读05-05

语音控制05-13

标准语音05-29

语音分析06-03

语音策略06-08

上一篇:专业发展路径下一篇:司法行政机关公务员