发明内容
本发明实施例提供一种音频数据的编码方法及装置,用以降低在便携式多媒体播放器中实现Ogg/Vorbis编码的复杂度。
发明实施例提供的具体技术方案如下:
一种音频数据的编码方法,包括:
接收需要进行编码的音频数据;
对所述音频数据进行改良的离散余弦变换,即MDCT变换;
根据所述MDCT变换结果采用公式y=a+bx+c(x)计算掩蔽曲线,其中,
c(x)为根据预设的掩蔽补偿表获得的掩蔽补偿值,xi为谱线下标,yi为相应谱线点的能量,N表示数据总数;
根据掩蔽曲线采用分段线性方法计算产生基底曲线;
根据所述掩蔽曲线和基底曲线计算产生的频谱残差;
对所述频谱残差进行声道耦合;
对所述声道耦合的结果进行矢量化计算;
将所述矢量化计算后获得的数据按照指定的采样率和比特率进行编码,获得编码后的音频数据。
一种音频编码装置,包括:
离散余弦变换单元,用于接收需要进行编码的音频数据,并对所述音频数据进行改良的离散余弦变换,即MDCT变换;
第一计算单元,用于根据所述MDCT变换的结果采用公式y=a+bx+c(x)计算掩蔽曲线,其中,
c(x)为根据预设的掩蔽补偿表获得的掩蔽补偿值,xi为谱线下标,yi为相应谱线点的能量,N表示数据总数;
第二计算单元,用于根据掩蔽曲线采用分段线性方法计算产生基底曲线;
第三计算单元,用于根据所述掩蔽曲线和基底曲线计算产生的频谱残差;
耦合单元,用于对所述频谱残差进行声道耦合;
矢量化单元,用于对所述声道耦合的结果进行矢量化计算;
编码单元,用于将所述矢量化计算后获得的数据按照指定的采样率和比特率进行编码,获得编码后的音频数据。
一种音频处理设备,包括上述的音频编码装置。
综上所述,本发明实施例中,采用了新设计的一条掩蔽曲线代替了现有技术下计算的音调掩蔽曲线和噪声掩蔽曲线,从而有效减少了Ogg/Vorbis编码的计算量;另一方面,采用了指定的采用率和比特率对矢量化后的数据进行编码,从而有效减少了Ogg/Vorbis编码所占用的程序空间。这样,便降低了Ogg/Vorbis编码的计算复杂度和空间复杂度,进而在便携式设备中实现了Ogg/Vorbis编码。
具体实施方式
鉴于要在便携式多媒体播放器中完全实现Ogg/Vorbis编码具有很大的难度,本发明实施例中,为了降低Ogg/Vorbis编码的实现复杂度,对Ogg/Vorbis编码流程进行了适当地优化,具体为:接收需要进行编码的音频数据,对所述音频数据进行改良的离散余弦变换,即MDCT变换,再根据所述MDCT变换结果计算掩蔽曲线,根据掩蔽曲线采用分段线性方法计算产生基底曲线,以及根据所述掩蔽曲线和基底曲线计算产生的频谱残差,接着,对所述频谱残差进行声道耦合,并对所述声道耦合的结果进行矢量化计算,最后,将所述矢量化计算后获得的数据按照指定的采样率和比特率进行编码,获得编码后的音频数据。
通过大量数据实验发现,优化Ogg/Vorbis编码程序在如下几个方面,可以减少大量的计算量和程序空间,而编码完的Ogg/Vorbis音频信号在音质上并没有下降很多,一般情况下与原来的标准OGG程序编码后的结果基本相同。
1:优化心理声学模型单元,噪声掩蔽曲线和音调掩蔽曲线合二为一,同时根据不同采样率和比特率修改掩蔽补偿表,即根据采样率和比特率在预先存储的多个掩蔽补偿表(可以是通过实验提前得到)中确定相应的掩蔽补偿值,这个掩蔽补偿表得到是理论依据人们对声音频率的敏感度,因为人耳对低频声音敏感,而对高频不敏感,所以补偿的时候就是对增加对低频补偿,减少对高频补偿,因而补偿表的值就是从低频到高频逐渐减少。用该表对掩蔽曲线进行补偿,使得一条掩蔽曲线就能达到原来音调掩蔽曲线和噪声掩蔽曲线两条曲线近似一样的效果。
2:在相同采样率的不同比特率下都采用相同的码书进行编码,从而减少程序的运算量,也节省了存储空间。
码书(Codebook)是矢量量化的关键技术之一,通常以表格的形式记载,通过码书查表得到到的数据就是码字,用以实现数据压缩。
也就是说,在本发明中,只存储与特定采样率对应的一个码书,在进行矢量量化处理时,采用相同的码书进行编码。作为替代,也可以只存储少数几个码本,在进行矢量量化处理时,从其中选一个最接近的进行编码,或者选一个最接近的后再进行必要修改然后再进行编码。
下面结合附图对本发明优选的实施方式进行详细介绍。
参阅图2所示,本发明实施例中,用于实现Ogg/Vorbis编码的音频编码装置包括离散余弦变换单元10、第一计算单元11、第二计算单元12、第三计算单13、耦合单元14、矢量化单元15和编码单元16,其中,
离散余弦变换单元10,用于接收需要进行编码的音频数据,并对所述音频数据进行改良的离散余弦变换,即MDCT变换;
第一计算单元11,用于根据所述MDCT变换的结果计算掩蔽曲线;
第二计算单元12,用于根据掩蔽曲线采用分段线性方法计算产生基底曲线;
第三计算单元13,用于根据所述掩蔽曲线和基底曲线计算产生的频谱残差;
耦合单元14,用于对所述频谱残差进行声道耦合;
矢量化单元15,用于对所述声道耦合的结果进行矢量化计算;
编码单元16,用于将所述矢量化计算后获得的数据按照指定的采样率和比特率进行编码,获得编码后的音频数据。
基于上述原理,参阅图3所示,本发明实施例中,实现Ogg/Vorbis编码的详细流程如下:
步骤300:接收需要进行编码的音频数据;
步骤310:对音频数据进行MDCT变换。
本实施例中,使用50%重叠的改进的离散余弦变换MDCT作为时频转换的手段,具体公式如下:
其中x[n]为时域采样点,X[k]是频域系数,h(n)是窗函数,N是帧长,即窗口长度。
步骤320:根据MDCT变换结果计算掩蔽曲线。
本发明实施例中,采用以下公式计算掩蔽曲线:
上述公式是根据执行MDCT变换后输出频谱系数的对数值,按线性回归分析得到相应的近似平滑曲线,最小平方误差的线性回归方程为:y=a+bx+c(x),c(x)可以通过掩蔽补偿表查值得到,其中,xi表示谱线下标,yi表示相应谱线点的能量,N表示回归应用的数据总数。根据平滑曲线及掩蔽补偿值,得到最终的掩蔽曲线。
由于人耳对高频不敏感,因此,本实施例中,为了降低补偿计算量,可以将掩蔽补偿表中增加设置的低频补偿值,以及减少高频补偿值,即补偿值按照从低频到高频的顺序逐步递减。具体如下:
步骤330:根据掩蔽曲线采用分段方法计算产生基底曲线。
其具体操作步骤如下:
例如,对短块使用11个点线性(10折线)逼近频谱函数包络,而长块使用33个点线性逼近,且两种情况的算法完全相同,下面以基底1算法中短块情况为例详细描述。
假设频率轴划分为数组[0,1,2,4,7,13,20,30,44,62,128]。
1)计算两端0和128点幅值来表示整个频谱的情况;
2)从13点将此线段分割成两个线段,分别计算3个点的幅值,并以两个线段近似表示频谱包络;
3)依次类推,分别以下列顺序分割线段:13,2,4,1,44,30,62,20,最后得到10段折线表示整个频谱包络。
4)把两端的值以绝对值表示,中间值通过预测以差分方式表示。
5)通过这11个点线性内插得到128点的基底曲线。
步骤340:根据掩蔽曲线和基底曲线计算产生的频谱残差。
通过FLOOR1_fromdB_INV_LOOKUP[256]这个公式来转换:
residue[i]=mdct*FLOOR1_fromdB_INV_LOOKUP[codedflr]
其中mdct为MDCT变换后输出频谱系数的对数值,codedflr为基底曲线值,residue为频谱残差值。
步骤350:对频谱残差进行声道耦合。
例如,以正方形极坐标耦合为例。
Ogg/Vorbis编码有使用基于单位正方形,完成从左右声道直角坐标到正方形极坐标的一一映射(参阅图3B所示),这样通过简单加减即可完成映射运算。如:在解码时,从码流中解出幅度(magnitude)和角度(angle)值,可以通过下面的算法恢复左右声道信息(假设A/B是左/右或右/左,这个取决于编码器):
步骤360:对执行声道耦合后的结果进行矢量量化计算。
例如,矢量量化操作的具体步骤为:残差信号排列,对每个声道分成块,对每个块分类,然后对分类编码,最后对数据块本身进行矢量量化(VQ)编码。相对于三种不同残差模式,残差矢量也有不同的交织和分割方法。要编码的残差矢量必须具有相同长度,且编码结构要满足以下基本假设:
1)根据具体的配置把每个声道残差矢量分割成多个等长的数据块。
2)每个声道矢量的每个分区都有一个分类号,用来指明使用那个VQ码书量化;每个分区的分类号本身构成一个矢量,类似于残差矢量,将其组合编码来提高编码效率,分类号矢量也被划分成块。分类块中每个整数标量元素组合构造成一个标量来表示这个块中的分类号,如下图所示。
3)残差矢量值可以在单个过程(n长矢量为一个过程)中单独编码,单更有效的码书设计要求对几个过程相应的残差矢量累加构成新的矢量,然后使用多个VQ码书编码。由于多个过程中同一个分区的分类值相同,因此分类码字可以仅在第一个过程时编码。
步骤370:将经过矢量化计算后获得的数据按照指定的采用率和比特率进行编码,获得编码后的音频数据。
上述获得的的编码后的音频数据便是所需的Ogg/Vorbis编码格式的音频数据。
下面对采用现有技术实现Ogg/Vorbis编码,和采用本发明实施例实现Ogg/Vorbis编码的技术效果进行比较说明:
例如,设置第一歌曲的采样率为8KHz,比特率为128kbps,那么,采用现有技术实现Ogg/Vorbis编码后得到的频谱测试图如图4A所示,采用本发明实施例实现Ogg/Vorbis编码后得到的频谱测试图如图4B所示。
又例如,设置第二歌曲的采样率为16KHz,比特率为128kbps,那么,采用现有技术实现Ogg/Vorbis编码后得到的频谱测试图如图5A所示,采用本发明实施例实现Ogg/Vorbis编码后得到的频谱测试图如图5B所示。
又例如,设置第三歌曲的采样率为32KHz,比特率为128kbps,那么,采用现有技术实现Ogg/Vorbis编码后得到的频谱测试图如图6A所示,采用本发明实施例实现Ogg/Vorbis编码后得到的频谱测试图如图6B所示。
又例如,设置第四歌曲的采样率为44.1KHz,比特率为128kbps,那么,采用现有技术实现Ogg/Vorbis编码后得到的频谱测试图如图7A所示,采用本发明实施例实现Ogg/Vorbis编码后得到的频谱测试图如图7B所示。
从上述各频谱测试图的比较结果可以看出,采用现有技术实现Ogg/Vorbis编码后的音频信号的音质,与采用本发明实施例实现Ogg/Vorbis编码后得到的音频信号的音质相比较,低频基本一致,并且没有出现明显的高频衰减,因此,可以说,两者的编码效果基本一致,人耳主观听觉上不能听出两者区别。
表1
基于上述实施例,本实施例中,为了进一步节省计算量,在特定的采样率下,针对不同的比特率,均采用相同的码书进行Ogg/Vorbis编码,可以达到与采用不同码书进行Ogg/Vorbis编码基本相同的技术效果。
例如,参阅表1所示,本发明实施例中,采用44100的采样率时,会采用同一码书0进行Ogg/Vorbis编码;采用32000采样率时,会采用同一码书1进行Ogg/Vorbis编码,以此类推。
而现有技术中,在同一采样率下,针对不同的比特率,会采用相应的码书0、码书1、码书2、码书3或码书4进行Ogg/Vorbis编码。
以44100采样率为例,如表1所示,在44100/128的采样率/比特率下,采用现有技术通过码书0编码后得到的码流的实际比特率为128kbps,而采用本实施例方案通过码书0编码后得到的码流为135kbps;在44100/128的采样率/比特率下,采用现有技术通过码书1编码后得到的码流的实际比特率为256kbps,而采用本实施例方案通过码书0编码后得到的码流为247kbps;在44100/320的采样率/比特率下,采用现有技术通过码书2编码后得到的码流的实际比特率为320kbps,而采用本实施例方案通过码书0编码后得到的码流为318kbps。
从上述三种情况可以看出,在同一采样率下,采用相同的码书进行操作后,Ogg/Vorbis编码的比特率变化很小,基本与标准值(采用不同码书)相一致,即采用不同的码书进行编码Ogg/Vorbis编码,与采用相同的码书进行Ogg/Vorbis编码,其实现效果基本相同,人耳是无法区别出其中的差异的。
实际应用中,音频编码装置可以作为独立装置,也可以设置在音频处理设备内部(如图8所示),作为音频处理设备的功能模块之一,在此不再赘述。
综上所述,实际应用中,在便携式多媒体播放器中实现Ogg/Vorbis编码难度大,其具体表现在两个方面:计算量大,对程序空间要求大。而在上述实施例中,对Ogg/Vorbis编码方法做出了适当简化,对比图1与图3A可以看出,在步骤300-步骤350中,采用了新设计的一条掩蔽曲线代替了现有技术下计算的音调掩蔽曲线和噪声掩蔽曲线,从而有效减少了Ogg/Vorbis编码的计算量;另一方面,在步骤360-步骤370中,采用了指定的采用率和比特率对矢量化后的数据进行编码,从而有效减少了Ogg/Vorbis编码所占用的程序空间。这样,便通过上述流程降低了Ogg/Vorbis编码的计算复杂度和空间复杂度,进而在便携式设备中实现了Ogg/Vorbis编码。
显然,本领域的技术人员可以对本发明中的实施例进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明实施例中的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明中的实施例也意图包含这些改动和变型在内。