矢量量化(VQ)

作者:桂。

时间:2017-05-31  21:14:56

链接:http://www.cnblogs.com/xingshansi/p/6925955.html



前言

VQ(Vector Quantization)是一个常用的压缩技术,本文主要回顾:

  1)VQ原理

  2)基于VQ的说话人识别(SR,speaker recognition)技术

〇、分类问题

说话人识别其实也是一个分类问题:

说话人识别技术,主要有这几大类方法:

  • 模板匹配方法

这类方法比较成熟,主要原理:特征提取、模板训练、匹配。典型的有:动态时间规整DTW,矢量量化VQ等。

DTW利用动态规划的思想,但也有不足:1)过分依赖VAD技术;2)没有充分利用语音的时序动态特性,所以被HMM取代也就容易理解了。

VQ算法是数据压缩的方法。码本简历、码字搜索是两个基本问题,码本简历是从大量信号样本中训练出比较好的码书,码字搜索是找到一个和输入最匹配的码字,该方法简单,对小系统、差别明显的声音较合适。

  • 基于统计模型的分类方法

该类方法本质仍是模式识别系统,都需要提取特征,然后训练分类器,最后分类决策,典型框架:

常用的模型有:GMM、HMM、SVM、ANN、DNN或者各种联合模型等。

GMM基本框架:

类似的还有GMM-UBM(Universal background model)算法,其与GMM的区别在于:对L类整体样本训练一个大的GMM,而不像GMM对每一类训练一个GMM模型。SVM的话MFCC作为特征,每一帧作为一个样本,可以借助VAD删除无效音频段,直接训练分类。近年来也有利用稀疏表达的方法:

一、VQ原理

此段摘自Pluskid博客

Vector Quantization 这项技术广泛地用在信号处理以及数据压缩等领域。事实上,在 JPEG 和 MPEG-4 等多媒体压缩格式里都有 VQ 这一步。

  Vector Quantization 这个名字听起来有些玄乎,其实它本身并没有这么高深。大家都知道,模拟信号是连续的值,而计算机只能处理离散的数字信号,在将模拟信号转换为数字信号的时候,我们可以用区间内的某一个值去代替着一个区间,比如,[0, 1) 上的所有值变为 0 ,[1, 2) 上的所有值变成 1 ,如此类推。其这就是一个 VQ 的过程。一个比较正式一点的定义是:VQ 是将一个向量空间中的点用其中的一个有限子集来进行编码的过程。

  一个典型的例子就是图像的编码。最简单的情况,考虑一个灰度图片,0 为黑色,1 为白色,每个像素的值为 [0, 1] 上的一个实数。现在要把它编码为 256 阶的灰阶图片,一个最简单的做法就是将每一个像素值 x 映射为一个整数 floor(x*255) 。当然,原始的数据空间也并不以一定要是连续的。比如,你现在想要把压缩这个图片,每个像素只使用 4 bit (而不是原来的 8 bit)来存储,因此,要将原来的 [0, 255] 区间上的整数值用 [0, 15] 上的整数值来进行编码,一个简单的映射方案是 x*15/255 。

  不过这样的映射方案颇有些 Naive ,虽然能减少颜色数量起到压缩的效果,但是如果原来的颜色并不是均匀分布的,那么的出来的图片质量可能并不是很好。例如,如果一个 256 阶灰阶图片完全由 0 和 13 两种颜色组成,那么通过上面的映射就会得到一个全黑的图片,因为两个颜色全都被映射到 0 了。一个更好的做法是结合聚类来选取代表性的点。

实际做法就是:将每个像素点当作一个数据,跑一下 K-means ,得到 k 个 centroids ,然后用这些 centroids 的像素值来代替对应的 cluster 里的所有点的像素值。对于彩色图片来说,也可以用同样的方法来做,例如 RGB 三色的图片,每一个像素被当作是一个 3 维向量空间中的点。

用本文开头那张 Rechard Stallman 大神的照片来做一下实验好了,VQ 2、VQ 10 和 VQ 100 三张图片分别显示聚类数目为 2 、10 和 100 时得到的结果:

传统LBG算法就是K-means,基于分裂的LBG称为LBG-VQ,LBG-VQ算法以及K-means:

 二、基于VQ的说话人识别技术

基于VQ方法:例如N个说话人,每个说话人建立一个码本,共N个码本。每个码本如何建立呢?以MFCC为例,M帧的MFCC,每一帧都是一个多维N的样本点,训练数据量通常较大MxN,聚类成K类是容易实现的(K<<M),LBG-VQ的思路则是利用分裂的思想,通常按倍数递增,知道码本数量增加到:码本的误差达到预设值停止,最终的结果相当于降维:KxN,也就是码本的维度。

