VQ(矢量量化)
参考文献
- http://www.data-compression.com/vq.shtml
- 语音信号处理之(三)矢量量化(Vector Quantization)
- 《语音信号处理(C++版)》_赵力
- 《数字语音处理及MATLAB仿真》_张雪英
定义
失真测度
- 定义
将输入矢量用码本重构矢量来表征时所产生的误差的度量方法。
其中,表示求期望。
欧氏距离测度
设未知模式的维特征矢量为,与码本中某个维码矢进行比较,与分别表示同一维分量,有几种常用欧氏距离测度:
均方误差
方平均误差
平均误差
绝对值平均误差
最大平均误差
加权欧氏距离测度
采用不加权的欧氏距离而对特征矢量的各个分量进行预加重
是加权系数,常用的值如下表示:
线性预测失真测度
特别适用于线性预测模型,并用最大似然准则推导出来,所以特别适用于LPC参数描述语音信号的情况。
相关的线性失真测度还包括以下两种:
对数似然比失真测度
模型失真测度
以上2种失真测度的局限性在于:只比较了两个矢量的功率谱,而没有考虑能量信息。
识别失真测度
在功率谱的基础上,考虑了能量信息
式中,及为输入信号及码矢的归一化能量,为加权因子,可以按下式选取:
的意义:当两个矢量的能量接近时,忽略能量引起的影响;当能量相差较大时,则进行线性加权;当能量超过门限时,则为某一固定值。参数、和要经过实验来确定。
矢量量化器
- 设计
根据最小失真的方法设计
式中,
-
传输速率
每个样值(每维)平均编码所需的比特数。
核心算法
-
问题设计
给定(训练集)和(码矢数目),找到能使(平均失真度)最小的(码书)和(空间划分)。关键问题是如何划分量化空间和确定量化矢量。
-
优化准则
下面是(码书)和(空间划分)相互迭代优化的过程:
递推算法——LBG
简介
LBG算法可以用于已知信源分布特性的场合,也可以用于未知信源分布特性,但要知道它的一列输出值(训练序列)。对于说话人识别来说,由于语音难以准确得到多维概率分布,所以通常使用训练序列来设计矢量量化器。
给定训练序列来设计量化器的步骤
流程图
初始码书的选定与空胞腔的处理
根据上图中的分裂法得到的具体过程:
- 疑点
为什么计算总失真度的时候,分母是,即,不仅要对样本个数取均值,还要对样本维数取均值?
改进环节
对失真测度的探讨,码书的设计,各种矢量量化系统的研究及快速搜索算法的寻找。
Matlab实现
矢量量化编码器块将每个输入列向量与码本矩阵中的码字向量进行比较。这个码本矩阵的每一列都是一个码字。块查找最接近输入列向量的码字向量并返回其从零开始的索引。此块支持所有输入端口上的浮点和定点信号。
根据《数字语音处理及MATLAB仿真》_张雪英P121页内容做些改动,此程序完成对一段语音的码本求解,输入数据是原始波形,应该稍作改进,比如更改为MFCC或LPCC等参数;也许是过于简单,码本迭代次数niter始终是2;欢迎大家指正交流:
https://gitee.com/zhouwenjun2020/Speaker-Verification-Algorithm/tree/master/VQ/%E7%A0%81%E6%9C%AC%E7%94%9F%E6%88%90