介绍一种音频信号分类方法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/audio_algorithm/article/details/78709422

    能用来区分语音和音乐信号的音频特征有很多种,如感觉特性、能量、功率谱和Mel频标倒谱(MFCC)系数,能量、平均过零率、基频和功率谱峰值等。以下介绍一种基于子带音调个数比与频谱倾斜度相结合的区分方法。

一、基本原理

    不同类型的音频,其音调分量在各个子带的分布有所不同。语音的音调分量绝大部分分布在低频处,而音乐的音调分量在各个子带的分布则相对较均匀。利用该特性可区分音乐与语音信号。

由于某些敲打式的突变音乐信号,其音调分布特性较接近于语音的音调分布特性。因此仅用子带音调分量区分准确度不高。为解决这一问题,引入频谱倾斜度特征。一般来说,语音与音乐的平均频谱倾斜度主要分布在[0.650,0.995]的范围内,但对于一些敲打式的突变音乐信号,其频谱倾斜度的值很小,小于0.650。另外,有些音乐频谱倾斜度的值可达到很高,大于0.995。该特性能较好的区分子带音调分量不能区分的突变音乐信号。

 

二、方法实现

 

2.1子带音调个数比

    对信号进行分帧处理,帧长为N。用汉明窗对每帧输入时域信号进行加窗,然后对加窗信号进行FFT变换,并计算其功率密度谱X(k),x(k)也称为频谱系数。由于FFT是关于N12对称的N/2,因此只需计算前N/2个频谱。

    将频域划分为4个子带SBi,分别为 [0,N/16],[N/16,N/8],[N/8,N/4]和[N/4,N/2]。当频谱系数X(k)符合X(k-1)<X(k)<X(k+1)且X(k)-X(k+j)≥7 dB时,则认为此频谱系数x(k)是音调的(tonal)。其中j根据不同的子带取不同的值。

                                                         

    计算每个子带的音调个数NTi(i=0,1,…,3)与帧的总音调个数NTsum的比值,即子带音调个数比RTi。取当前帧子带音调个数比与前面L帧(L=20,取1s较合理)的子带音调个数比的平均值作为当前帧的子带音调个数比(平滑处理)。语音与音乐在SB0和SB2的音调分布区别较大,因此可采用RT0与RT2对语音和音乐进行区分。

 

2.2  频谱倾斜度及判断方法

    频谱倾斜度(ST)是估计语音信号第一个自相关系数的归一化值ST=r(1)/r(0),其中,r(j)为自相关系数。与子带音调个数比类似,以20帧为例,计算当前帧与前19帧的ST均值作为当前帧的ST值。

    结合子带音调个数比和频谱倾斜度对输入音频信号进行分类。当同时符合RT0>0.62,RT<0.08,ST >0.65.而且ST<0.995这4个条件时,把当前帧判别为语音;否则,判别 为音乐。

    分类结果有时会出现单帧误判的情况,即所谓的“毛刺”现象。平滑技术可有效去除这种“毛刺”。平滑的简单实现方法是:若前一个数据块的信号类型与后一个数据块的信号类型相同。而与当前帧的信号类型不同时,使当前帧的信号类型判决为与前一个数据块的信号类型相同。实验证明,在分类算法中采用平滑技术可有效去除一些“毛刺”现象,使分类更平滑。


                                                       


展开阅读全文

没有更多推荐了,返回首页