论文部分内容阅读
传统的基于文本的音频检索技术不支持实时音频检索。为此,基于内容的音频检索技术应运而生,而以提取音频特征参数为关键技术。本文介绍一种MATLAB和VC (Visual C )混合编程提取音频特征参数的方法。
在音频检索之前,首先进行音频的特征提取。VC 提供了软件代码自动生成和可视化的资源编辑功能,但不足之处是不包括一些集成的数据算法。直接用VC 来提取音频特征,需要编写很多代码,准确性低。MATLAB为应用程序开发提供了最核心的数学工具,但是仿真时间长,直观性差。因而采取混合编程提取音频特征的方法更有效。
1 音频特征提取
提取音频特征之前,首先要对音频文件进行加窗处理,即把音频文件划分为一个个小段,每个小段称为一帧,相邻的两帧之间有重叠,然后对每帧进行音频特征提取。根据特征空间的不同,特征提取分为时域、频域和时频域3类。
时域特征参数包括短时平均能量、过零率[1]等。短时平均能量反映了音频能量幅度的变化,经常用来区分静音、非静音、清音和浊音。过零率反映了信号在短时帧内的平均频率,常用来区分音乐的开始和结束。实际计算中,为了避免静音段的随机噪声产生过高的过零率,这里设定一个门限值:delta=0.02。当前后两个采样的符号不同,并且差值大于这个门限值时,过零率的数值加1。
所谓频域特征提取,就是将音频信号先进行傅立叶变换,分析出组成该信号的不同频率和不同幅值的谐波,对这些谐波进行特征系数的提取[1]。提取的特征包括能量谱、倒谱值等。能量谱可用来分析该音频文件能量分布,用来提取构成该音频的主要频率。任何一个语音都是由声门波和声道的卷积而成的,用倒谱的方法得到声门波的频率(音调)和声道的特征(共振峰)是提取語音特征参数的一种方法[2]。
某些音频信号具有很强的时变特性,在这段时间内表现出周期信号的特性,而在另一个时间段表现出噪音特性[1]。对于这些时变剧烈的音频信号,既要从时域分析,也要从频域分析,因而采取短时傅里叶变换思想:假定非平稳信号x(t)在分析窗函数g(t)的一个短时间间隔内是平稳的,并移动分析窗函数,使x(t)g(t-τ)在不同的有限时间宽度内是平稳信号,从而计算出各个不同时刻的功率谱。
鉴于以上特性,本文最终提取的音频特征参数是短时平均能量、短时过零率、短时傅频能量、短时倒谱值。
2 MATLAB和VC 混合编程
实现MATLAB和VC 混合编程之前需要分别设置MATLAB和VC 的属性参数。在MATLAB中需要添加头文件、库文件搜索路径。在VC工程设置的预处理器属性中,加入3个字符串:MSVC、IBMPC、MSWIND。在连接属性页中,添加库函数:libmmfile、libmatlb、libmx、libmat、libmatpm、sgl、libmwsglm。在忽略库中输入msvcrt.lib[2]。然后建立一个专门处理音频信息的音频处理类。该类实现音频文件的装载、播放、停止以及返回文件的基本信息等功能。最后定义一个全局函数用来提取音频特征参数。
下面以提取短时频谱能量为例介绍如何在VC中嵌入MCC生成的代码。提取短时频谱能量时曾用到FFT变换,而该变换是VC不包含的集成数据运算,因而必须将其转换成VC识别的代码。具体做法:先在MATLAB中定义一个函数,功能是将音频数据进行FFT变换;然后在主函数中调用该函数,成功调用后,在命令窗口中输入mcc-t-L Cpp函数名,在当前文件夹下会生成源文件和头文件,在VC中将刚生成的两个文件添加到工程中;最后将VC的数据类型转换成mwArray类型。mwArray是MATLAB的C 数据库中的数据类型,用来实现MATLAB和VC混合编程。经过以上设置后,便可以在VC中直接调用MATLAB中MCC生成的代码,最终实现音频特征各个参数的提取。
3 结束语
MATLAB将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,命令语句功能十分强大,为科学研究、工程设计及众多学科领域提供了一种简洁、高效的编程工具。但是MATLAB使用的是解释性语言,大大限制了它的执行速度,局限于MATLAB运行环境而不能用于开发商用软件。VC 是Windows平台下主要的应用程序开发环境之一,它能方便实现软件开发,开发的系统具有界面友好、执行速度快、易维护和升级等优点。但是在工程计算方面,和MATLAB相比,编程显得复杂的多。因此实现VC 与MATLAB混合编程,使两者结合起来协同工作,必将提高软件开发效率,使所开发的软件具有更高的性能、更大的应用范围。
参考文献
[1]庄越挺,潘云鹤,吴飞,等.网上多媒体信息分析与检索[M].北京:清华大学出版社,2002:122-143
[2]何强,何英.MATLAB扩展编程[M].北京:清华大学出版社,2002
[3]李国辉,李恒峰.基于内容的音频检索:概念和方法[J].小型微型计算机系统,2000(11):1173-1177
[4]李博轩.多媒体开发指南[M].北京:清华大学出版社,2000
在音频检索之前,首先进行音频的特征提取。VC 提供了软件代码自动生成和可视化的资源编辑功能,但不足之处是不包括一些集成的数据算法。直接用VC 来提取音频特征,需要编写很多代码,准确性低。MATLAB为应用程序开发提供了最核心的数学工具,但是仿真时间长,直观性差。因而采取混合编程提取音频特征的方法更有效。
1 音频特征提取
提取音频特征之前,首先要对音频文件进行加窗处理,即把音频文件划分为一个个小段,每个小段称为一帧,相邻的两帧之间有重叠,然后对每帧进行音频特征提取。根据特征空间的不同,特征提取分为时域、频域和时频域3类。
时域特征参数包括短时平均能量、过零率[1]等。短时平均能量反映了音频能量幅度的变化,经常用来区分静音、非静音、清音和浊音。过零率反映了信号在短时帧内的平均频率,常用来区分音乐的开始和结束。实际计算中,为了避免静音段的随机噪声产生过高的过零率,这里设定一个门限值:delta=0.02。当前后两个采样的符号不同,并且差值大于这个门限值时,过零率的数值加1。
所谓频域特征提取,就是将音频信号先进行傅立叶变换,分析出组成该信号的不同频率和不同幅值的谐波,对这些谐波进行特征系数的提取[1]。提取的特征包括能量谱、倒谱值等。能量谱可用来分析该音频文件能量分布,用来提取构成该音频的主要频率。任何一个语音都是由声门波和声道的卷积而成的,用倒谱的方法得到声门波的频率(音调)和声道的特征(共振峰)是提取語音特征参数的一种方法[2]。
某些音频信号具有很强的时变特性,在这段时间内表现出周期信号的特性,而在另一个时间段表现出噪音特性[1]。对于这些时变剧烈的音频信号,既要从时域分析,也要从频域分析,因而采取短时傅里叶变换思想:假定非平稳信号x(t)在分析窗函数g(t)的一个短时间间隔内是平稳的,并移动分析窗函数,使x(t)g(t-τ)在不同的有限时间宽度内是平稳信号,从而计算出各个不同时刻的功率谱。
鉴于以上特性,本文最终提取的音频特征参数是短时平均能量、短时过零率、短时傅频能量、短时倒谱值。
2 MATLAB和VC 混合编程
实现MATLAB和VC 混合编程之前需要分别设置MATLAB和VC 的属性参数。在MATLAB中需要添加头文件、库文件搜索路径。在VC工程设置的预处理器属性中,加入3个字符串:MSVC、IBMPC、MSWIND。在连接属性页中,添加库函数:libmmfile、libmatlb、libmx、libmat、libmatpm、sgl、libmwsglm。在忽略库中输入msvcrt.lib[2]。然后建立一个专门处理音频信息的音频处理类。该类实现音频文件的装载、播放、停止以及返回文件的基本信息等功能。最后定义一个全局函数用来提取音频特征参数。
下面以提取短时频谱能量为例介绍如何在VC中嵌入MCC生成的代码。提取短时频谱能量时曾用到FFT变换,而该变换是VC不包含的集成数据运算,因而必须将其转换成VC识别的代码。具体做法:先在MATLAB中定义一个函数,功能是将音频数据进行FFT变换;然后在主函数中调用该函数,成功调用后,在命令窗口中输入mcc-t-L Cpp函数名,在当前文件夹下会生成源文件和头文件,在VC中将刚生成的两个文件添加到工程中;最后将VC的数据类型转换成mwArray类型。mwArray是MATLAB的C 数据库中的数据类型,用来实现MATLAB和VC混合编程。经过以上设置后,便可以在VC中直接调用MATLAB中MCC生成的代码,最终实现音频特征各个参数的提取。
3 结束语
MATLAB将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,命令语句功能十分强大,为科学研究、工程设计及众多学科领域提供了一种简洁、高效的编程工具。但是MATLAB使用的是解释性语言,大大限制了它的执行速度,局限于MATLAB运行环境而不能用于开发商用软件。VC 是Windows平台下主要的应用程序开发环境之一,它能方便实现软件开发,开发的系统具有界面友好、执行速度快、易维护和升级等优点。但是在工程计算方面,和MATLAB相比,编程显得复杂的多。因此实现VC 与MATLAB混合编程,使两者结合起来协同工作,必将提高软件开发效率,使所开发的软件具有更高的性能、更大的应用范围。
参考文献
[1]庄越挺,潘云鹤,吴飞,等.网上多媒体信息分析与检索[M].北京:清华大学出版社,2002:122-143
[2]何强,何英.MATLAB扩展编程[M].北京:清华大学出版社,2002
[3]李国辉,李恒峰.基于内容的音频检索:概念和方法[J].小型微型计算机系统,2000(11):1173-1177
[4]李博轩.多媒体开发指南[M].北京:清华大学出版社,2000