一、简介

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删除无效音频段,直接训练分类。近年来也有利用稀疏表达的方法:

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

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

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

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

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

二、源代码

17 / 18
% Demo script that generates all graphics in the report and demonstrates our results.
[s6 fs6] = wavread('s6.wav');
[s1 fs1] = wavread('s1.wav');
%Question 2
disp('> Question 2:画出原始语音波形');
t = 0:1/fs1:(length(s1) - 1)/fs1;
plot(t, s1), axis([0, (length(s1) - 1)/fs1 -0.4 0.5]);
title('原始语音s1的波形');
xlabel('时间/s');
ylabel('幅度')
pause
close all
%Question 3 (linear)
disp('> Question 3: 画出线性谱');
M = 100;%当前帧数
N = 256;%帧长
frames = blockFrames(s1, fs1, M, N);%分帧
t = N / 2;
tm = length(s1) / fs1;
subplot(121);
imagesc([0 tm], [0 fs1/2], abs(frames(1:t, :)).^2), axis xy;
title('能量谱(M = 100, N = 256)');
xlabel('时间/s');
ylabel('频率/Hz');
colorbar;
%Question 3 (logarithmic)
disp('> Question 3: 画出对数谱');
subplot(122);
imagesc([0 tm], [0 fs1/2], 20 * log10(abs(frames(1:t, :)).^2)), axis xy;
title('对数能量谱(M = 100, N = 256)');
xlabel('时间/s');
ylabel('频率/Hz');
colorbar;
D=get(gcf,'Position');
set(gcf,'Position',round([D(1)*.5 D(2)*.5 D(3)*2 D(4)*1.3]))
pause
close all
%Question 4
disp('> Question 4: 画出不同帧长语谱图');
lN = [128 256 512];
u=220;
for i = 1:length(lN)N = lN(i);M = round(N / 3);frames = blockFrames(s1, fs1, M, N);t = N / 2;temp = size(frames);nbframes = temp(2);u=u+1;subplot(u)imagesc([0 tm], [0 fs1/2], 20 * log10(abs(frames(1:t, :)).^2)), axis xy;title(sprintf('能量对数谱(第 = %i帧, 帧长 = %i, 帧数 = %i)', M, N, nbframes));xlabel('时间/s');ylabel('频率/Hz');colorbar
end
D=get(gcf,'Position');
set(gcf,'Position',round([D(1)*.5 D(2)*.5 D(3)*1.5 D(4)*1.5]))
pause
close all
%Question 5
disp('> Question 5: Mel空间');
plot(linspace(0, (fs1/2), 129), (melfb(20, 256, fs1))');
title('Mel滤波');
xlabel('频率/Hz');
pause
close all
%Question 6
disp('> Question 6: 修正谱');
M = 100;
N = 256;
frames = blockFrames(s1, fs1, M, N);
n2 = 1 + floor(N / 2);
m = melfb(20, N, fs1);
z = m * abs(frames(1:n2, :)).^2;
t = N / 2;
tm = length(s1) / fs1;
subplot(121)
imagesc([0 tm], [0 fs1/2], abs(frames(1:n2, :)).^2), axis xy;
title('原始能量谱');
xlabel('时间/s');
ylabel('频率/Hz');
colorbar;
subplot(122)
imagesc([0 tm], [0 20], z), axis xy;
title('通过mel倒谱修正后的能量谱');
xlabel('时间/s');
ylabel('滤波器数目');
colorbar;
D=get(gcf,'Position');
set(gcf,'Position',[0 D(2) D(3)*2 D(4)])
pause
close all
%Question 7
disp('> Question 7: 2D plot of accustic vectors');
c1 = mfcc(s1, fs1);
c2 = mfcc(s2, fs2);
plot(c1(5, :), c1(6, :), 'or');
hold on;
plot(c2(5, :), c2(6, :), 'xb');
xlabel('5th Dimension');
ylabel('6th Dimension');
legend('说话人1', '说话人2');
title('2D plot of accoustic vectors');
pause
close all
%Question 8
disp('> Question 8: 画出已训练好的VQ码本')
d1 = vqlbg(c1,16);
d2 = vqlbg(c2,16);
plot(c1(5, :), c1(6, :), 'xr')
hold on

三、运行结果

【语音识别】基于VQ特定人孤立词语音识别matlab 源码相关推荐

  1. 【语音识别】基于VQ特定人孤立词语音识别附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  2. 【说话人识别】基于MFCC特征结合VQ特定人孤立词语音识别附matlab代码

    1 简介 伴随着计算机技术和信息化技术的蓬勃发展,人机交互技术扮演着越来越重要的角 色,人类希望计算机和人之间的交互能够突破鼠标和键盘等外围设备的局限,希望以一个智能化的方式使得计算机和人之间能够畅通 ...

  3. 《数字语音处理》- 实验4. 基于MATLAB与VQ的特定人孤立词语音识别研究(附代码)

    声明 本文仅在CSDN发布,未经允许请勿转载或引用! 正版链接: https://blog.csdn.net/meenr/article/details/117629850 MATLAB基于VQ的特定 ...

  4. 【语音识别】基于matlab电话按键语音识别(含按键录音)【含Matlab源码 1752期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[语音识别]基于matlab电话按键语音识别(含按键录音)[含Matlab源码 1752期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  5. 【钟表识别】基于计算机视觉实现钟表时间识别含Matlab源码

    1 简介 基于计算机视觉实现钟表时间识别含Matlab源码​ 2 部分代码 function [time_clock]= read(filepath) I = imread(filepath); [e ...

  6. gadecod matlab,【预测模型】基于遗传算法优化BP神经网络房价预测matlab源码

    一.简介 1 遗传算法概述 遗传算法(Genetic Algorithm,GA)是进化计算的一部分,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法 ...

  7. stm32语音识别文字显示_STM32实现孤立词语音识别系统

    语音识别是机器通过识别和理解过程把人类的语音信号转变为相应文本或命令的技术,其根本目的是研究出一种具有听觉功能的机器.本设计研究孤立词语音识别系统及其在STM32嵌入式平台上的实现.识别流程是:预滤波 ...

  8. 基于Python实现的孤立词语音识别系统

    1 任务介绍 语音识别是通往真正的人工智能的不可缺少的技术.尽管能真正听懂人类说话的智能机器任然在未来不可捉摸的迷雾之中,但我们必须先解决如何识别出人类语音中包含的自然语言信息的问题.而数字信号处理技 ...

  9. 基于KNN-凸包提取轮廓点(matlab源码及示例)

    KNN凸包算法提取平面点云轮廓点结果如下: 其可以很好地将轮廓点进行提取出,且为有序点云 源码下载网站: 基于KNN凸包算法提取二维点云边缘点,其提取的边缘点为有序点云-数据集文档类资源-CSDN下载

最新文章

  1. Java取模函数,再不刷题就晚了!
  2. 微信小程序--后台交互/wx.request({})方法/渲染页面方法 解析
  3. android学习之Service
  4. Python(2)-- 运算符
  5. 【pytorch学习】四种钩子方法(register_forward_hook等)的用法和注意点
  6. SAP 电商云 Spartacus UI 和 SmartEdit 本地测试环境
  7. Spark性能优化的10大问题及其解决方案
  8. 《小艾上班记》—— 读后总结
  9. MOSS2007-学习笔记-备忘录-单点登录-(1)-我的网站'?
  10. 控制系统数字仿真与CAD-第四次实验-附完整代码
  11. 定位Oops的具体代码行[zt]
  12. 网络流之P3254 圆桌问题
  13. 医院信息系统源码 HIS源码
  14. 机械计算机运算能力,人计算与机器计算的差别
  15. lotus-miner 元数据备份
  16. python经典教程游戏软件_手把手带领大家用Python来做经典游戏 — 贪吃蛇
  17. 玩转软路由 篇二:软路由中Esxi 7.0 安装教程和避坑指南
  18. 视频配音怎么配出好听的声音?试试这三个视频配音方法
  19. [新版新概念英语1-4册全部视频和课本]
  20. Linux 内核编译安装

热门文章

  1. R语言学习—添加回归模型拟合线(一)
  2. 微信热修复-同事写好后拉下来代码就报错了
  3. IntelliJ IDEA快速入门 | 第四篇:图文并茂教你基于Windows 10系统安装IntelliJ IDEA
  4. Flutter 打包APP (Android IOS)
  5. 中国矿业大学C语言作业,中国矿业大学C语言程序设计实验报告第5章.docx
  6. 计算机毕业设计Java大学生宿舍信息管理系统(源码+系统+mysql数据库+lw文档
  7. 双曲正切函数和sigmoid函数 Python实现
  8. Python中set的用法
  9. 《C++程序设计原理与实践》笔记 第15章 绘制函数图和数据图
  10. linux 下使用 LXR 看代码