发明内容
本发明实施例的目的在于提供一种选择编码模式的方法,旨在解决如何优化特征值的选取、减少特征值的数量、优化判决树的生成、减少在分类结果中的频繁切换。
第一方面,一种选择编码模式的方法,所述方法包括:
提取乐音信号的3阶梅尔频率cepstrum MFCC系数;
根据所述3阶MFCC和迭代二叉树3代ID3判决树对所述乐音信号进行分类,并将分类结果存入一个FIFO数据组,所述FIFO数据组包括buffer1数据组和buffer2数据组;
对所述分类结果进行平滑处理,所述平滑处理包括语音和乐音帧间首次切换的初始状态设置、静音帧的处理、分类结果的修正、分类结果切换频度的限制;
当分类结果为打击乐时,采用频段复制编码模式CT-SBR编码模式进行高频重建;
当分类结果为管弦乐时,采用谐和频段复制编码模式hSBR进行高频重建。
结合第一方面,在第一方面的第一种可能的实现方式中,所述提取乐音信号的3阶MFCC,包括:
对乐音信号进行分帧,将所述乐音信号的帧长为2048点的单帧均分为两个帧长为1024点的子帧,所述两个子帧的重叠长度为0;
利用hanning窗对每一个所述子帧进行加窗;
分别对加窗后的两个子帧的进行快速傅立叶变换FFT,使得所述乐音信号从时域映射到频率域,对频率域信号取模,得到所述频率域信号的幅度值;
利用一组梅尔频域上线性分布的三角窗滤波器对所述幅度值进行滤波;
取滤波后数值的对数,对所述对数做离散余弦DCT变换,得到3阶MFCC。
结合第一方面或者第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述根据所述3阶MFCC和迭代二叉树3代ID3判决树对所述乐音信号进行分类,包括:
通过训练得到所述ID3判决树的各节点值,使用多层的if-else嵌套对所述3阶MFCC进行判断,每一帧得到一个分类结果。
结合第一方面或者第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述对所述分类结果进行平滑处理,所述平滑处理包括语音和乐音帧间首次切换的初始状态设置、静音帧的处理、分类结果的修正、分类结果切换频度的限制,包括:
初始化所述buffer1数据组﹑buffer2数据组和变量premode,所述变量premode表示前一帧的状态,初始化时设置所述乐音信号所有帧的状态都为管弦乐状态;
计算所述buffer1数据组的状态平均值;
根据所述状态平均值判断帧状态是否是静音帧;
当判断所述帧状态是静音帧时,则将所述buffer2数据组中的所述帧状态修改为前一帧的状态;
当判断所述帧状态不是静音帧且所述buffer1数据组中打击乐状态数量占多数时,则将所述buffer2数据组中的所述帧状态修改为打击乐状态;
当判断所述帧状态不是静音帧且所述buffer1数据组中管弦乐状态数量占多数时,则将所述buffer2数据组中的所述帧状态修改为管弦乐状态;
计算所述buffer2数据组中的状态变换次数,当所述状态变换次数超过一定阈值时,将所述帧状态修改为前一帧状态。
结合第一方面或者第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式或者第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述方法在步骤提取所述乐音信号的3阶MFCC还包括:
提取所述乐音信号中除3阶MFCC外的其他阶MFCC系数。
结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述方法在步骤根据所述3阶MFCC和ID3判决树对所述乐音信号进行分类还包括:
根据所述3阶MFCC和其他类型的判决树对所述乐音信号进行分类,所述其他类型的判决树是除了ID3代判决树外的其他类型的判决树。
第二方面,一种选择编码模式的装置,所述装置包括:
提取单元,用于提取乐音信号的3阶梅尔频率cepstrum MFCC系数;
分类单元,用于根据所述3阶MFCC和迭代二叉树3代ID3判决树对所述乐音信号进行分类,并将分类结果存入一个FIFO数据组,所述FIFO数据组包括buffer1数据组和buffer2数据组;
平滑单元,用于对所述分类结果进行平滑处理,所述平滑处理包括语音和乐音帧间首次切换的初始状态设置、静音帧的处理、分类结果的修正、分类结果切换频度的限制;
高频重建单元,用于当分类结果为打击乐时,采用频段复制编码模式CT-SBR编码模式进行高频重建;当分类结果为管弦乐时,采用谐和频段复制编码模式hSBR进行高频重建。
结合第二方面,在第二方面的第一种可能的实现方式中,所述提取单元,包括:
分帧单元,用于对乐音信号进行分帧,将所述乐音信号的帧长为2048点的单帧均分为两个帧长为1024点的子帧,所述两个子帧的重叠长度为0;
加窗单元,用于利用hanning窗对每一个所述子帧进行加窗;
快速傅立叶变换单元,用于分别对加窗后的两个子帧的进行快速傅立叶变换FFT,使得所述乐音信号从时域映射到频率域,对频率域信号取模,得到所述频率域信号的幅度值;
滤波单元,用于利用一组梅尔频域上线性分布的三角窗滤波器对所述幅度值进行滤波;
取对数单元,用于取滤波后数值的对数,对所述对数做离散余弦DCT变换,得到3阶MFCC。
结合第二方面或者第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述分类单元,具体用于:
通过训练得到所述ID3判决树的各节点值,使用多层的if-else嵌套对所述3阶MFCC进行判断,每一帧得到一个分类结果。
结合第二方面或者第二方面的第一种可能的实现方式或者第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述平滑单元,包括:
初始化单元,用于初始化所述buffer1数据组﹑buffer2数据组和变量premode,所述变量premode表示前一帧的状态,初始化时设置所述乐音信号所有帧的状态都为管弦乐状态;
计算单元,用于计算所述buffer1数据组的状态平均值;
判断单元,用于根据所述状态平均值判断帧状态是否是静音帧;
当判断所述帧状态是静音帧时,则将所述buffer2数据组中的所述帧状态修改为前一帧的状态;
当判断所述帧状态不是静音帧且所述buffer1数据组中打击乐状态数量占多数时,则将所述buffer2数据组中的所述帧状态修改为打击乐状态;
当判断所述帧状态不是静音帧且所述buffer1数据组中管弦乐状态数量占多数时,则将所述buffer2数据组中的所述帧状态修改为管弦乐状态;
修改单元,用于计算所述buffer2数据组中的状态变换次数,当所述状态变换次数超过一定阈值时,将所述帧状态修改为前一帧状态。
结合第二方面或者第二方面的第一种可能的实现方式或者第二方面的第二种可能的实现方式或者第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述装置还包括:
提取子单元,用于提取所述乐音信号中除3阶MFCC外的其他阶MFCC系数。
结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述装置还包括:
分类子单元,用于根据所述3阶MFCC和其他类型的判决树对所述乐音信号进行分类,所述其他类型的判决树是除了ID3代判决树外的其他类型的判决树。
与现有技术相比,本发明公开了一种选择编码模式的方法,通过对乐音信号进行分类,当分类结果为打击乐时,采用频段复制编码模式进行高频重建,当分类结果为管弦乐时,采用谐和频段复制编码模式进行高频重建,通过提取乐音信号的3阶MFCC,优化特征值的组合,减少特征值的个数,简化特征值的计算,也因为特征值数量少进而降低分类判断的计算量;在分类算法中,通过训练部分程序对训练集中乐音信号的处理,生成判决树,判决树中每个节点为一个判决条件,判决条件训练完成就保持不变,便于编码的实现,分类算法处理时间少、复杂度小,不需要每次读入训练集,进而大大减少了存储量;在乐音信号的高频重建过程中,重建模式CT-SBR和hSBR间切换将产生切换噪声,为了抑制切换噪声,对分类结果进行平滑处理,进而限制分类结果的频繁切换。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
参考图1,图1是本发明实施例提供的一种选择编码模式的方法流程图。如图1所示,所述方法包括以下步骤:
步骤101,提取乐音信号的3阶梅尔频率cepstrum MFCC系数;
可选地,所述提取乐音信号的3阶MFCC,包括:
对乐音信号进行分帧,将所述乐音信号的帧长为2048点的单帧均分为两个帧长为1024点的子帧,所述两个子帧的重叠长度为0;
利用hanning窗对每一个所述子帧进行加窗;
分别对加窗后的两个子帧的进行快速傅立叶变换FFT,使得所述乐音信号从时域映射到频率域,对频率域信号取模,得到所述频率域信号的幅度值;
利用一组梅尔频域上线性分布的三角窗滤波器对所述幅度值进行滤波;
取滤波后数值的对数,对所述对数做离散余弦变换(Discrete CosineTransformation,DCT),得到3阶MFCC。
具体地,所述分帧具体为:在乐音信号编码中,输入信号通常被分为高频和低频两大部分,其中低频部分采用核心编码器,以一个频率为分界线,此频率以下为低频部分,此频率以上为高频部分,将低频部分拉伸,扩展到整个频段而得到高频部分。输入信号的低频部分通常是对原始信号的采样得来,为了保持与核心编码器等帧长,因此,在本发明中的算法中对原始输入信号2048点的帧长均分为两个1024点的子帧,并对两个子帧分别进行分类处理,最后,对两次分类的结果进行合并,得到最终结果。
在加窗算法中,采用hanning窗对每一子帧进行加窗,以减轻频谱泄露所造成的影响;通过快速傅里叶变换(Fast Fourier Transform,FFT)将输入信号从时间域变换到频率域,并对变换结果取模,得到信号的幅度值;采用一组梅尔频域上线性分布的三角滤波器,对输入信号的幅度值进行滤波,每一个三角窗滤波器的覆盖范围均近于人耳的一个临界带宽,以此来模拟人耳的听觉掩蔽效应;对三角窗滤波器组的各输出值取对数,得到近似与同态变换的结果,所述同态变换是将原本的乘性转变为加性的变换。
对上一步得到的对数结果做离散余弦变换,去除信号间的相关性,同时,将输入信号映射到一个低维度空间,当使用不同阶数的离散余弦变换时,能得到相应的不同阶的MFCC参数,其中,3阶MFCC总共有3阶,3阶MFCC可以是第5第6第7阶MFCC组合。
步骤102,根据所述3阶MFCC和迭代二叉树3代ID3判决树对所述乐音信号进行分类,并将分类结果存入一个先入先出(First in first out,FIFO)数据组,所述FIFO数据组包括buffer1数据组和buffer2数据组;
可选地,所述根据所述3阶MFCC和迭代二叉树3代ID3判决树对所述乐音信号进行分类,包括:
通过训练得到所述ID3判决树的各节点值,使用多层的if-else嵌套对所述3阶MFCC进行判断,每一帧得到一个分类结果。
具体地,通过训练部分的程序计算得到ID3判决树的各节点值,训练部分的程序对训练集中的乐音信号进行处理得到训练集乐音信号的3阶MFCC集,并且得到相应每个参数所对应的打击乐/管弦乐标志,通过对这些参数和标志得到各节点值。
每个节点为一个判决条件,即当输入的某帧乐音信号的3阶MFCC不满足其判决条件时,将继续使用右子节点的判决条件进行判断或者判断当前乐音信号为右子节点的状态,比如打击乐或者管弦乐;当不满足右子节点的判决条件时,将继续使用左子节点的条件进行判断或者判读当前乐音信号为左子节点的状态,比如打击乐或者管弦乐。
对每一帧乐音信号计算其3阶MFCC,所以,得到每一帧乐音信号的分类结果。所述分类结果是每一帧乐音信号的状态,比如,乐音信号为打击乐时,则记录当前帧状态的变量会设置为0,当乐音信号为管弦乐时,则记录当前帧状态的变量会设置为1,每一帧乐音信号的判决结果取决于先前训练形成的ID3判决树,根据每一帧乐音信号的3阶MFCC是否满足判决树中的每个节点的条件,由判决树自行判决每一帧乐音信号是打击乐或者管弦乐。
例如,如果当前帧的3阶MFCC[MFCC1 MFCC2 MFCC3]为[0.1 0.2 0.3],当ID3判决树对其进行判断时,根节点条件为MFCC1>0.2,则当前帧MFCC参数不满足此条件,则继续使用右子节点的条件进行判断,如果右子节点条件为MFCC3<0.4,当前帧满足此条件,则使用当前节点的左子节点的条件进行进一步判断,如果左子节点为mode=1,则直接判断这一帧为管弦乐帧。
步骤103,对所述分类结果进行平滑处理,所述平滑处理包括语音和乐音帧间首次切换的初始状态设置、静音帧的处理、分类结果的修正、分类结果切换频度的限制;
可选地,所述对所述分类结果进行平滑处理,所述平滑处理包括语音和乐音帧间首次切换的初始状态设置、静音帧的处理、分类结果的修正、分类结果切换频度的限制,包括:
初始化所述buffer1数据组﹑buffer2数据组和变量premode,所述变量premode表示前一帧的状态,初始化时设置所述乐音信号所有帧的状态都为管弦乐状态;
计算所述buffer1数据组的状态平均值;
具体的,(buffer1[0]+buffer[1]+…+buffer[N])/N。
根据所述状态平均值判断帧状态是否是静音帧;
具体的,根据所述状态平均值判断当前计算帧状态是否是静音帧,所述当前计算帧为正在计算的一帧乐音信号,因为程序每次读入2048点乐音信号数据,分为两帧数据,每帧1024点数据,先对前1024点进行处理,再对后1024点进行处理,即程序每次处理1024点数据,即处理一帧数据,当前帧即程序读入并正在处理的一帧。
当判断所述当前计算帧状态是静音帧时,则将所述buffer2数据组中的所述当前计算帧状态修改为前一帧的状态;
当判断所述当前计算帧状态不是静音帧且所述buffer1数据组中打击乐状态数量占多数时,则将所述buffer2数据组中的所述当前计算帧状态修改为打击乐状态;
当判断所述当前计算帧状态不是静音帧且所述buffer1数据组中管弦乐状态数量占多数时,则将所述buffer2数据组中的所述当前计算帧状态修改为管弦乐状态;
计算所述buffer2数据组中的状态变换次数,当所述状态变换次数超过一定阈值时,将所述帧状态修改为前一帧状态。
参考图2,图2是本发明实施例提供的一种乐音信号分类结果平滑算法的流程图。所述流程图包括以下步骤:
步骤201,存储与buffer1数据组和buffer2数据组中的分类结果;
步骤202,判断长段乐音帧是否开始,若判断结果为是,则清空buffer1数据组,buffer2数据组中的当前帧值,上一帧状态设为乐音帧;若判断结果为否,则利用buffer1数据组计算状态值;
步骤203,根据上述计算得到的状态值判断是否为静音帧,若是,则将当前帧状态设置为上一帧状态;
步骤204,若判断不是为静音帧,则判断乐音帧的数量是否大于缓存的容量;
步骤205,若乐音帧的数量大于缓存的容量,则判断计算得到的状态值是否小于阈值T1,若是则确定当前帧状态为打击乐;若否,则判断计算得到的状态值是否大于阈值T2,若是则确定当前帧状态为管弦乐;
步骤206,若乐音帧的数量小于缓存的容量,返回当前帧状态;
步骤207,若判断计算得到的状态值属于大于阈值T1和小于阈值T2之间的值,则用buffer2数据组计算状态改变次数;
步骤208,判断当前帧状态是否等于前一帧状态;若否,则判断状态改变次数是否大于阈值T3;若是,则直接返回当前帧状态;
步骤209,若状态改变次数大于阈值T3,则将当前帧状态修改为前一帧状态;
步骤210,若状态改变次数小于阈值T3,则返回当前帧状态;
步骤211,在返回当前帧状态的步骤之前,修改buffer2数据组中的当前帧状态。
参考表1,表1是本发明实施例提供的利用原始算法和本发明提供的新算法编码后的乐音信号信号信噪比的对比数据表。
Items |
Original(SNR) |
New(SNR) |
RefM_HarryPotter |
0.6113 |
0.6672 |
RefM_Music_1 |
1.6536 |
1.5347 |
RefM_salvation |
1.3446 |
1.5397 |
RefM_SpeechOverMusic_1 |
0.9675 |
1.5218 |
RefM_te15 |
0.4301 |
0.9439 |
RefM_twinkle_ff51 |
0.9715 |
1.9207 |
表1
本发明的有益效果主要有如下几点:
⑴对码流的音质尤其是打击乐部分的编码音质有明显的提升;
由于将乐音信号分为了打击乐和管弦乐,这就使频谱上不具有明显谐波特性的乐音信号被单独分类出来,使用CT-SBR进行高频重建,所以使乐音信号的音质有一定程度的提高。客观上,信噪比有了比较明显的提升,各乐音信号段的采用原始算法与采用新算法后的信噪比表1所示。
⑵算法的复杂度小;
由于采用特定如3阶的MFCC参数来进行打击乐/管弦乐的分类,并使用复杂度较小的ID3判决树进行结果的判决,减小了算法的相对复杂度。另外,在判决后添加平滑函数,有效的抑制了分类状态切换的频度。
作为一种可选的实施例,所述方法在步骤提取所述乐音信号的3阶MFCC还包括:
提取所述乐音信号中除3阶MFCC外的其他阶MFCC。
本步骤中,特征提取只使用3阶MFCC,分别为第11阶、第12阶、第13阶,其代替方案可选为其他不同阶数的MFCC。
结合一种可选地实施例,所述方法在步骤根据所述3阶MFCC和ID3判决树对所述乐音信号进行分类还包括:
根据所述3阶MFCC和其他类型的判决树对所述乐音信号进行分类,所述其他类型的判决树是除了ID3代判决树外的其他类型的判决树。
步骤104,当分类结果为打击乐时,采用频段复制编码模式CT-SBR编码模式进行高频重建;当分类结果为管弦乐时,采用谐和频段复制编码模式hSBR进行高频重建。
本发明实施例公开了一种选择编码模式的方法,通过对乐音信号进行分类,当分类结果为打击乐时,采用频段复制编码模式进行高频重建,当分类结果为管弦乐时,采用谐和频段复制编码模式进行高频重建,通过提取乐音信号的3阶MFCC,优化特征值的组合,减少特征值的个数,简化特征值的计算,也因为特征值数量少进而降低分类判断的计算量;在分类算法中,通过训练部分程序对训练集中乐音信号的处理,生成判决树,判决树中每个节点为一个判决条件,判决条件训练完成就保持不变,便于编码的实现,分类算法处理时间少、复杂度小,不需要每次读入训练集,进而大大减少了存储量;在乐音信号的高频重建过程中,重建模式CT-SBR和hSBR间切换将产生切换噪声,为了抑制切换噪声,对分类结果进行平滑处理,进而限制分类结果的频繁切换。
参考图3,图3是本发明实施例提供的一种乐音信号分类算法的流程图。如流程图所示,所述方法包括以下步骤:
步骤301,对信号分帧加窗,进行FFT变换;
步骤302,取频谱幅值;
步骤303,将幅度映射到Mel谱;三角窗滤波;取对数;DCT变换;
步骤304,得到3阶MFCC;
步骤305,ID3判决树,得到分类结果;将结果存入FIFO数据组;
步骤306,用FIFO数据组中的结果计算状态的结果;
步骤307,判断状态切换帧,若判断状态改变,则清空数据和变量;
步骤308,判断当前帧是否为静音帧,若判断当前帧为静音帧,则修改当前帧为前一帧,若否,则不作任何处理;同时,根据前几帧状态修正当前帧状态;
步骤309,判断状态改变次数是否大于预先设置的阈值,若是,则将当前帧状态修改为前一帧状态;若否,则返回当前帧状态。
打击乐/管弦乐分类算法的工作流程从整体上看可以分为如下三大部分:
1.对输入信号进行特征值提取
将输入的帧长为2048点的单帧均分为两个帧长1024点的子帧,两个子帧间的重叠长度为0。接着,分别对两个子帧加1024点的hanning窗并进行FFT变换从而将输入信号从时间域映射到频率域。然后,对映射后的频域信号取模,得到其幅度值。最后,将频域幅度值映射到mel域,并进行三角窗滤波,取对数,DCT变换,得到3阶MFCC。
2.根据特征值对当前帧的类型作出判断
将上步中得到的3阶MFCC输入到ID3决策树,决策树根据其包含的节点数值进行判断,得出当前子帧的分类结果。最后,将分类结果存入一个FIFO数组:buffer1和buffer2。
3.对分类结果进行平滑处理
对分类结果的平滑处理包含四个部分:语音/乐音帧间首次切换的初始状态设置;静音帧的处理;分类结果的修正;分类结果切换频度的限制。
参考图4,图4是本发明实施例提供的一种选择编码模式的装置结构图。所述装置结构图包括以下单元:
提取单元401,用于提取乐音信号的3阶梅尔频率cepstrum MFCC系数;
可选地,所述提取单元401包括:
分帧单元501,用于对乐音信号进行分帧,将所述乐音信号的帧长为2048点的单帧均分为两个帧长为1024点的子帧,所述两个子帧的重叠长度为0;
加窗单元502,用于利用hanning窗对每一个所述子帧进行加窗;
快速傅立叶变换单元503,用于分别对加窗后的两个子帧的进行快速傅立叶变换FFT,使得所述乐音信号从时域映射到频率域,对频率域信号取模,得到所述频率域信号的幅度值;
滤波单元504,用于利用一组梅尔频域上线性分布的三角窗滤波器对所述幅度值进行滤波;
取对数单元505,用于取滤波后数值的对数,对所述对数做离散余弦DCT变换,得到3阶MFCC。
具体地,所述分帧具体为:在乐音信号编码中,输入信号通常被分为高频和低频两大部分,其中低频部分采用核心编码器,以一个频率为分界线,此频率以下为低频部分,此频率以上为高频部分,将低频部分拉伸,扩展到整个频段而得到高频部分。输入信号的低频部分通常是对原始信号的采样得来,为了保持与核心编码器等帧长,因此,在本发明中的算法中对原始输入信号2048点的帧长均分为两个1024点的子帧,并对两个子帧分别进行分类处理,最后,对两次分类的结果进行合并,得到最终结果。
在加窗算法中,采用hanning窗对每一子帧进行加窗,以减轻频谱泄露所造成的影响;通过FFT将输入信号从时间域变换到频率域,并对变换结果取模,得到信号的幅度值;采用一组梅尔频域上线性分布的三角滤波器,对输入信号的幅度值进行滤波,每一个三角窗滤波器的覆盖范围均近于人耳的一个临界带宽,以此来模拟人耳的听觉掩蔽效应;对三角窗滤波器组的各输出值取对数,得到近似与同态变换的结果,所述同态变换是将原本的乘性转变为加性的变换。
对上一步得到的对数结果做离散余弦变换,去除信号间的相关性,同时,将输入信号映射到一个低维度空间,当使用不同阶数的离散余弦变换时,能得到相应的不同阶的MFCC参数,其中,3阶MFCC总共有3阶,3阶MFCC可以是第5第6第7MFCC组合。
分类单元402,用于根据所述3阶MFCC和迭代二叉树3代ID3判决树对所述乐音信号进行分类,并将分类结果存入一个FIFO数据组,所述FIFO数据组包括buffer1数据组和buffer2数据组;
可选地,所述分类单元502,具体用于:
通过训练得到所述ID3判决树的各节点值,使用多层的if-else嵌套对所述3阶MFCC进行判断,每一帧得到一个分类结果。
具体地,通过训练部分的程序计算得到ID3判决树的各节点值,训练部分的程序对训练集中的乐音信号进行处理得到训练集乐音信号的3阶MFCC集,并且得到相应每个参数所对应的打击乐/管弦乐标志,通过对这些参数和标志得到各节点值。
每个节点为一个判决条件,即当输入的某帧乐音信号的3阶MFCC满足其判决条件时,将继续使用右子节点的条件进行判断或者判断当前乐音信号为右子节点的状态,比如打击乐或者管弦乐;当不满足其判决条件时,将继续使用左子节点的条件进行判断或者判读当前乐音信号为左子节点的状态,比如打击乐或者管弦乐。
对每一帧乐音信号计算其3阶MFCC,所以,得到每一帧乐音信号的分类结果。所述分类结果是每一帧乐音信号的状态,比如,乐音信号为打击乐时,则记录当前帧状态的变量会设置为0,当乐音信号为管弦乐时,则记录当前帧状态的变量会设置为1,每一帧乐音信号的判决结果取决于先前训练形成的ID3判决树,根据每一帧乐音信号的3阶MFCC满足判决树中的每个节点的条件后,则由判决树自行判决每一帧乐音信号是打击乐或者管弦乐。
例如,如果当前帧的3阶MFCC[MFCC1 MFCC2 MFCC3]为[0.1 0.2 0.3],当ID3判决树对其进行判断时,根节点条件为MFCC1>0.2,则当前帧MFCC参数不满足此条件,则继续使用右子节点的条件进行判断,如果右子节点条件为MFCC3<0.4,当前帧满足此条件,则使用当前节点的左子节点的条件进行进一步判断,如果左子节点为mode=1,则直接判断这一帧为管弦乐帧。
平滑单元403,用于对所述分类结果进行平滑处理,所述平滑处理包括语音和乐音帧间首次切换的初始状态设置、静音帧的处理、分类结果的修正、分类结果切换频度的限制;
可选地,所述平滑单元403,包括:
初始化单元601,用于初始化所述buffer1数据组﹑buffer2数据组和变量premode,所述变量premode表示前一帧的状态,初始化时设置所述乐音信号所有帧的状态都为管弦乐状态;
计算单元602,用于计算所述buffer1数据组的状态平均值;
具体的,(buffer1[0]+buffer[1]+…+buffer[N])/N。
判断单元603,用于根据所述状态平均值判断帧状态是否是静音帧;
具体的,根据所述状态平均值判断当前帧状态是否是静音帧,所述当前帧为正在计算的一帧乐音信号,因为程序每次读入2048点乐音信号数据,分为两帧数据,每帧1024点数据,先对前1024点进行处理,再对后1024点进行处理,即程序每次处理1024点数据,即处理一帧数据,当前帧即程序读入并正在处理的一帧。
当判断所述帧状态是静音帧时,则将所述buffer2数据组中的所述帧状态修改为前一帧的状态;
当判断所述帧状态不是静音帧且所述buffer1数据组中打击乐状态数量占多数时,则将所述buffer2数据组中的所述帧状态修改为打击乐状态;
当判断所述帧状态不是静音帧且所述buffer1数据组中管弦乐状态数量占多数时,则将所述buffer2数据组中的所述帧状态修改为管弦乐状态;
修改单元604,用于计算所述buffer2数据组中的状态变换次数,当所述状态变换次数超过一定阈值时,将所述帧状态修改为前一帧状态。
参考图2,图2是本发明实施例提供的一种乐音信号分类结果平滑算法的流程图。所述流程图包括以下步骤:
步骤201,存储与buffer1数据组和buffer2数据组中的分类结果;
步骤202,判断长段乐音帧开始否?若判断结果为是,则清空buffer1数据组,buffer2数据组中的当前帧值,上一帧状态设为乐音帧;若判断结果为否,则利用buffer1数据组计算状态值;
步骤203,根据上述计算得到的状态值判断是否为静音帧,若是,则将当前帧状态设置为上一帧状态;
步骤204,若判断不是为静音帧,则判断乐音帧的数量是否大于缓存的容量;
步骤205,若乐音帧的数量大于缓存的容量,则判断计算得到的状态值是否小于阈值T1,若是则确定当前帧状态为打击乐;若否,则判断计算得到的状态值是否大于阈值T2,若是则确定当前帧状态为管弦乐;
步骤206,若乐音帧的数量小于缓存的容量,返回当前帧状态;
步骤207,若判断计算得到的状态值属于大于阈值T1和小于阈值T2之间的值,则用buffer2数据组计算状态改变次数;
步骤208,判断当前帧状态是否等于前一帧状态;若否,则判断状态改变次数是否大于阈值T3;若是,则直接返回当前帧状态;
步骤209,若状态改变次数大于阈值T3,则将当前帧状态修改为前一帧状态;
步骤210,若状态改变次数小于阈值T3,则返回当前帧状态;
步骤211,在返回当前帧状态的步骤之前,修改buffer2数据组中的当前帧状态。
参考表1,表1是本发明实施例提供的利用原始算法和本发明提供的新算法编码后的乐音信号信号信噪比的对比数据表。
Items |
Original(SNR) |
New(SNR) |
RefM_HarryPotter |
0.6113 |
0.6672 |
RefM_Music_1 |
1.6536 |
1.5347 |
RefM_salvation |
1.3446 |
1.5397 |
RefM_SpeechOverMusic_1 |
0.9675 |
1.5218 |
RefM_te15 |
0.4301 |
0.9439 |
RefM_twinkle_ff51 |
0.9715 |
1.9207 |
表1
本发明的有益效果主要有如下几点:
⑴对码流的音质尤其是打击乐部分的编码音质有明显的提升;
由于将乐音信号分为了打击乐和管弦乐,这就使频谱上不具有明显谐波特性的乐音信号被单独分类出来,使用CT-SBR进行高频重建,所以使乐音信号的音质有一定程度的提高。客观上,信噪比有了比较明显的提升,各乐音信号段的采用原始算法与采用新算法后的信噪比表1所示。
⑵算法的复杂度小;
由于采用特定如3阶的MFCC参数来进行打击乐/管弦乐的分类,并使用复杂度较小的ID3判决树进行结果的判决,减小了算法的相对复杂度。另外,在判决后添加平滑函数,有效的抑制了分类状态切换的频度。
高频重建单元404,用于当分类结果为打击乐时,采用频段复制编码模式CT-SBR编码模式进行高频重建;当分类结果为管弦乐时,采用谐和频段复制编码模式hSBR进行高频重建。
作为一种可选的实施例,所述装置还包括:
提取子单元,用于提取所述乐音信号中除3阶MFCC外的其他阶MFCC系数。
本步骤中,特征提取只使用3阶MFCC,分别为第11阶、第12阶、第13阶,其代替方案可选为其他不同阶数的MFCC参数。
结合一种可选的实施例,所述装置还包括:
分类子单元,用于根据所述3阶MFCC和其他类型的判决树对所述乐音信号进行分类,所述其他类型的判决树是除了ID3代判决树外的其他类型的判决树。
本发明实施例公开了一种选择编码模式的方法,通过对乐音信号进行分类,当分类结果为打击乐时,采用频段复制编码模式进行高频重建,当分类结果为管弦乐时,采用谐和频段复制编码模式进行高频重建,通过提取乐音信号的3阶MFCC,优化特征值的组合,减少特征值的个数,简化特征值的计算,也因为特征值数量少进而降低分类判断的计算量;在分类算法中,通过训练部分程序对训练集中乐音信号的处理,生成判决树,判决树中每个节点为一个判决条件,判决条件训练完成就保持不变,便于编码的实现,分类算法处理时间少、复杂度小,不需要每次读入训练集,进而大大减少了存储量;在乐音信号的高频重建过程中,重建模式CT-SBR和hSBR间切换将产生切换噪声,为了抑制切换噪声,对分类结果进行平滑处理,进而限制分类结果的频繁切换。
参考图7,图7是本发明实施例提供的一种选择编码模式的装置结构图。参考图7,图7是本发明实施例提供的一种选择编码模式的装置700,本发明具体实施例并不对所述选择编码模式的装置的具体实现做限定。所所述选择编码模式的装置700包括:
处理器(processor)701,通信接口(Communications Interface)702,存储器(memory)703,总线704。
处理器701,通信接口702,存储器703通过总线704完成相互间的通信。
通信接口702,用于与其他设备进行通信;
处理器701,用于执行程序。
具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。
处理器701可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器703,用于存放程序。存储器703可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory)。程序具体用于:
提取乐音信号的3阶梅尔频率cepstrum MFCC系数;
根据所述3阶MFCC和迭代二叉树3代ID3判决树对所述乐音信号进行分类,并将分类结果存入一个FIFO数据组,所述FIFO数据组包括buffer1数据组和buffer2数据组;
对所述分类结果进行平滑处理,所述平滑处理包括语音和乐音帧间首次切换的初始状态设置、静音帧的处理、分类结果的修正、分类结果切换频度的限制;
当分类结果为打击乐时,采用频段复制编码模式CT-SBR编码模式进行高频重建;
当分类结果为管弦乐时,采用谐和频段复制编码模式hSBR进行高频重建。
所述提取乐音信号的3阶MFCC,包括:
对乐音信号进行分帧,将所述乐音信号的帧长为2048点的单帧均分为两个帧长为1024点的子帧,所述两个子帧的重叠长度为0;
利用hanning窗对每一个所述子帧进行加窗;
分别对加窗后的两个子帧的进行快速傅立叶变换FFT,使得所述乐音信号从时域映射到频率域,对频率域信号取模,得到所述频率域信号的幅度值;
利用一组梅尔频域上线性分布的三角窗滤波器对所述幅度值进行滤波;
取滤波后数值的对数,对所述对数做离散余弦DCT变换,得到3阶MFCC。
所述根据所述3阶MFCC和迭代二叉树3代ID3判决树对所述乐音信号进行分类,包括:
通过训练得到所述ID3判决树的各节点值,使用多层的if-else嵌套对所述3阶MFCC进行判断,每一帧得到一个分类结果。
所述平滑处理包括语音和乐音帧间首次切换的初始状态设置、静音帧的处理、分类结果的修正、分类结果切换频度的限制,包括:
初始化所述buffer1数据组﹑buffer2数据组和变量premode,所述变量premode表示前一帧的状态,初始化时设置所述乐音信号所有帧的状态都为管弦乐状态;
计算所述buffer1数据组的状态平均值;
根据所述状态平均值判断帧状态是否是静音帧;
当判断所述帧状态是静音帧时,则将所述buffer2数据组中的所述帧状态修改为前一帧的状态;
当判断所述帧状态不是静音帧且所述buffer1数据组中打击乐状态数量占多数时,则将所述buffer2数据组中的所述帧状态修改为打击乐状态;
当判断所述帧状态不是静音帧且所述buffer1数据组中管弦乐状态数量占多数时,则将所述buffer2数据组中的所述帧状态修改为管弦乐状态;
计算所述buffer2数据组中的状态变换次数,当所述状态变换次数超过一定阈值时,将所述帧状态修改为前一帧状态。
所述方法在步骤提取所述乐音信号的3阶MFCC还包括:
提取所述乐音信号中除3阶MFCC外的其他阶MFCC系数。
所述方法在步骤根据所述3阶MFCC和ID3判决树对所述乐音信号进行分类还包括:
根据所述3阶MFCC和其他类型的判决树对所述乐音信号进行分类,所述其他类型的判决树是除了ID3代判决树外的其他类型的判决树。
以上所述仅为本发明的优选实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明要求包含范围之内。