本文的初衷是为后续模型介绍和论文速览提供一个过渡,核心价值在于介绍一些较为基础的概念,以使得后文中如遇到不太理解的概念通过本文查证

一、语音的表示

语音的表示形式本质为波形,从语音到波形的理解可以想象打鼓时的鼓膜运动方式,假定我们只观察鼓膜的中心点,也就可以看到随着声音的产生鼓膜的运动过程。

在声音的产生过程中,鼓膜中心点以一定的规律进行上下运动,转化成数学二维表达,就是假定横轴为时间,纵轴为当前时间鼓膜中心点与初始点的距离。然后我们就可以画出一个中心点随时间的运动轨迹,也就是一个波形。

语音波形示例

二、 语音的存储

语音的表示形式是一个以时间为自变量的波形这一步没问题后,我们来讨论下语音怎么存储的。

首先这种波形明显是不能够直接存到电脑的,一个波不是一个数字,根本无法确定存储数据量大小。所以要转化,那么转化其实就两种办法,一种是我把这个波形用一个函数表达出来,然后存函数的参数,这样的确存储空间确定了,而且需要的空间很小,但是太麻烦了,需要函数来拟合波形,甚至有些波形不可以用函数表达怎么办(我知道你可能在想直接用大量的分段函数来表达,这其实和我后面要说的方法本质是一样的)。 另外一种就是,我间隔一定的时间存储一个点的数值(是不是类似这个时间间隔的分段函数),然后一段语音波形就可以通过一个基于时间长度的向量表达存储了。这就是语音的离散存储方式。

三、 语音的基础特征

这样可以引出很多语音的基础概念,比如离散的存储方式中,时间间隔其实就和语音的采样率(Sample Rate)相关,间隔给定的时间记录一个数值,那么一秒的语音中记录多少个点的数量就是语音采样率。也就是说16000 采样率的语音表示,一秒有16000个点被记录下来。每个点记录的数据格式(整型,浮点型)就是语音的精度(Precision)。记录的数值是否做过编码压缩以及怎么做的编码压缩,就是采样点编码(Sample Encoding)。

语音通道数(Channels)指的其实是这段语音由几个波形组成。

四、傅里叶变换

傅里叶变换只考虑使用的话其实只需要理解它的意义,而不用完全推导。

1 . 傅里叶变化意义

傅里叶变换的意义其实很简单,可以看作固定基底的因子分解,这可能越说越绕,举个贴近生活的例子就是垃圾分类。对傅里叶变换就是垃圾分类,这里有一包各种混合的垃圾(语音波形),现在要按要求将其中垃圾进行分类,我们得到的其实就是分类好后各种垃圾的数量。

好的,再用语音复述一遍上述过程,我们有一个由各种正弦波组成的波形,然后经过傅里叶变换,我们得到了各种正弦波的占比。

傅里叶变换图解(wiki)

当然这个叙述中有一个明显漏洞,那就是凭什么一个波形能够由正弦波组成,正弦波拟合波形的精度又如何确定,这的确无法通过抽象的语言讲明白,需要严格的推导,如果需要可以推导一下傅里叶变换即可。

得到各种正弦波的占比,其实也就是正弦波的能量也就能画出频域图了,频域的自变量其实是离散的,对应的就是每种正弦波,因变量则是能量了。

这里为防止疑惑再提一句,为什么会有多种正弦波,毕竟正弦波的样子都是完全一样的嘛。这里的种类其实是指的频率,频率越高的正弦波实际上会变化得越快,也就是周期越小。频率的不同决定了正弦波的不同。

当然还有相位等概念,但我会在讲述比较传统的vocoder之前一定会详细叙述这一部分。在neural vocoder部分其实不用太深入,知道傅里叶变换是在做正弦波分解即可。

2 . 帧与窗

另外在傅里叶变换计算过程中还需要有个“帧”的概念,这是因为傅里叶变换实际时对一个波形全实数域范围内的处理,可现实语音波形是随时间复杂多变的。所以我们只能每次取波形的一部分(然后复制粘贴到全实轴上)做傅里叶变换,这是基于语音信号的短时不变性做的妥协性操作。背后的逻辑是假设一段短时语音的正弦信号构成是稳定的,所以对于这段语音的傅里叶变换结果是可靠且唯一的。

