新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Windows CE的语音口令识别系统的设计

基于Windows CE的语音口令识别系统的设计

作者: 时间:2011-01-10 来源:网络 收藏

  

  图2 信号的采集和处理流程图。

  主程序在配置好初始化参数后,建立一个子线程,建立子线程有利于将静音检测的复杂运算过程和主程序的数据采集过程分开进行,以确保在静音检测时不会丢掉数据。与此同时,主程序开始采集数据,并存入到缓冲区。当预先设定好的缓冲区内的数据采集满后,会将所采集的数据交给子线程,子线程做静音检测判断。主程序会依然继续重新采集新的数据。对于子线程,子线程的任务是等待主程序发出命令,然后对数据做处理。如果检测到有语音口令的开始,会继续采集数据,得到完整命令语音口令信号,提取相应的特征参数。

  具体程序中有如下几个主要过程:

  (1)初始化参数设置:

  (a)FuncReturn=waveInOpen((Record_Buffer_Manager.hWaveIn),WAVE_MAPPER,wFormat,(LONG)(RecordBufferFillProc),(DWORD)this,CALLBACK_FUNCTION);//首先要调用API函数打开音频设备接口,并且设置相应的回调(CALLBACK)函数(回调函数是操作系统在每次缓冲区存满后会自动访问的一个特殊函数)

  (b)Thread_process=AfxBeginThread((AFX_THREADPROC)RecordThreadProc,(LPVOID)this,THREAD_PRIORITY_NORMAL,0,0,0);//要为其单独建立一个线程,为了实现静音检测,在混杂着环境噪声的前提下,找出语音口令信号。

  (c)FuncReturn=waveInStart(Record_Buffer_Manager.hWaveIn);//打开音频数据流,开始录音。(缓冲区存满后,系统会自动访问回调函数)

  (2)主程序与子线程通信

  SetEvent(pRecord-》hRecordEvent );//发出信号,使得子线程函数得到命令,对采集到的音频流进行静音的检测判断。

  (3)在子线程内接收消息作出反应

  WaitForSingleObject(pRecord-》hRecordEvent,INFINITE);ResetEvent(pRecord-》hRecordEvent);//与回调函数的信号发出程序对应,接受信号,并重新设定状态,等待下一次信号。

  ……

  pRecord-》ProcessData((SAMPLE_TYPE *)pRecord-》pLeftData,……);//将得到的数据段进行处理,也就是真正执行静音检测的部分。

  (4)得到完整语音口令信号后提取特征参数。

  2 结束语

  论文建立了一种基于Windows CE的语音口令识别系统,并且对上升、下降等14条口令进行测试。实验结果表明,本语音口令识别系统达到了实时的要求,可以广泛应用于便携式设备中。


上一页 1 2 3 4 下一页

关键词: 音频

评论


相关推荐

技术专区

关闭