摘 要: 介绍了一种利用TI 公司的TMS320VC5402 定点DSP 芯片实现的基于语音能量、短时平均幅度差和过零率的语音检测器, 给出了算法的详细设计过程和DSP 硬件实现方案, 该方案在专用通信系统中, 用以对接收到的电台信号进行分析, 判断其中是否有语音信号, 从而控制半双工电台的发射开关, 使其处于接收或发射状态。实验表明, 该算法能在较低的信噪比情况下准确地检测出语音信号, 而且计算方法简单, 硬件处理容易, 可靠性高, 能够满足实时系统的需要, 在对DSP 在其他方面的应用也有一定的参考价值。
0 引言
语音信号检测(Voice Acess Detect, VAD) 技术,目的是为正确区分语音与各种背景噪声。在语音信号处理和通信等领域, 它有着十分重要的意义。本套算法集成了短时能量、过零率与短时平均幅度差(AMDF) 检测等算法的组合。
1 算法介绍
1.1 帧和窗的概念
短时分析将语音流分帧处理, 为减小语音帧的截断效应, 需要加窗处理; 窗口的形状和长度对分析影响很大, 不同的分析方法对窗函数的要求不尽一样; 可分为矩形窗、汉明窗和汉宁窗等。
通常认为一个语音帧内含有1~ 7 个基调周期比较理想, 但人的语音的基调周期值是变化的, 从女性和儿童2 ms 到老年男子的14 ms( 即基调频率为500Hz~ 70 Hz) , 所以N 的选择是比较困难的, 折衷的选择N 为100~ 300 点比较合适。
1.2 短时能量
一段短语音信号的能量称为短时能量, 第n 段的短时能量由En 表示, 它等于该短段语音取样的平方和, 设第n 帧语音信号x n ( m) 的短时能量用En表示, 则其计算公式如下:

算法中使用短时能量的主要目的是: 去除背景语音对VAD 效果的影响, 去除幅度较小的噪声对VAD 效果的影响。
1.3 短时过零率
过零表示信号通过零值, 过零率即每秒内信号值通过零值的次数。对于离散时间序列, 过零则是指序列取样值改变符号, 过零率则是每个样本改变符号的次数。对于语音信号, 则是指在一帧语音中语音信号波形穿过横轴( 零电平) 的次数, 可以用相邻2 个取样改变符号的次数来计算。
1.4 短时平均幅度差(AMDF)
对于完全的周期信号, 则相距为周期的整数倍的采样点上幅值相等, 差值为0。实际的语音信号是一个准周期信号, 差值不为0, 但很小, 这些极小值将出现在整数倍周期的位置上。定义短时平均幅度差函数:

AMDF 函数在浊音基音周期上出现极小值, 在清音语音时无明显极小值。在此基础上, 为避免由于信号强弱带来的误差, 需要对AMDF 函数进行归一化处理。
2 算法实现
语音信号是一种时变的、非平稳的随机过程, 从整体来看其特征及表征其本质特征的参数均是随时间变化的。但是, 语音的形成过程与发声器官的运动密切相关, 这种物理运动比起声音振动速度来要缓慢得多, 因此语音信号可以认为在一个较短的时间段内是平稳的, 即具有短时平稳性。
根据语音信号的这一特点, 结合所采用的算法的需要, 语音帧的长度定为16 ms, 下文将详细介绍算法的实现。
A、短时能量检测函数: power proc( ) , 输入参数为存放采集一帧数据的地址, 算法流程图如图1 所示。

图1 短时能量算法流程图
B、短时过零率函数: zero proc( ) , 输入参数为存放采集一帧数据的地址, 算法流程图如图2 所示。

图2 短时过零率算法流程图
C、短时平均幅度差函数: amdf proc( ) , 输入参数为存放采集一帧数据的地址。其中D(N ) 存放的是不同Z( 基音周期) 得到的幅度差, 算法流程图如图3 所示。

图3 短时平均幅度差算法流程图
语音检测时, 为保证检测的准确性, 连续10 帧检测有效时才认为确实有语音, 连续20 帧检测无效时才认为确实无语音。为了满足多帧检测需求, 又不至于出现掉字情况, 同时还要保证检测信号和语音信号的同步性, 设计了一个环形缓冲区, 模拟语音通道1 和通道2 各有一个对应的环形缓冲区delay1和delay2, 每一个环形缓冲区都有3 个指针: 接收指针、处理指针和发送指针, 分别供DMA 通道0 中断服务程序、短时能量子函数和短时平均幅度差子函数、DMA 通道1 中断服务程序使用。
3 硬件实现
系统的硬件实现, 器件为TI 公司的低端DSP 芯片TMS320VC5402 ( 以下简称C5402) , 片内DARAM 仅有16Kbyte, 地址有效范围0x0080H ~0x3FFFH, 其中配置地址有效范围为0x0000H ~0x005FH。
除算法外, 在具体研制过程中遇到了双通道A/ D采样时通道无法有效控制、扩展片外RAM 后程序不能正常加载、系统因负荷过大不能正确启动等难题, 通过长期的探索和尝试, 这些问题都得到了妥善的解决, 并掌握了实现2 路A/ D 同时采样的状态控制字配置方法, 为算法的实施打下了坚实的基础。
大致的配置方法如下:
A、所有保留位控制字, 采用缺省设置;
B、接收寄存器接收帧长度设置成每帧1 个字;
C、接收寄存器接收字长度设置成32 位;
D、发送寄存器发送帧长度设置成每帧1 个字;
E、发送寄存器发送字长度设置成32 位。
McBSP0 引脚控制寄存器配置如下:
A、DX 等引脚设置为串口;
B、DR 等引脚设置为串口;
C、帧同步发送位设置成内部发送模式;
D、帧同步接收位设置成外部发送模式;
E、时钟发送位设置成外部发送模式;
F、时钟接收位设置成内部发送模式;
G、帧同步发送设置高电平有效;
H、帧同步接收设置高电平有效;
I、发送时钟设置成为上升沿触发;
J、接收时钟设置成为上升沿触发。
McBSP1 引脚控制寄存器相关配置与McBSP0相似, 额外配置如下: 发送时钟设置为内部模式; 接收时钟设置为外部模式; 发送时钟设置为下降沿触发。
4 结束语
提出了采用平均幅度、过零率和短时能量等系列算法进行语音处理的原理及具体实现方法, 并介绍了承载该算法的硬件组成, 该套语音处理模块基于低端的DSP 处理芯片, 综合考虑了性能价格比,在实现所有功能及性能的前提下, 地节省了成本, 提高了产品的市场竞争力, 算法的实现, 凝聚了团队的心血, 在行业内处于地位。实践证明该语音处理模块硬件小巧, 语音质量好, 易于实现, 性价比较高, 可推广至各类需要语音处理的通信产品中。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。