新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于短时能量和短时过零率的VAD算法及其FPGA实现

基于短时能量和短时过零率的VAD算法及其FPGA实现

作者:李昱 林志谋 黄云鹰 卢贵主 厦门大学时间:2008-06-19来源:电子设计应用收藏

  语音激活检测(Voice Activity Detection)是一种通过特定的判决准则判断语音中出现的停顿和静默间隔,检测出有效语音部分的技术。运用这种技术可以在确保语音质量的前提下,对不同类别的语音段采用不同的比特数进行编码,从而降低语音的编码速率。由于在双工移动通信系统中,一方只有35%的时间处于激活状态[1],如何降低静音期的编码速率对于减少传输带宽、功率以及容量具有积极的作用,因此技术在语音通信领域具有重要的使用价值。随着适合于变比特率语音编码的CDMA和PRMA等多址技术的出现,应用于蜂窝的语音激活检测的重要性也随之提高[2]。

本文引用地址:http://www.eepw.com.cn/article/84500.htm

  由于语音通信的特殊性,要求检测过程能达到实时性的要求。而目前主流DSP芯片的并行度并不高,因此在实时处理的要求下,保证语音质量和降低语音的编码速率两者难以兼顾。而现场可编程门阵列()由于其硬件具有可编程的灵活性,可以实现较高的并行度,从而可以在满足实时性要求的前提下,很好地保证语音质量并降低语音的编码速率。

  1 算法及检测流程

  1.1 算法简述

  语音激活检测算法可以基于时域或频域。本文采用的算法是时域分析的方法。算法对于输入信号的检测过程可分为检测和检测两个部分。算法以检测为主,检测为辅。根据语音的统计特性,可以把语音段分为清音、浊音以及静音(包括背景噪声)三种。在本算法中,检测可以较好地区分出浊音和静音。对于清音,由于其能量较小,在短时能量检测中会因为低于能量门限而被误判为静音;则可以从语音中区分出静音和清音。将两种检测结合起来,就可以检测出语音段(清音和浊音)及静音段。

  1.2 检测流程

  检测流程:对输入信号先进行高通滤波,减弱以噪声为主的信号能量。接着进行窗长为80个数据的加窗处理,然后计算该帧的平均能量,再利用短时能量进行初判。若平均能量大于门限则判为语音帧,若平均能量小于门限则判为静音帧。对于初判为静音帧的帧再进行VAD平滑,即参考前三帧的情况:如果前三帧中至少包含一帧非平滑过的语音帧,则将该帧平滑为语音帧,同时记录下该帧为平滑所得的语音帧;反之,则判断为静音帧。如果平滑结果仍为静音帧,且当前帧的过零率介于30~70之间时,则改判为语音帧;反之则仍判为静音帧[3]。VAD算法的检测流程图如图1所示。

  此外,由于人耳的听觉具有掩蔽效应,因此有必要对短时能量门限进行更新[3]。本算法所采用的门限更新方式是:如果连续检测到三帧语音,为了更好地检测到静音,将短时能量门限提高3dB,但如果提高后的门限超过当前帧的平均能量减12dB,则不提高门限;如果连续检测到三帧静音,为了更好地检测到语音,将短时能量门限降低3dB,但如果降低后的门限小于当前帧的平均能量加12dB,则不降低门限。此外,为了防止门限变得太高或降得太低, 还应把门限限制在GATE_MIN、GATE_MAX范围内。

  2 系统实现及优化

  本设计采用QuartusII以及ModelSim进行开发(ModelSim是Mentor Graphics公司的仿真软件)。QuartusII是Altera公司的一套开发/CPLD的EDA软件,可以完成从设计输入、功能仿真、综合优化、后仿真、引脚配置、布局布线到配置芯片的一系列/CPLD的开发流程,并提供调用其他EDA工具,如ModelSim、Synplify/Synplify Pro、FPGA Complier的接口。

  本设计的输入为16位PCM编码的数字语音信号,输出是每80个数据为一帧的语音信号的检测结果,其中高电平表示语音,低电平表示静音。根据所用算法的特点,将本设计划分成五个模块:模块、高通滤波模块、平均能量模块、判决模块以及控制模块。系统结构框图如图2所示。

  2.1 模块

  输入的语音信号的采样率为8kHz,如果将8kHz作为系统的时钟频率,极大地削弱了FPGA芯片的速度优势。因此系统需要两个时钟,一个是频率为8kHz的采样时钟,另一个为系统主时钟。

  在FPGA设计中,多时钟设计会带来不稳定的隐患。为了提高系统的稳定性,本设计采用一个双口的作时钟隔离。FIFO模块具有16位的数据输入口及16位的数据输出口、8kHz时钟输入口以及系统主时钟输入口。此外,由于FIFO的读速度大于写速度,因此当FIFO为空时,需要输出一个empty信号。

  在高通滤波、平均能量计算、判决、控制这四个模块中均可采用单时钟设计,而且所使用的时钟均为系统主时钟。

  2.2 模块

  对输入信号进行高通滤波的预处理。高通的传输函数采用CS-ACELP算法所使用的传输函数[4]:


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