那么我们每次取一“窗”语音做傅里叶变换的结果作为一“帧”语音的频谱,这里“窗”的概念是基于窗函数而来的,这将在后文讲频谱泄漏部分较为完整的叙述。如果将一条语音分成n个收尾相连的“窗”,那么这里窗的数量实际就是帧数。可是实际处理中大多是更少量的移动窗,而将窗移作为一帧的单位。举个例子,假设一个窗包含160个点,每隔80个点设置一个窗,那么对于一个长度为1000个点的语音,实际上是分成了11帧(有11个窗)。

五、 Mel 谱(Mel Spectragram)

上节讲述了通过傅里叶变换得到频谱,实际上傅里叶变换后的频谱为和其他谱图具有区分性,称为线性谱(linear spectragram)。

而mel 谱实际是对线性谱的自变量(频率)做了一个弯折(wrap)处理(先不考虑三角滤波器的问题)。也就是说线性谱的频率通过一个函数后再和能量一一对应的谱图就是mel谱。

那么为什么需要做这个弯折(wrap)?这是类比人耳的听觉认知做的一种类似操作。现实中人耳并非对于每个频率的敏感程度都是相同的,总体来说,人耳对于低频更加敏感,而对高频不敏感。这样处理语音时更应该关注低频部分而非平均分配注意力。

而这种不均匀分配注意力的方式,数学上是通过频率映射完成的。让低频部分频率的变化情况更为明显,那么计算对于低频的感知也就更敏感。

正常频域到Mel域的映射

当然,在mel谱的使用中,不仅需要它具有调整频段分布的作用还需要兼具频谱降维的功能。假设现在一帧语音傅里叶变换后得到512+1维(多的一维是残差)的频谱,我们得到的mel谱需要小于100维。降维的方式同样参考人耳,可以把人耳当作一个滤波器组,滤波器组中每个滤波器都可以使用一种简单的滤波器----三角滤波器。人耳对于低频敏感其实意味着在低频部分滤波器密度更高,而高频部分更为稀疏。最后滤波器的个数也就是mel谱的维数。

Mel域对应三角滤波器示例

以上初步讲解了mel谱,更为复杂的MFCC(mel倒谱系数)和MCEP等将在使用到之前更为详细的叙述。

六、 语音中噪声或扰动的必要性

大多数情况谈到噪声第一反应是累赘,是需要在模型中去掉的东西。当然这在许多场合下是合理的,可是当我们看许多vocoder 模型的时候会发现,这些模型在主动添加噪声和扰动,这内在原因如果单纯认为噪声是不好的东西是无法理解的。

主要矛盾的根源是语音中的很多发音其实就是白噪声,同时背噪也在一定程度上决定了音色。换言之,噪声是听觉系统不可分割的一部分。例如摩擦音的主体就是白噪声,所以语音生成过程中噪声的合理加入是必不可少的一部分。

同时不合理的噪声的去除也是必要的,即使看起来是规则的,周期性的,实际上在听觉系统中反而会被当作奇怪的东西。

当然这部分内容大多不会在Neural Vocoder中有什么实质性的操作,谈及噪声只是为了说明模型中大量添加随机性的合理性。而真正的噪声谱的添加将会在传统vocoder的讲解中叙述。

尾巴

这里大多讲述都是基于我的记忆来说的,所以可能用词不是很正式,也许有些讲述链条中突然出现了一些读者不知道但我没讲述过的东西,希望能够指出,非常感谢