总结一下基于VQ的说话人识别的基本思路:

1)训练:分别针对每个说话人提取特征,利用特征训练码本(Kmeans/LBG-VQ等方法);

2)识别:提取测试数据的特征,与码本匹配,误差距离归一化并求和,最小值即为对应的说话人;

VQLBG代码

%% VQLBG Vector quantization using the Linde-Buzo-Gray algorithm
% VQLBG Vector quantization using the Linde-Buzo-Gray algorithm
%
% Inputs: d contains training data vectors (one per column)
% k is number of centroids required
%
% Output: r contains the result VQ codebook (k columns, one for each  centroids)

function r = vqlbg(d,k)
e = .01;
r = mean(d, 2);
dpr = 10000;
for i = 1:log2(k)
    r = [r*(1+e), r*(1-e)];
    while (1 == 1)
        z = disteu(d, r);
        [m,ind] = min(z, [], 2);
        t = 0;
        for j = 1:2^i
            r(:, j) = mean(d(:, find(ind == j)), 2); %#ok<FNDSB>
            x = disteu(d(:, find(ind == j)), r(:, j)); %#ok<FNDSB>
            for q = 1:length(x)
                t = t + x(q);
            end
        end
        if (((dpr - t)/t) < e)
            break;
        else
            dpr = t;
        end
    end
end
end
%% DISTEU Function
% DISTEU Pairwise Euclidean distances between columns of two matrices
%
% Input:
% x, y: Two matrices whose each column is an a vector data.
%
% Output:
% d: Element d(i,j) will be the Euclidean distance between two
% column vectors X(:,i) and Y(:,j)
%
% Note:
% The Euclidean distance D between two vectors X and Y is:
% D = sum((x-y).^2).^0.5 

function d = disteu(x, y)
[M, N] = size(x);
[M2, P] = size(y);
if (M ~= M2)
error(‘Matrix dimensions do not match.‘)
end
d = zeros(N, P);
% if (N < P)
% copies = zeros(1,P);
% for n = 1:N
% d(n,:) = sum((x(:, n+copies) - y) .^2, 1);
% end
% else
% copies = zeros(1,N);
% for p = 1:P
% d(:,p) = sum((x - y(:, p+copies)) .^2, 1)‘;
% end
% end
% d = d.^0.5;
for ii=1:N
for jj=1:P
%d(ii,jj)=sum((x(:,ii)-y(:,jj)).^2).^0.5;
d(ii,jj) = mydistance(x(:,ii),y(:,jj),2);
end
end
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
end

  识别的主要code:

v = mfcc(str{classe},fstr{classe});
% Current distance and sound ID initialization
distmin = Inf;
k1 = 0;
for ii=1:sound_number
	d = disteu(v, code{ii});
	dist = sum(min(d,[],2)) / size(d,1);
	if dist < distmin
		distmin = dist;
		k1 = ii;
	end
end
min_index = k1;

    

参考

  • http://blog.pluskid.org/?p=57
  • http://blog.csdn.net/momosp/article/details/7626971
时间: 2024-10-12 23:01:51

矢量量化(VQ)的相关文章

K-means算法和矢量量化

语音信号的数字处理课程作业——矢量量化.这里采用了K-means算法,即假设量化种类是已知的,当然也可以采用LBG算法等,不过K-means比较简单.矢量是二维的,可以在平面上清楚的表示出来. 1. 算法描述 本次实验选择了K-means算法对数据进行矢量量化.算法主要包括以下几个步骤 初始化:载入训练数据,确定初始码本中心(4个): 最近邻分类:对训练数据计算距离(此处采用欧式距离),按照距离最小分类: 码本更新:重新生成包腔对应的质心: 重复分类和码本更新步骤,知道达到最大迭代次数或满足一定

K-means矢量量化算法介绍

