矢量量化(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^ir(:, 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);endendif (((dpr - t)/t) < e)break;elsedpr = t;endend
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_numberd = disteu(v, code{ii});dist = sum(min(d,[],2)) / size(d,1);if dist < distmindistmin = dist;k1 = ii;end
end
min_index = k1;

    

参考

  • http://blog.pluskid.org/?p=57
  • http://blog.csdn.net/momosp/article/details/7626971

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超前进位加法器

超前进位加法器 题目描述 求两个四位的数据编写一个四位的超前进位加法器,建议使用子模块 提示:超前进位加法器的位公式如下 这里‘+’ ‘’符号不是‘加’和‘乘’,是‘或’和 ‘与’ 题目解析 题目要求 4级可以表示为如下,这里P和G是传播信号和生成信号: `timesc…

哪些职业申请贷款比较难?

贷款一般会重点考核借款人的收入&#xff0c;信用&#xff0c;资产&#xff0c; 工作等基本信息&#xff0c;有时候明明借款人有着较高的收入&#xff0c;信用也良好&#xff0c;可是最后还是被拒绝了。这其中有很大一部分是跟借款人的职业有一定的关系。那到底哪些职业的人贷款…

常用音频软件:Wavesufer

作者&#xff1a;桂。 时间&#xff1a;2017-06-02 10:23:39 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6932408.html 前言 只列举两个自己用过的&#xff08;wavesufer和praat&#xff09;&#xff0c;如果有其他更好的软件&#xff0c;还希望各位留下链接。 本…

等额本息和等额本金,哪个还款方式更划算?

贷款还款方式有很多种&#xff0c;其中等额本息和等额本金最常见的两种还款方式。但是有很多朋友对这两种还款方式没有概念&#xff0c;甚至分不清这两者到底有什么区别&#xff0c;所以今天我们就跟大家来详细解说下&#xff0c;什么是等额本金&#xff0c;什么是等额本息&…

全 加 器

全加器 题目描述 请用题目提供的半加器实现全加器电路 timescale 1ns/1nsmodule add_half(input A ,input B ,output wire S ,output wire C );assign S A ^ B; assign C A & B; endmodule/*****************…

申请表怎么填才能提高信用卡额度?

对于大多数朋友来说&#xff0c;申请信用卡都希望下卡的额度能高一些&#xff0c;但是对于很多人来说&#xff0c;最终下卡的额度一般在5000-2万之间比较多。其实信用卡的额度和申请人的综合评分有很大的关系&#xff0c;综合评分越高额度可能会越大&#xff0c;而综合评分与申…

串行进位加法器

串行进位加法器 题目描述 ② 请用全加器电路①实现串行进位的4位全加器电路 题目解读 可将4个全加器串行相连,实现四位数串行进位加法器。原理图如下: `timescale 1ns/1nsmodule add_half(input A ,input B ,output wire S ,…

个人贷款5级分类,来看看你是哪一级

第一类&#xff08;特优客户&#xff09;年龄&#xff1a;30周岁——50周岁之间。婚姻&#xff1a;已婚且家庭关系稳定。职业&#xff1a;副处级以公务员、事业单位正式编制人员&#xff0c;副团级以上军干部&#xff0c;学校领导人员&#xff0c;二甲以上医院副主治级以上正式…

异步复位同步释放

异步复位同步释放 题目描述 请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理 信号示意图 题目解读 复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引…

贷款不还会有什么后果?

我们经常听到一些贷款的朋友说&#xff0c;贷款是凭借自己的能力贷的&#xff0c;为什么要还&#xff1f;可能这句话是贷款的朋友拿来开玩笑的&#xff0c;但是如果贷款借了之后不还&#xff0c;那就将会面临很大的影响。一、高额罚息贷款合同一般都会有违约条例及有关罚息的规…

贷款都有哪些类型?

没经常接触贷款的朋友&#xff0c;如果初次接触贷款&#xff0c;经常会听到无抵押贷款&#xff0c;抵押贷款&#xff0c;质押贷款等等&#xff0c;这么多贷款类型让人摸不着头脑&#xff0c;那么究竟市场有多少贷款品种呢&#xff1f;一、无抵押贷款无抵押贷款顾名思义就是不需…

贷款用途有什么限制?非法用途有什么后果?

大家都知道&#xff0c;贷款审核的时候是必须核实贷款用途的&#xff0c;借款人贷款必须用于正常的用途&#xff0c;不能用于一些严禁的用途&#xff1a;1、不能用于黄、赌、毒黄赌毒本身就是法律禁止&#xff0c;更重要的是一旦贷款涉及黄赌毒&#xff0c;基本是有去无回的&am…

为什么个体户贷款那么难

虽然贷款机构没有明确表示个体工商户不能贷款&#xff0c;但是等真正去申请的时候贷款机构又会摆出各种条件&#xff0c;这不符合&#xff0c;那不符合&#xff0c;最终的结果是个体工商户很难贷到款。那为什么贷款机构不怎么乐意给个体工商户贷款呢&#xff1f;是对个体工商户…

任意奇数倍时钟分频

任意奇数倍时钟分频 题目描述 编写一个模块,对输入的时钟信号clk_in,实现任意奇数分频,要求分频之后的时钟信号占空比为50%。模块应包含一个参数,用于指定分频的倍数。 模块的接口信号图如下: 题目解读 题目要求实现任意奇数倍数的分频,实现分频的基本方法是采用计数器…

全款买房划算,还是贷款划算?

买房&#xff0c;很多人可能都在纠结到底是全款买房好呢&#xff0c;还是按揭贷款好呢&#xff0c;今天我们就来一起探讨下。一、全款买房优势&#xff1a;1、手续比较方便&#xff0c;不用准备太多的材料证明。2、不用支付银行利息&#xff08;贷款要多支付&#xff09;3、可以…

ARM Neon 简介

“ARM Advanced SIMD”,nick-named “NEON”, it provides: (1)、A set of interesting scalar/vectorinstructions and registers(the latter are mapped to the same chip area as theFPU ones), comparable to MMX/SSE/3DNow! in the 86 world; (2)、VFPv3-D32 as a…

简单使用Modelsim跑个仿真

简单使用Modelsim跑个仿真 第一步:打开Modelsim 第二步:点击File->New->Project(注意等待加载完了再去操作) 第三步:输入工程名称->选择工程文件->ok 第四步:添加激励文件和设计文件

企业贷款还不上,股东有偿还责任吗?

现在是一个全民创业的时代&#xff0c;创业既有个人单打独斗的&#xff0c;也有抱团合伙的。而且创业始终离不开一个话题&#xff0c;那就是钱&#xff0c;刚开始创业的企业大多数都是没有钱的&#xff1b;没有钱怎么办呢&#xff1f;那就借&#xff01;借钱确实可以解决企业发…

农村房屋能抵押做贷款吗?

在贷款过程中&#xff0c;很多时候贷款机构都会问借款人有没有抵押物&#xff1f;如果有抵押物不论是对于抵押贷款还是信用贷款都是有很大的帮助。所以经常出现很多借款人提到农村的房屋算抵押物吗&#xff1f;能不能作抵押做贷款呢&#xff1f;确实对于很多人来说&#xff0c;…

数字电路与逻辑设计笔记

数字电路与逻辑设计笔记 变量和常量的关系式 根据真值表写表达式 以真值表内输出端“1”为准 第一步&#xff1a;从真值表内找输出端为“1”的各行&#xff0c;把每行的输入变量写成乘积形式;遇到“0”的输入变量上加非号。 第二步&#xff1a;把各乘积项相加&#xff0c;即…