语音特征:spectrogram、Fbank(fiterbank)、MFCC

news2024/10/2 10:30:12

1.各种语音特征

语音特征用于语音识别和语音合成等。

语音特征有声谱图spectrogram、Fbank(fiterbank)、MFCC(Mel-frequency cepstral coefficients)等。

Fbank 特征提取方法就是相当 于 MFCC 去掉最后一步的离散余弦变换(有损变换).

在深度学习之前,受限于算法,mfcc配GMMs-HMMs是ASR的主流做法。当深度学习方法出来之后,由于神经网络对高度相关的信息不敏感,mfcc不是最优选择,经过实际验证,其在神经网络中的表现也明显不如fbank.

linear spectrogram里面冗余信息太多了,维度也高,所以一般也不用。

在这里插入图片描述

2.Mfcc

梅尔倒谱系数(Mel-scale Frequency Cepstral Coefficients,简称MFCC)。
在这里插入图片描述

MFCC一般会经过这么几个步骤:预加重,分帧,加窗,快速傅里叶变换(FFT),梅尔滤波器组,离散余弦变换(DCT).其中最重要的就是FFT和梅尔滤波器组,这两个进行了主要的将维操作。
(1)预加重:预加重处理其实是将语音信号通过一个高通滤波器。目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱;同时,也是为了消除发生过程中声带和嘴唇的效应,来补偿语音信号受到发音系统所抑制的高频部分,也为了突出高频的共振峰。
(2)分帧:为了方便对语音分析,可以将语音分成一个个小段,称之为:帧。先将N个采样点集合成一个观测单位,称为帧。通常情况下N的值为256或512,涵盖的时间约为20~30ms左右。为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域,此重叠区域包含了M个取样点,通常M的值约为N的1/2或1/3。通常语音识别所采用语音信号的采样频率为8KHz或16KHz,以8KHz来说,若帧长度为256个采样点,则对应的时间长度是256/8000×1000=32ms。
(3)加窗:将每一帧乘以汉明窗,以增加帧左端和右端的连续性。
(4)快速傅里叶变换(FFT):由于信号在时域上的变换通常很难看出信号的特性,所以通常将它转换为频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。所以在乘上汉明窗后,每帧还必须再经过快速傅里叶变换以得到在频谱上的能量分布。对分帧加窗后的各帧信号进行快速傅里叶变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。
(5)受人耳蜗(cochlea)的启发——根据输入声音的不同,它会在不同的地方共振。而根据共振位置的不同,不同的神经元会向大脑发送不同的信号告诉大脑这个声音对应哪些频率。我们用周期图来估计功率谱就是为了达到类似的效果。

但是上面得到的功率谱仍然包含了很多对于语音识别无用的信息。比如耳蜗不会太细微的区分两个频率,尤其是对于高频的信号,耳蜗的区分度就越小。因此我们会把频率范围划分成不同的桶(bin),我们把所有落到这个桶范围内的能量都累加起来。这就是通过Mel滤波器组来实现的:第一个滤波器非常窄,它会收集频率接近0Hz的频率;而越往后,滤波器变得越宽,它会收集更大范围内的频率,具体频率范围是怎么划分的后面我们会介绍。

(6)接下来对于滤波器组的能量,我们对它取log。这也是受人类听觉的启发:人类对于声音大小(loudness)的感受不是线性的。为了使人感知的大小变成2倍,我们需要提高8倍的能量。这意味着如果声音原来足够响亮,那么再增加一些能量对于感知来说并没有明显区别。log这种压缩操作使得我们的特征更接近人类的听觉。为什么是log而不是立方根呢?因为log可以让我们使用倒谱均值减(cepstral mean subtraction)这种信道归一化技术(这可以归一化掉不同信道的差别)。

(7)最后一步是对这些能量进行DCT变换。因为不同的Mel滤波器是有交集的,因此它们是相关的,我们可以用DCT变换去掉这些相关性,从而后续的建模时可以利用这一点(比如常见的GMM声学模型我们可以使用对角的协方差矩阵,从而简化模型)。

3.声谱图Spectrogram