利用函数wavread对语音信号进行采样_语音信号处理相关知识相关推荐

  1. 利用函数wavread对语音信号进行采样_语音识别第4讲:语音特征参数MFCC

    一.MFCC概述[1] 在语音识别(SpeechRecognition)和话者识别(SpeakerRecognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scaleFrequency ...

  2. 利用函数wavread对语音信号进行采样_统计与自适应信号处理知识点总结-期末考试...

    图片不好上传,需要完全版本请付费咨询我! 信号包括:确定性信号和随机信号. 确定性信号,可以清楚的用数学关系描述的信号.也就是说可以用过去的观察来预测未来值. 随机信号,以不可预见的方式实时产生,他们 ...

  3. 利用函数wavread对语音信号进行采样_AI大语音(一)——语音识别基础(深度解析)...

    1 声音特性​ 声音(sound)是由物体振动产生的声波.是通过介质传播并能被人或动物听觉器官所感知的波动现象.最初发出振动的物体叫声源.声音以波的形式振动传播.声音是声波通过任何介质传播形成的运动. ...

  4. python信号端点检测_语音信号端点检测

    语音信号的端点检测方法有很多种,简单的方法可以直接通过计算出声音的音量大小,找到音量大于某个阈值的部分,认为该部分为需要的语音信号,该部分与阈值的交点即为端点,其余部分认为非语音帧. 计算音量 计算音 ...

  5. matlab如何采集两路语音信号,基于MATLAB的语音信号采集与处理

    内容介绍 原文档由会员 大雨倾盆 发布 基于MATLAB的语音信号采集与处理 2.4万字 114页 原创作品,已通过查重系统 摘要 语音信号处理作为目前发展最为迅速的信息科学研究领域的核心技术,它是一 ...

  6. matlab语音信号的变速_十种客观评价语音质量的方法

    语音客观评价标准一般分为语音质量评价和语音可懂度评价,这里先介绍语音质量评价.提起语音质量评价,大家第一个想到的肯定是信噪比这个十分常用的评价标准以及它的相关衍生标准,这里总结一些常用的语音质量评价标 ...

  7. PyQt5 中信号signal 与 槽 slot 的相关知识

    博文视点 文章写得太好了 转载学习 感谢 https://blog.csdn.net/broadview2006/article/details/78475842 在Qt中,每一个QObject对象和 ...

  8. php 华为语音通话,语音通知API_语音通话 VoiceCall_API参考_语音通知API_华为云

    200 0 Success. 成功. 无需处理. 400 1023006 Authorization not contained in the HTTP header. Authentication ...

  9. matlab语音信号分析实验报告,DSP实验二 语音信号分析与处理,南京理工大学紫金学院实验报告,信号与系统...

    实验二语音信号分析与处理 学号姓名 注:1)此次实验作为<数字信号处理>课程实验成绩的重要依据,请同学们认真.独立完成,不得抄袭. 2)请在授课教师规定的时间内完成: 3)完成作业后,请以 ...

最新文章

  1. nginx:在centos中自启动
  2. 营销网站SEO优化:前方优化难点出没!
  3. 利用 PortableBasemapServer 发布地图服务
  4. 目标指令c语言是什么,什么是C中的目标文件?
  5. linux最小安装桌面,Linux工作环境:CentOS7最小安装+Xfce桌面环境
  6. 乌班图系统的MySQL_乌班图系统mysql主从备份
  7. 想打ACM?想刷题?来这些online judge!
  8. 【kafka】kafka 新增节点 报错 InconsistentBrokerIdException Configured broker.id doesn‘t match
  9. 庖丁解牛获取连接状态数的awk数组命令
  10. 合肥师范学院计算机操作系统期末考试题,2005级操作系统期末试卷A卷及答案
  11. 休闲甜品店创业计划书_甜品店创业计划书
  12. 如何卸载删除sql2005
  13. Object.HashCode()——居然是Java Native方法
  14. Nessus插件包20220925
  15. myscript 思路整理
  16. Ubuntu 18 安装DNS解析服务器
  17. 【推荐】我的FLASH情结2010——浅谈FLASH WEB GAME与创业(3)
  18. ping服务器网速的工具
  19. 4、数据库服务的启动与登录
  20. C++训练 : 神奇的fans

热门文章

  1. weka源码编译步骤
  2. 最优布线问题(普里姆算法)
  3. Codeforces 482E ELCA (LCT)
  4. Codeforces 798D Mike and distribution (构造)
  5. windows拾取像素坐标_窗口坐标获取 windows
  6. yolov3损失函数改进_YOLOv3论文解析
  7. python web开发项目 源码_真零基础Python开发web
  8. oracle 计划中的view,为何执行计划中会出现个VIEW: VM_NWVW_1 ?
  9. 2019-11-08 频域的直观感受
  10. linux软链接的创建、删除和更新