语音识别 — 特征提取 MFCC 和 PLP

news2024/9/21 8:01:26

一、说明

        语音识别是一种技术,通过计算机和软件系统,将人们的口头语言转换为计算机可读的文本或命令。它使用语音信号处理算法来识别和理解人类语言,并将其转换为计算机可处理的格式。语音识别技术被广泛应用于许多领域,如语音助手、语音控制、语音翻译、语音搜索、电话自动接听等。

二、基本问题提出

回到语音识别,我们的目标是根据声学和语言模型找到与音频对应的最佳单词序列。

为了创建声学模型,我们的观察X由一系列声学特征向量(x₁,x₂,x₃,...)表示。在上一篇文章中,我们了解了人们如何表达和感知语音。在本文中,我们将讨论如何从我们学到的内容中提取音频特征。

三、语音识别要求

让我们首先定义 ASR(自动语音识别器)中特征提取的一些要求。给定一个音频片段,我们使用 25ms 宽的滑动窗口来提取音频特征。

这个 25 毫秒的宽度足以让我们捕获足够的信息,但这个框架内的特征应该保持相对静止。如果我们用 3 部手机每秒说 4 个单词,并且每个电话将细分为 3 个阶段,那么每秒有 36 个状态或每个状态 28 毫秒。所以 25ms 窗口大约是正确的。

语境在言语中非常重要。发音根据电话前后的发音而变化。每个滑动窗口相距约10毫秒,因此我们可以捕获帧之间的动态以捕获适当的上下文。

音高因人而异。然而,这对识别他/她说的话几乎没有作用。F0 与音高有关。它在语音识别中没有价值,应将其删除。更重要的是共振峰F1,F2,F3,...对于那些在遵循这些条款方面有问题的人,我们建议您先阅读上一篇文章。

我们还希望提取的特征能够对扬声器是谁以及环境中的噪音具有鲁棒性。此外,像任何 ML 问题一样,我们希望提取的特征独立于其他特征。开发模型和使用独立特征训练这些模型更容易。

一种流行的音频特征提取方法是梅尔频率倒谱系数 (MFCC),它具有 39 个特征。特征计数足够小,足以迫使我们学习音频信息。12个参数与频率幅度有关。它为我们提供了足够的频率通道来分析音频。

下面是提取 MFCC 特征的流程。

主要目标是:

  • 删除声带激励 (F0) — 音高信息。
  • 使提取的特征独立。
  • 适应人类感知声音响度和频率的方式。
  • 捕获手机的动态(上下文)。

四、梅尔频率倒谱系数

        让我们一次介绍一个步骤。

模数转换

A/D 转换对音频剪辑进行采样并对内容进行数字化,即将模拟信号转换为离散空间。通常使用8或16 kHz的采样频率。

预加重

预加重可提高高频中的能量。对于元音等浊音段,较低频率的能量高于较高频率。这称为频谱倾斜,与声门源(声带如何产生声音)有关。提高高频能量使更高共振峰中的信息更容易被声学模型获得。这提高了手机检测的准确性。对于人类来说,当我们听不到这些高频声音时,我们开始出现听力问题。此外,噪声具有很高的频率。在工程领域,我们使用预加重使系统不易受到以后过程中引入的噪声的影响。对于某些应用程序,我们只需要在最后撤消提升即可。

预加重使用滤波器来提升更高的频率。以下是关于如何增强高频信号的前后信号。

朱拉夫斯基和马丁,图。9.9

窗口

窗口化涉及将音频波形切成滑动帧。

但我们不能只是在框架的边缘把它砍掉。突然下降的振幅会产生很多噪声,这些噪声出现在高频中。要对音频进行切片,振幅应在帧边缘附近逐渐下降。

假设 w 是应用于时域中原始音频剪辑的窗口。