声谱图的横坐标是时间,纵坐标是频率,坐标点值为语音数据能量。由于是采用二维平面表达三维信息,所以能量值的大小是通过颜色来表示的,颜色深,表示该点的语音能量越强。

声谱图是研究语音(音素Phone)的工具。
在这里插入图片描述

3.1.声谱图形成过程

1)信号预加重:
因为语音信号的功率谱随频率的增加而减小,导致语音的大部分能量都集中在低频部分,从而导致高频部分的信噪比很低。因此一般使用一阶高通滤波器去提升信号在高频部分的信噪比。对语音进行完预加重后,然后就是分帧加窗操作;

2)对信号进行分帧加窗,进行STFT, 得到每帧信号的频谱图:
对于一段语音,以10ms~30ms 为一帧,为了保证帧与帧之间平滑过渡保持连续性,帧与帧之间会有重叠。每帧数据加窗后做FFT , 称之为STFT。
3)对频谱图进行旋转 加映射;
4)将变换后的多帧频谱进行拼接, 形成语谱图;

4.Filterbank/Fbank

FBank 特征的频谱图大概长下面这个样子,图中四个红点表示的是共振峰,是频谱图的主要频率,在语音识别中,根据共振峰来区分不同的音素(phone),所以我们可以把图中红线表示的特征提取出来就行,移除蓝色的影响部分。其中红色平滑曲线将各个共振峰连接起来,这条红线,称为谱包络(Spectral Envelope),蓝色上下震荡比较多的线条称为谱细节(Spectral details)。

在这里插入图片描述

参考:
1)语谱图(一) Spectrogram 的定义与机理
https://blog.csdn.net/chumingqian/article/details/123019808
2)语音识别GMM-HMM
https://blog.csdn.net/zephyr_wang/article/details/127655618

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

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

相关文章

git学习笔记

1、安装及配置git 1、到官网下载git安装包:https://git-scm.com/download/win 2、安装完成后,菜单栏有如下工具 3、配置账户和邮件信息 $ git config --global user.name "xxx"$ git config --global user.email "xxxmegvii.com"4…

十大排序算法(C++)

十大排序算法Sorting algorithm(C) 百度百科: 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地…

高通平台开发系列讲解(AI篇)如何让yolov5运行在SNPE

文章目录 一、模型下载二、模型转换三、模型量化四、后处理加速沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍高通平台SNPE SDK运行yolov5。 一、模型下载 首先去git上下载yolov5s的代码和模型https://github.com/ultralytics/yolov5 二、模型转换 采…

Python爬虫实战,requests+xlwings模块,Python实现制作天气预报表!

前言 今天为大家介绍PythonExcel的实战项目,非常有趣,废话不多说。 Let’s start happily 开发工具 Python版本: 3.6.4 相关模块: xlwings模块 requests模块 pathlib模块 xlwings模块 json模块 环境搭建 安装Python并…

RAR压缩包,去除密码?

压缩包设置了加密,需要输入压缩包密码才能够顺利解压文件出来。但是有些时候,一些文件只需要一段时间内要加密,之后文件不需要加密了,每次解压文件的时候还是需要输入压缩包密码才行,就很麻烦,那么RAR压缩包…

SAP 接口主动推送企业微信异常消息

"推送企业微信格式lv_json { "msgtype": "markdown", "markdown": &&{ "content": "### 异常JOB通知\n >JOB名称: && gt_alv-jobname && \n 程序名称: && gt_…

戟星安全实验室|五分钟教你挖掘小程序漏洞

戟星安全实验室 忆享科技旗下高端的网络安全攻防服务团队.安服内容包括渗透测试、代码审计、应急响应、漏洞研究、威胁情报、安全运维、攻防演练等。 本文约1252字,阅读约需5分钟。 前言 现在大多小程序反编译教程所使用的都是node.js,操作过程较为麻烦…

第一周练习——认识复杂度和简单排序算法

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:《数据结构与算法》 📧如果文章知识点有错误的地方&a…

Mediapipe学习记录