K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一. K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果.matlab中有kmeans聚类算法的函数可以调用,如[ldx,C,sumD,D]=kmeans(X,k)(详见matlab help kmeans).以下链接是一个用java写的聚类演示K-means demo. 对于该算法存在的缺点可以使用ISODATA(迭代自组织

一个典型的语音识别系统

一.语音识别技术 语音识别技术,广泛来说是指语意识别和声纹识别:从狭义上来说指语音语义的理解识别,也称为自动语音识别(ASR).其关键技术包括选择识别单元.语音端点检测.特征参数提取.声学模型及语音模型的建立.语音识别技术目前在桌面系统.智能手机.导航设备等嵌入式领域均有一定程度的应用.其主要技术难题是识别系统的适应性较差.受背景噪声影响较大,未来的发展方向应是无限词汇量连续语音非特定人语音识别系统. (1)信号处理及特征提取模块 该模块的主要任务是从输入信号中提取特征,供声学模型处理.同时,它

Speech Bandwidth Extension Using Generative Adversarial Networks

论文下载地址.博客园文章地址. 摘要 语音盲带宽扩展技术已经出现了一段时间,但到目前为止还没有出现广泛的部署,部分原因是增加的带宽伴随着附加的工件.本文提出了三代盲带宽扩展技术,从矢量量化映射到高斯混合模型,再到基于生成对抗性网络的深层神经网络的最新体系结构.这种最新的方法在质量上有了很大的提高,并证明了基于机器学习的盲带宽扩展算法在客观上和主观上都能达到与宽带编解码器相当的质量.我们相信,盲带宽扩展现在可以达到足够高的质量,以保证在现有的电信网络中部署. 关键词:盲源带宽扩展,人工带宽扩展,生

2000_narrowband to wideband conversion of speech using GMM based transformation

论文地址:基于GMM的语音窄带到宽带转换 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/12151027.html 摘要 在不改变现有通信网络的情况下,利用窄带语音重建宽带语音是一个很有吸引力的问题.本文提出了一种从窄带语音中恢复宽带语音的新方法.该方法基于高斯混合模型(GMM)将输入语音的窄带频谱包络变换为宽带频谱包络,并采用联合密度估计技术对其参数进行计算.然后利用重构后的谱包络,利用LPC合成器对低频和高频语音信号进行重构.本文还提出了

视频编解码学习之三:变换,量化与熵编码

第6章 变换编码 1. 变换编码 变换编码的目的 去除空间信号的相关性 将空间信号的能力集中到频域的一小部分低频系数上 能量小的系数可通过量化去除,而不会严重影响重构图像的质量 块变换和全局变换 块变换:离散余弦变换(Discrete Cosine Transform,DCT),4x4,8x8,16x16 全局变换:小波变换(Wavelet) 变换的能量集中特性 DCT编码 2. 变换类型 K-L变换 傅里叶变换 余弦变换 小波变换 3. KL变换 最优变换 基函数根据具体图像而确定 没有快速算

.net 开发的Excel 1.0.0.5版 程序

1.2.2 语音编码 语音编码的目的是在保证一定语音质量的前提下,尽可能降低编码比特率,以节省频率资源. 语音编码技术的鼻祖: 研究开始于1939年军事保密通信的需要,贝尔电话实验室的Homer Dudley提出并实现了在低频带宽电话电报电缆上传输语音信号的通道声码器. 20世纪70年代:国际电联(ITU-T,原CCITT)64kbit/s脉冲编码调制(PCM)语音编码算法的G.711建议,它被广泛应用于数字通信.数字交换机等领域,从而占据统治地位. 1980年:美国政府公布了一种2.4kbit

http://blog.rainy.im/2015/11/25/extract-color-themes-from-images/

许多从自然场景中拍摄的图像,其色彩分布上会给人一种和谐.一致的感觉:反过来,在许多界面设计应用中,我们也希望选择的颜色可以达到这样的效果,但对一般人来说却并不那么容易,这属于色彩心理学的范畴(当然不是指某些伪神棍所谓的那种).从彩色图像中提取其中的主题颜色,不仅可以用于色彩设计(参考网站:Design Seeds),也可用于图像分类.搜索.识别等,本文分别总结并实现图像主题颜色提取的几种算法,包括颜色量化法(Color Quantization).聚类(Clustering)和颜色建模的方法(颜

数字语音信号处理学习笔记——绪论(2)

1.2.2 语音编码 语音编码的目的是在保证一定语音质量的前提下,尽可能降低编码比特率,以节省频率资源. 语音编码技术的鼻祖: 研究开始于1939年军事保密通信的需要,贝尔电话实验室的Homer Dudley提出并实现了在低频带宽电话电报电缆上传输语音信号的通道声码器. 20世纪70年代:国际电联(ITU-T,原CCITT)64kbit/s脉冲编码调制(PCM)语音编码算法的G.711建议,它被广泛应用于数字通信.数字交换机等领域,从而占据统治地位. 1980年:美国政府公布了一种2.4kbit