w的一些替代方案是汉明窗和汉宁窗。下图显示了如何使用这些窗口斩断正弦波形。如图所示,对于汉明和汉宁窗口,振幅在边缘附近下降。(汉明窗的边缘有轻微的突然下降,而汉宁窗则没有。

w 的相应方程为:

右上方是时域中的声波。它主要仅由两个频率组成。如图所示,与矩形窗口相比,汉明和汉宁的斩波框架可以更好地保持原始频率信息,噪声更少。

源右上:由两个频率组成的信号

离散傅里叶变换 (DFT)

接下来,我们应用DFT提取频域中的信息。

梅尔过滤器组

如上一篇文章所述,设备测量与我们的听觉感知不同。对于人类来说,感知的响度会根据频率而变化。此外,感知频率分辨率随着频率的增加而降低。即人类对更高的频率不太敏感。左图显示了 Mel 刻度如何将测量的频率映射到我们在频率分辨率背景下感知的频率。

所有这些映射都是非线性的。在特征提取中,我们应用三角带通滤波器来隐藏频率信息以模仿人类的感知。

首先,我们对DFT的输出进行平方。这反映了每个频率(x[k]²)的语音功率,我们称之为DFT功率谱。我们应用这些三角形梅尔尺度滤波器组将其转换为梅尔尺度功率谱。每个梅尔级功率谱槽的输出表示其覆盖的多个频段的能量。此映射称为梅尔分箱。插槽 m 的精确方程为:

Trainang角带通在较高频率下较宽,以反映人类的听力,而在高频下灵敏度较低。具体来说,它在 1000 Hz 以下线性间隔,然后以对数方式转动。

所有这些努力都试图模仿我们耳朵中的基底膜如何感知声音的振动。出生时,基底膜在耳蜗内有大约15,000根毛发。下图显示了这些毛发的频率响应。因此,下面的曲线形状响应只是由 Mel 滤波器组中的三角形近似。

我们模仿我们的耳朵如何通过这些头发感知声音。简而言之,它由使用 Mel 过滤组的三角形滤波器建模。

日志

梅尔滤波器组输出功率谱。人类对高能量下的微小能量变化不如低能量水平下的微小变化敏感。事实上,它是对数的。因此,我们的下一步将从 Mel 过滤器组的输出中删除日志。这也减少了对语音识别不重要的声学变体。接下来,我们需要解决另外两个要求。首先,我们需要删除 F0 信息(音高),并使提取的特征独立于其他特征。

倒谱 — IDFT

下面是语音产生的模型。

我们的发音控制声道的形状。源过滤器模型将声带产生的振动与我们的发音产生的过滤器相结合。声门源波形将通过声道的形状在不同频率下被抑制或放大。

Cepstrum 是单词“spectrum”中前 4 个字母的反面。我们的下一步是计算分离声门源和过滤器的倒谱。图(a)是光谱,其中y轴是幅度。图(b)取了量级的对数。仔细观察,波浪在 8 到 1000 之间波动约 2000 次。实际上,每 8 个单位波动约 1000 次。这大约是125赫兹 - 声带的源振动。

保罗·泰勒〔2008〕

如观察所示,对数频谱(下面的第一张图)由与电话(第二张图)和音高(第三张图)相关的信息组成。第二个图中的峰值标识区分电话的共振峰。但是我们如何将它们分开呢?

回想一下,时域或频域中的周期在变换后是反转的。

回想一下,音高信息在频域中的周期很短。我们可以应用傅里叶逆变换将螺距信息与共振峰分离。如下图所示,音高信息将显示在中间和右侧。中间的峰值实际上对应于F0,手机相关信息将位于最左侧。

这是另一个可视化效果。左图上的实线是频域中的信号。它由虚线绘制的电话信息和音高信息组成。在IDFT(逆离散傅里叶变换)之后,具有1/T周期的音高信息被转换为右侧T附近的峰值。

因此,对于语音识别,我们只需要最左侧的系数并丢弃其他系数。事实上,MFCC 只取前 12 个倒谱值。还有另一个与这 12 个系数相关的重要属性。对数功率谱是真实且对称的。它的反DFT等效于离散余弦变换(DCT)。

DCT 是一种正交变换。在数学上,变换会产生不相关的特征。因此,MFCC 功能高度不相关。在 ML 中,这使我们的模型更容易建模和训练。如果我们使用多元高斯分布对这些参数进行建模,则协方差矩阵中的所有非对角线值都将为零。在数学上,此阶段的输出为

以下是倒谱 12 个倒谱系数的可视化。

动态要素(增量)

MFCC 有 39 个功能。我们最终确定了 12 个,其余的是什么。第 13 个参数是每帧中的能量。它可以帮助我们识别手机。

在发音中,上下文和动态信息很重要。止动闭合和释放等衔接可以通过共振峰过渡来识别。表征随时间变化的功能可提供电话的上下文信息。另外 13 个值计算下面的增量值 dt)。它测量从上一帧到下一帧的特征变化。这是特征的一阶导数。

最后 13 个参数是 dt) 从最后一帧到下一帧的动态变化。它充当 ct) 的二阶导数。

因此,39 个 MFCC 特征参数是 12 个倒谱系数加上能量项。然后我们还有 2 个对应于增量和双精度增量值的集合。