学习文档 1、Google MediaPipe:设备端机器学习【完整解决方案】背后的技术实现 - 极术社区 - 连接开发者与智能计算生态 2、【转载】Google MediaPipe:设备端机器学习【完整解决方案】背后的技术实现 3、MediaPipe框架结构 - 走看看 Handtracking封装…

qt creator 设置 项目依赖关系

qt creator中有两种设置项目依赖关系的方式。 1、对于有依赖的项目,如果工程比较简单,可以将所有项目放到一个空的项目下,然后显示地指定从属关系,参考:qmake TEMPLATE subdirs_丘上人的博客-CSDN博客 2、通过qt cre…

leecode#Excel表列序号#组合两个表

题目描述: 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 分析: 法1,进制转换 这道题要求将Excel 表中的列名称转换成相对应的列序号。由于Excel 表的列名称由大写字母组成&#xff…

vue学习53~60(Vue组件化编程)

2 Vue组件化编程 2.1 模块与组件、模块化与组件化 2.1.1 模块 理解:向外提供特定功能的js程序,一般就是一 个js文件为什么: js 文件很多很复杂作用:复用js,简化js的编写,提高js运行效率 2.1.2 组件 理解:用来实现局部(特定)功能效果的代码集合(html/css/js/image…)为什么…

正大国际期货:外盘期货交易中常见的五类技术分析方法

外盘期货交易中,技术分析是必不可少的,技术分析是指以市场行为为研究对象,以判断市场趋势并跟随趋势的周期性变化来进行一切金融衍生物交易决策的方法的总和。常用的技术方法大体上可以分五大类:指标类、切线类、形态类、波浪类、…

安卓程序逆向与防护

安卓程序逆向与防护实际用处代码打包生成apk的步骤程序基础逆向步骤程序基础防御代码混淆针对逆向工具的防御手段ProguardSO文件防止二次打包程序进阶逆向攻击实战练习逆向简易安卓程序实际用处 1.当想要获得一款前后端分离的安卓程序的数据时,一般会考虑抓包后端传…

Kanzi:关于kanzi的一点杂谈

概述: 做过开发的小伙伴在初次接触Kanzi Studio 这个开发工具时,可能有点摸不着头脑,由于 它不像Android studio 也 不像QT ,而且最大的一个区别是:kanzi基本不用写代码逻辑来控制程序显示UI,但是Android …

做外贸一定要知道的20条经验教训

做外贸你必须知道的20课,由米贸搜为你整理如下: 1.在工厂里,客人抱怨价格太高的时候,我总是说一分钱一分货,质量好的回复。进入一家贸易公司后,我知道价格才是硬道理,尤其是大客人。对价格的考虑肯定高于对…

1776年美国才建国,那一年中国在干什么?

时代淘汰你,都不会跟你打一声招呼。时代的残酷性,对人如此,对国家也是这般。美国的历史是太嫩了,在1776年才得以建国。但在这年,美国踏上了工业化革命的节奏,走上了扬帆起航之旅,逐步成为了超级…

JavaIO流处理笔记(万字总结)

学习视频561-JavaSE进阶-IO流概述_哔哩哔哩_bilibili 目录 IO流概述 IO流的分类 IO流四大家族 FileInputStream初步(并非最终方法) FileInputStream循环读(并非最终方法) 往byte数组中读 FileInputStream最终版 FileInputStream的其他常用方法 FileOutputStream的使用…

Kamiya丨Kamiya艾美捷抗冷休克结构域蛋白E1说明书

Kamiya艾美捷抗冷休克结构域蛋白E1化学性质: 物种反应性:人类其他未知物种。 Ig同种型:正常兔全血抗体 免疫原:表达重组CSDE1(Met1~Val245)在大肠杆菌中 格式:500g/mL多克隆抗体在0.01M PBS…

【Redis】List类型和底层原理

文章目录List类型1.List介绍1.1常用命令2.List底层实现3.ziplist剖析3.1ziplist结构3.2创建一个空的ziplist3.3ziplist的元素节点结构3.4ziplisqt的连锁更新3.5ziplist的缺陷4.quicklist剖析4.1quicklist表头结构5.List的应用场景----消息队列5.1保证消息保序5.2处理重复的消息…