语音识别入门第二节:语音信号处理及特征提取
目录
数字信号处理基础
基础知识
傅里叶分析
常用特征提取
特征提取流程
Fbank
MFCC
数字信号处理基础
基础知识
模拟信号到数字信号转化(ADC):在科学和工程中,遇到的大多数信号都是连续的模拟信号,而计算机只能处理离散的信号,因此,必须对这些连续的模拟信号进行转化,通过采样和量化,转化成数字信号。
以正弦波为例:有,为信号本身的频率,为时间,对该正弦波进行采样时,每隔秒进行一次采样,可以得到采样后的离散信号为,为采样周期,为采样率,n为离散证书序列。
频率混叠:不同频率的正弦波经过采样后可能出现完全相同的离散信号,这种现象就是频率混叠。
奈奎斯特采样定律:采样频率大于信号中最大频率的两倍,即在原始信号的一个周期内,至少要次采样两个点,才能有效杜绝频率混叠问题。
傅里叶分析
为什么要进行离散傅里叶变换(DFT)?
DFT的作用是将时域信号变换到频域,并分析信号中的频率成分。以时域为横轴时,可以看到信号随时间变化的规律,若果将多个频率的信号叠加到一起,此时将无法分析该信号中有哪些频率成分,若以频域为横轴时,可以很容易的看到信号中有哪些频率成分。
什么信号可以进行DFT?
时域离散且周期的信号。
非周期离散信号能否进行DFT?
非周期离散信号需要进行周期延拓才可以进行DFT。即将当前信号看做整个信号的一个周期,进而进行DFT。
什么是DFT?
对一个给定长度为的时域离散信号,对应的离散频域序列为:,
其中,为自然对数底,为DFT的第m个输出。
根据欧拉公式,DFT的公式还可以为:
DFT的性质
性质1:对称性,对于实数信号,有
性质2:实际上表示的是“谱密度”,如果对一个幅度为A的正弦波进行N点DFT,则DFT之后,对应频率上的幅度M和A之间的关系为:
性质2:线性,如果,则对应的频域上有。
性质3:时移性,对左移k个采样点,得到的,对进行DFT,有。
DFT的频率轴
频率分辨率:,标识最小的频率间隔。当N越大时,频率分辨率越高,在频域上,第m个点所表示的分析频率为
快速傅里叶变换(FFT)
FFT的基本思想是把原始的N点序列,依次分解成一系列的短序列。充分利用DFT计算式中指数因子所具有的对称性质和周期性质,进而求出这些短序列相应的DFT并进行适当组合,达到删除重复计算,减少乘法和简化结构的目的。(推荐教材:Understanding DSP,第四章;数字信号处理,理论、算法与实现,第二版,清华大学出版社)
常用特征提取
Fband和MFCC特征提取流程
Fbank和MFCC特征目前仍是主要使用的特征,虽然有工作尝试直接使用波形建模,但是效果并没有超越基于频域的特征。
预加重
预加重是为了提高信号高频部分的能量,高频信号在传递过程中,衰减较快,但高频部分又蕴含很多对语音识别有利的特征,因此,在特征提取部分,需要提高高频部分能量。
预加重滤波器是一个一阶高通滤波器,给定时域输入信号,预加重之后的信号为:,其中的取值一般为。
加窗分帧
语音信号是一种非平稳的信号,但语音信号又有一个短时平稳的属性,在进行语音识别的时候,对于一句话,识别的过程也是以比较小的发音单元为单位进行识别,因此用滑动窗来提取短时片段。
对于采样率为16KHz的信号,帧长、帧移一般为25ms、10ms,即400和160个采样点。
分帧的过程即在时域上,用一个窗函数和原始信号进行相乘,称为窗函数,常用的窗函数有矩形窗、汉明窗。
加窗的过程实际是在时域上将信号截断,窗函数与信号在时域相乘,等于对于的频域表示进行卷积,矩形窗主瓣窄,但是旁瓣大,将其与原始信号的频域标识进行卷积,就会导致频率泄露。
傅里叶变换
将上一步分帧的语音帧,由时域变换到频域,去DFT系数的模,得到谱特征。
梅尔滤波器组合对数操作
梅尔滤波器组是一种符合人耳听觉的一种滤波器组。DFT得到了每个频带上信号的能量,但是人耳对频率的感知不是等间隔的,近似与对于函数。
将线性频率转变到梅尔频率,梅尔频率和线性频率的转换关系:。
梅尔三角滤波器组可以根据起始频率、中间频率和截止频率确定各滤波器的系数。
梅尔滤波器组设计:
- 确定滤波器组个数P
- 根据采样率,DFT点数N,滤波器个数P,在梅尔域上等间隔的产生每个滤波器的起始频率、中间频率和截止频率。上一个滤波器的中间品率为下一个滤波器的起始频率。
- 将梅尔域上每个三角滤波器的起始、中间、截止频率转换线性频率域,并对DFT之后的谱特征进行滤波,得到P个滤波器组能量,进行log操作,得到Fbank特征。
MFCC特征在Fbank特征基础上继续进行IDFT变换等操作。
Fbank滤波器组公式:
m表示第m个滤波器组,k表示第k个频率点,f(m)表示第m个滤波器组的起始频率对应的索引值。
倒谱分析
动态特征计算
一阶差分,类比速度,最简单的为
二阶差分,类比加速度,最简单的为
能量计算
最简单的为:
Fbank
Fbank特征一般用于DNN训练。
MFCC
一般常用的MFCC特征为39维,包括:
- 12维原始MFCC
- 12维
- 12维
- 1维能量
- 1维能量
- 1维能量
MFCC特征一般用于对角GMM训练,各维度之间相关性小。
本节实践见:语音识别入门第二节:语音信号处理及特征提取(实战篇)_安静_xju的博客-CSDN博客
语音识别入门第二节:语音信号处理及特征提取相关推荐
- (超详细)语音信号处理之特征提取
语音信号处理之特征提取 语音信号处理之特征提取要对语音信号进行分析,首先要分析并提取出可表示该语音本质的特征参数.有了特征参数才能利用这些特征参数进行有效的处理. 根据提取参数的方法不同,可将语音信号 ...
- 语音识别入门第一节:语音识别概述
目录 语音识别的定义 语音识别的重要性 语音交互 语音识别的挑战性 语音识别的发展历史 语音识别的深度学习时代 现代语音识别框架 语料库与工具包 语音识别的定义 语音识别:Automatic Spee ...
- 语音信号处理入门系列(1)—— 语音信号处理概念
文章目录 1.语音交互 2. 复杂的声学环境 2.1 声学回声消除 2.2 解混响 2.3 语音分离 2.4 波束形成 2.5 噪声抑制 2.6幅度控制 2.7 前端信号处理的技术路线 3. 参考 4 ...
- ASP.NET MVC3 快速入门--第二节 添加一个控制器
MVC的全称为model-view-controller(模型-视图-控制器).MVC是一种开发应用程序的模式,这个模式已经具有了很好的框架架构,并且十分容易维护.使用MVC开发出来的应用程序一般包括 ...
- msp432快速入门第二节之sdk的详解
SDK详解 (一) 目的是快速上手这款单片机,所以一些对于新手不友好的东西我都不会介绍,简略说明就略过. TI的SDK安装后如此: (1).metadata没用,似乎是安装后的遗留产品,好让CCS ( ...
- java入门—第二节(1)(数据类型)
数据类型 一.标识符 1.标识符 标识符是编程时使用的名字:Java对包.类.接口.方法.变量.常量(不包括项目名)等命名时使用的字符序列称为标识符. Java标识符有如下命名规则: ...
- git 入门第二节 本地和远程仓库链接
第一步 去远程git仓库上找到仓库路径复制下来 第二步 在git里输入命令符 git clone 路径 这样 远程文件就添加到了你git找到的目录里 从远端-本地 第三步cd 回到你要上传的目录 把 ...
- SAS小白入门第二节:SAS数据类型和格式化(输入和输出)
数据类型 在其他编程语言中,有各种各样的数据类型,但是总体上,可大致分为:数值型,字符型和日期型,而SAS中的数据类型,只有2中数据类型:字符型和数值型.在这里,你会发现,日期型的去哪了?在SAS程序 ...
- Python入门 第二节
1 模块初识 Python的有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持我们.先来象征性的学2个简单的,以sys模块和os模块为例: 2 Python数据类型 ...
最新文章
- Android OpenGL射线拾取手势旋转(二)
- 重庆理工大学c语言程序实验报告,重庆理工大学-C语言程序实验报告.doc
- Tensorflow 2.0的这些新设计,你适应好了吗?
- 那些藏在你键盘里的emoji,背后到底有着怎样的故事?
- 南大cssci期刊目录_重磅!最新版CSSCI来源期刊目录(20192020)及增减变化!【南大核心】...
- MATLAB slider中的数值,在微信小程序中如何使用slider设置数据值
- LeetCode 473. 火柴拼正方形(回溯)
- Android 呼吸灯流程分析
- 10 SystemVerilog语言编写SPI发送
- 吴恩达机器学习(八)偏差与方差
- swipe.js文档及用法
- 上海市青少年算法2022年6月月赛(丙组)
- 用TFmini-Plus实现人流、身高测量
- oracle 范鑫_快速理解数据库中的索引(Indexes in Database)
- 票啦啦--手机购电影票
- new和malloc区别
- vim编辑器如何退出
- px4官网调参指南 多旋翼无人机PID调参指南
- 6-2 读文章(*) (10分)
- java ee jar_javaee.jar下载
热门文章
- AD-PCB设计流程(查漏补缺)
- Linux中 vim 实现代码补全
- lenovo L480 进入bios_B20A-BTC主板魔BIOS安装I5 94OOF CPU教程
- Python利用meteinfo来计算后向轨迹
- Jsp+Servlet基础
- Unity中获取字符串长度、Unicode字符数量和编码ASCII,UTF,GBK的区别
- Apache服务器安装教程
- java中PreparedStatement和Statement详细讲解
- chromeOS创建多个Crostini容器
- 零基础学C++——黑马程序员课程笔记(C++基础语法入门篇)