倒谱均值和方差归一化

接下来,我们可以执行特征规范化。我们用其均值归一化特征,并将其除以其方差。均值和方差是使用单个语句中所有帧的特征值 j 计算的。这使我们能够调整值以对抗每个记录中的变体。

但是,如果音频剪辑很短,这可能不可靠。相反,我们可以根据说话人甚至整个训练数据集计算平均值和方差值。这种类型的功能规范化将有效地取消前面所做的预加重。这就是我们提取MFCC特征的方式。最后要注意的是,MFCC对噪声的抵抗力不是很强。

五、感知线性预测 (PLP)

PLP与MFCC非常相似。受听觉感知的激励,它使用相等响度预加重和立方根压缩而不是对数压缩。

它还使用线性回归来最终确定倒谱系数。PLP具有稍好的精度和稍好的噪声鲁棒性。但也有人认为MFCC是一个安全的选择。在本系列中,当我们说提取 MFCC 特征时,我们也可以提取 PLP 特征。

六、后记

        ML 为问题域构建模型。对于复杂的问题,这是非常困难的,并且该方法通常非常启发式。有时,人们认为我们正在入侵系统。本文中的特征提取方法在很大程度上依赖于实证结果和观察结果。随着深度学习的引入,我们可以用更少的黑客攻击来训练复杂的模型。但是,某些概念对于 DL 语音识别仍然有效且重要。

        下一个:为了更深入地了解语音识别,我们需要详细研究两种 ML 算法。

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

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

相关文章

Spring学习之Spring启示录

文章目录 OCP开闭原则依赖倒置原则控制反转依赖注入DI OCP开闭原则 什么是OCP? OCP是软件七大开发原则当中最基本的一个原则:开闭原则对什么开?对拓展开对什么闭?对修改关系 如果为了一个功能拓展,需要修改之前运行良…

项目播报 | 新基德携手璞华易研PLM,打造企业新一代研发管理平台

近日,“新基德PLM(Product Lifecycle Management,产品生命周期管理)项目”在新基德(深圳)电子有限公司(以下简称:新基德)正式启动。新基德是一家集手机研发、生产、销售、…

2023 数字生态发展大会,和鲸 ModelWhale 入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图》

7月27日,由中国信通院主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中会议在北京召开。本次大会重磅发布了《高质量数字化转型产品及服务全景图(2023)》,和鲸科技旗下数据科学协同平台 ModelWhale 成功入选&#xff…

android jetpack DataStore(java)代替SharedPreferences

目录 Preferences DataStore 怎么用?导入依赖创建 Preferences DataStore读取内容写入内容 Proto DataStore怎么用?导入依赖创建proto创建Serializer使用DataStore DataStore 提供两种不同的实现:Preferences DataStore 和 Proto DataStore。…

【C语言进阶】重新认识字符型变量

引例 首先我们看一个简单的例子 #include <stdio.h> #include <stdlib.h>int main() {double x4 2023.727;char c (int)x4 / 10;printf("c%6c\tc%6hd\n",abs(c),abs(c));return 0; } }这小例子的结果是多少呢&#xff1f; 结果是 “c 6 c 54” 有知…

医学案例|单因素重复测量方差

一、案例介绍 为研究某诱导方法对患者收缩压的影响&#xff0c;将手术要求基本相同的15名患者&#xff0c;在手术过程中采用A麻醉诱导方法&#xff0c;并在T0&#xff08;诱导前&#xff09;、T1、T2、T3、T4五个时刻测量患者的收缩压&#xff0c;试着进行方差分析。 二、问题…

小程序相较于APP,广告变现有哪些优势?

对于开发者而言&#xff0c;微信小程序开发门槛相对较低&#xff0c;难度不及APP&#xff0c;能够满足简单的基础应用&#xff0c;适合生活服务类线下商铺以及非刚需低频应用的转换。 和早期相比&#xff0c;今天小程序在产品功能、UI设计、交互体验等方面&#xff0c;越来越精…

python_day16_装饰器

