音频信号处理——音频矢量化
标签(空格分隔): 音频处理
一、简介
矢量量化(VQ,Vector Quantization)是一种极其重要的基于块编码规则的有损数据压缩方法。广泛应用于语音编码、语音识别和语音合成等领域。事实上,在 JPEG 和 MPEG-4 等多媒体压缩格式里都有 VQ。它的基本思想是:将若干个标量数据组构成一个矢量,然后在矢量空间给以整体量化,从而压缩了数据而不损失太多信息。
在以前,VQ运用的一个难点在于它要要解决一个多维积分(multi-dimensional integration)的问题。后来,在1980年,Linde, Buzo和Gray(LBG,这个缩写也是LBG算法的命名)提出一种基于训练序列的VQ设计算法,对训练序列的运用绕开了多维积分的求解,使得世上又诞生了一种经典的被世人称为LBG-VQ的算法!
二、VQ
VQ 是一种近似逼近,类似于将 double 转化为二进制的 Int。举个例子,可以看我的地图,中国有很多的城市,如果一一列举会很长,但是我们有省啊。一提海淀肯定是北京,于是数据就被压缩了。
VQ问题可以这样描述:给定一个已知统计属性的矢量源(也就是训练样本集,每一个样本是一个矢量)和一个失真测度。还给定了码矢的数量(也就是我们要把这个矢量空间划分为多少部分,或者说量化为多少种值),然后寻找一个具有最小平均失真度(数据压缩,肯定是失真越小越好)的码书(所有码矢的集合,也就是上面的那些省的省会)和空间的划分(图中所有省的边境)。
设训练样本的训练序列(训练集)为 T=x1,x2,...,xM ,M 为训练样本(矢量源)的个数。
如果 M 足够大,那么训练集就会包含数据源的所有统计特性。设矢量是 K 维:
假设码矢的数目是
N
(有
与码矢 cn 对应的编码区域为 Sn ,然后将空间的划分为: P=S1,S2,...,SN (S 为省)。
如果源矢量
xm
在
Sn
内,那么其近似
Q
为
假设采用均分误差失真度量(也可以用其他),那么平均失真度表示如下:
于是乎,VQ 问题就是:
给定T(训练集)和N(码矢数目),找到能使D(平均失真度)最小的C(码书)和P(空间划分)。
四、优化标准
如果
C
和
4.1 最近邻条件(Nearest NeighboCondition):
即城市离哪个省会进,就属于哪个省(这和显示生活不大一样,大家明白这个意思就好了)。那如果到每个省会距离一样怎么办?在边界处怎么划分呢?就用决策方法(any tie-breaking procedure)。
4.2 质心条件(Centroid Condition):
这个条件要求码矢 cn 是编码区域 Sn 内所有的训练样本向量的平均向量。在实现中,需要保证每个编码区域至少要有一个训练样本向量,这样上面这条式的分母才不为0。
五、LBG 算法
LBG 是一个迭代算法,对训练序列的运用绕开了多维积分的求解,他的迭代过程就是交替调整
P
和
算法流程
1、给出训练集
T
,并给出固定的失真阈值
2、先让
N=1
(码矢数量),将这一个码矢设置为所有训练样本的平均值:
然后计算总失真度:
3、分裂:对
i=1,2,...,N
,码矢为:
使 N′=2N ,就是每个码矢分裂(乘以扰乱系数1+ɛ和1-ɛ)为两个,这种每一次分裂后的码矢数量就是前一次的两倍。
4、迭代
1)对于训练集
T
中的每一个训练样本
。
2)对于n=1,2,…,N,通过以下方式更新所有码矢:
也就是将所有属于 cn 所在的编码区域 Sn 的训练样本取平均作为这个编码区域的新的码矢。
3)迭代计数器加1:i=i+1.
4)计算在现阶段的C和P基础上的总失真度:
5)如果前后两次失真度的差值与上次失真度的比值大于 ε ,则系统继续迭代。如果小于 ε ,则系统停止迭代。
6)得到当前 N 下的最优码矢:
5、重复步骤3和4至到码矢的数目达到要求的个数。
六、程序分析:
coming soon
七、参考资料:
[1]http://www.data-compression.com/vq.html
[2]漫谈Clustering (番外篇): Vector Quantization: http://blog.pluskid.org/?p=57
[3] lbgvq.c — C program forLBG VQ design