装饰器基础写法 def outer(func):def inner():print("睡眠")func()print("起床")return innerdef sleep():import timeprint("睡眠中、、、")time.sleep(5)f1 outer(sleep) f1()装饰器语法糖 def outer(func):def inner():print("休息一…

Inpaint Anything: 自动化抹除视频元素

自动化抹除视频元素 不用逐帧抠图&#xff0c;直接SAM Tracking Video Inpainting就能实现自动化抹除奔跑吧idol。 https://github.com/geekyutao/Inpaint-Anything 目录 网站演示参考文献 网站 https://huggingface.co/spaces/InpaintAI/Inpaint-Anything 演示 原理就是&a…

Bert经典变体学习

ALBert ALBERT就是为了解决模型参数量大以及训练时间过长的问题。ALBERT最小的参数只有十几M, 效果要比BERT低1-2个点&#xff0c;最大的xxlarge也就200多M。可以看到在模型参数量上减少的还是非常明显的&#xff0c;但是在速度上似乎没有那么明显。最大的问题就是这种方式其实…

力扣算法递归类—(链表)两数相加

目录 2. 两数相加 题解&#xff1a; 知识点&#xff1a; 链表定义&#xff1a; 链表赋值&#xff1a; 链表题小技巧&#xff1a; 代码&#xff1a; 结果&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&…

idea 里 controller service impl mapper xml 切换跳转快捷键

首先在controller层&#xff0c;对着接口点方法的方法上按着ctrl和鼠标左键&#xff0c;你会进入service层。 对着方法ctrlaltb不按鼠标&#xff0c;你会进入impl层。service层的方法上按ctrl和鼠标左键会回到controller&#xff0c;ctrlaltb不按鼠标也会进入到impl层,impl上的…

0基础学习VR全景平台篇 第73篇:VR直播-如何自定义邀请二维码(直播邀请)

自定义直播邀请二维码是自定义直播间邀请卡上显示的二维码&#xff0c;若上传&#xff0c;那么便会替换掉邀请卡上原有的二维码&#xff0c;原二维码为本场直播活动的二维码。 建议上传的尺寸为300px*300px&#xff0c;可选择开启二维码的弹出效果&#xff0c;开启后&#xff0…

第三章 数据链路层

第三章 数据链路层 3.1 数据链路层的几个基本概念 数据发送模型 数据链路层主要的两种信号类型 点对点信号&#xff1a;这种信道使用一对一的点对点通信方式&#xff1b;广播信道&#xff1a;这种信道使用一对多的广播方式&#xff0c;因此过程比较复杂。广播信道上连接的主机…

管理类联考——写作——真题篇——论说文——企业管理=2011+2013+2014+2015+2016+2017+2020真题论说文

2020年探究的就是管理者做决策的时候&#xff0c;应该多听听专家的意见&#xff1b; 2017年探究的是企业在研发新产品和扩大生产之间的抉择问题&#xff1b; 2016年也可以看成企业的问题&#xff0c;就是企业组织的多样化和一致性。 2015年则说明企业在积累财富的过程中&#x…

又双叒叕被调查?竟是Elsevier旗下中科院TOP?如何避雷看这几个指标!

近期小编发现处于“On Hold”状态的期刊愈发的多了&#xff0c;总在不明所以的情况下&#xff0c;科睿唯安官网就将期刊拉入“审查”名单&#xff0c;包括前几天发现的同为Elsevier旗下的中科院TOP期刊Chemosphere &#xff08;&#x1f449;参考&#xff1a;慎投&#xff01;…

科技云报道:是时候全员FinOps了吗?

科技云报道原创。 在论坛上&#xff0c;国外某企业的真实案例引发了热议。一开始该企业只顾技术创新&#xff0c;积极上云&#xff0c;不顾成本。 直到有一天&#xff0c;高层介入喊停&#xff1a;“这个云不能再上了&#xff0c;成本已经远大于收益了”。该企业因为成本失控…

数据库优化器设计穿越探索之旅

作者&#xff1a;王晨(道客) 一、前言 引用来自百度百科的话术&#xff1a;在数据库技术发展历史上&#xff0c;1970 年是发生伟大转折的一年&#xff0c;因为这一年的6月&#xff0c;IBM的圣约瑟研究实验室的高级研究员Edgar Frank Codd在Communications of ACM 上发表了《A…

【JavaEE初阶】Servlet (二) Servlet中常用的API

文章目录 HttpServlet核心方法 HttpServletRequest核心方法 HttpServletResponse核心方法 Servlet中常用的API有以下三个: HttpServletHttpServletRequestHttpServletResponse HttpServlet 我们写 Servlet 代码的时候, 首先第一步就是先创建类, 继承自 HttpServlet, 并重写其…

springboot拿到yml文件中的配置,决绝将配置写在代码里

springboot拿到yml文件中的配置 写你对应的文件 package com.gym.vueea.config;import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;/*** author ymgu* Package com.gym.vueea.config* date 2023…