语音识别FBank特征提取学习笔记

news2024/11/26 0:53:57

语音识别就是把一段语音信号转换成对应的文本信息,这一过程包括四个大的模块,分别是:特征提取、声学模型、语言模型、字典与解码。

本篇就来梳理一下特征提取模块的实现思路和方法。

常用的语音特征有:

  • 梅尔频率倒谱系数(Mel-Frequency Cepstral Coefficients, MFCC)
  • 梅尔滤波器组系数(Mel Filter Bank, FBank,也叫log-Mel)
  • 线性预测系数(Linear Prediction Coefficient, LPC)

基于深度学习网络的语音识别,目前多采用FBank特征。 获得FBank特征主要包括以下几个步骤:

  1. 预加重;
  2. 分帧、加窗;
  3. 快速傅里叶变换,计算功率谱;
  4. Mel滤波器组;
  5. 取对数,得到FBank。

1. 预加重(Pre-Emphasis)

在音频录制过程中,高频信号更容易衰减,高频成分的丢失,可能导致音素的共振峰不明显,使得声学模型对这些音素的建模能力不强。预加重是个一阶高通滤波器,可以提高信号高频部分的能量。

预加重的实现方法:给定时域输入信号x,预加重之后的信号y为:y(t)=x(t)−αx(t−1),其中0.9≤α≤1.0。经过预加重之后的频谱图和原始的频谱图的比较如下图所示,其中,左侧为原始频谱图,右侧为预加重处理之后的频谱图。

2. 分帧、加窗

语音信号是一个时变的、非稳态的信号,但在短时间范围内可以认为是时不变的、稳态的。这个短时间的长度一般取10~30ms,可在这个时间范围内进行语音信号处理。这就是分帧。

分帧一般采用交叠分段的方法,这是为了使帧与帧之间平滑过渡,保持其连续性。前一帧和后一帧的交叠部分称为帧移,帧移与帧长的比值一般为0~1/2。分帧如下图所示:

分帧之后,需要使用有限长度窗口进行加权处理,也就是加窗,即sw(n) = s(n) * w(n)。那么,为什么要加窗呢?这是因为后面要对信号进行快速傅里叶变换(FFT)。FFT处理的要求是,信号要么从-∞到+∞,要么为周期信号。由于语音信号只能是有限长度信号,并且分帧后的信号是非周期的,进行FFT处理时会存在频率泄露的问题。为了尽可能地减小频率泄露,就需要对信号进行加窗处理。那么,窗函数的选择就需要满足:(1) 窗函数频谱主瓣宽度尽量窄,以得到较高的频率分辨能力;(2) 窗函数旁瓣衰减尽量大,以减少泄露。

下图显示了加窗和不加窗的FFT变换对比:

常用的加窗函数有汉明窗(Hamming)、汉宁窗(Hanning)等。其中,汉明窗的窗函数表达式为:

其中,0≤n≤N−1,N为窗口长度。窗口图形绘制如下:

3. 短时快速傅里叶变换(STFT),计算功率谱

对于每一帧加窗信号,进行N点FFT变换,也称为短时傅里叶变换(STFT),N通常取256或512。然后,计算能量谱:

4.  Mel滤波器组

人耳对不同频率的声音有不同的感知能力,通常情况下,人耳对低频的感知辨识力比高频更好,为了模拟人耳对不同频率的非线性感知能力,引入了Mel频率。赫兹频率(f)与Mel频率(m)之间的转换关系如下:

该步是通过定义M个三角滤波器组,对上一步得到的功率谱进行滤波。M的取值范围一般在22~40,标准值为26,这里取40。滤波器组中的每个滤波器都是三角形的,中心频率为f(m),该处响应为1,中心频率两边线性减小到0。各f(m)之间的间隔随着m值的增大而变宽,如下图所示:

三角滤波器的定义如下:

f(m)是在Mel尺度上转换回赫兹频率的位置,由于滤波器最终对第3步计算出来的功率谱进行滤波,因此,在实现中,可以将滤波器位置转换成FFT bin所在的位置来计算。为了说明这一点,用一段代码来描述这个过程:

low_freq_mel = 0
high_freq_mel = (2595 * numpy.log10(1 + (sample_rate / 2) / 700))  # Convert Hz to Mel
mel_points = numpy.linspace(low_freq_mel, high_freq_mel, nfilt + 2)  # Equally spaced in Mel scale,在Mel频率范围内均匀创建nfilt+2也就是40个点
hz_points = (700 * (10**(mel_points / 2595) - 1))  # Convert Mel to Hz,将42个点的Mel points转回赫兹频率
bin = numpy.floor((NFFT + 1) * hz_points / sample_rate)   # 将hz_points转换到FFT bin

fbank = numpy.zeros((nfilt, int(numpy.floor(NFFT / 2 + 1))))

for m in range(1, nfilt + 1):
    f_m_minus = int(bin[m - 1])   # left
    f_m = int(bin[m])             # center
    f_m_plus = int(bin[m + 1])    # right

    for k in range(f_m_minus, f_m):
        fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])     # 三角滤波器左侧
    for k in range(f_m, f_m_plus):
        fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])   # 三角滤波器右侧

filter_banks = numpy.dot(pow_frames, fbank.T)  # pow_frames即当前帧的功率谱
filter_banks = numpy.where(filter_banks == 0, numpy.finfo(float).eps, filter_banks)  # Numerical Stability
filter_banks = 20 * numpy.log10(filter_banks)  # dB,进行对数计算,得到最终的FBank特征

5. 取对数,得到FBank

这一步较简单,在上一步的Python代码中,对三角滤波器组的输出取对数,得到最终的FBank特征。不再赘述。

6. 均值归一化(Mean Normalization)

为了平衡频谱并提高信噪比,可以通过减去(所有帧的)系数平均值的方式来进行归一化。

filter_banks -= (numpy.mean(filter_banks, axis=0) + 1e-8)

7. MFCC特征

由于许多ASR系统使用MFCC特征,这里做一个补充说明。

由于FBank系数存在高度相关性,在一些机器学习系统(如之前流行的GMMs-HMMs)中会存在问题,因此,如果对Fbank进行DCT变换来对FBank系数进行去相关,则可以得到MFCC(Mel-Frequency Cepstral Coefficients)。MFCC是FBank的一种压缩表示。在ASR系统中,一般会保留前2~13个系数,其他的则被丢弃。被丢弃的这些系数表示filter bank的快速变化,这些精细的细节对某些ASR系统是没有贡献的。

mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1 : (num_ceps + 1)] # num_ceps = 2 - 13

 还可以对MFCC应用正弦提升来改善ASR在噪声信号下的识别能力:

(nframes, ncoeff) = mfcc.shape
n = numpy.arange(ncoeff)
lift = 1 + (cep_lifter / 2) * numpy.sin(numpy.pi * n / cep_lifter)
mfcc *= lift  

MFCC也可以应用均值归一化。 

参考资料:

Practical Cryptography

Speech Processing for Machine Learning: Filter banks, Mel-Frequency Cepstral Coefficients (MFCCs) and What’s In-Between | Haytham Fayek

《人工智能技术》,郑孝宗主编 

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

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

相关文章

windows电脑如何运行python的定时任务

这里需要使用:windows系统设置-控制面板里的计划任务 1.打开计划任务之后,选择:创建基本任务 2.填写名称,这里根据自己具体的项目需求填写,然后点击下一步。 3.选择每日,再点击下一步 4.设置时间&…

告别写作难题,这些AI写作工具让你文思泉涌

在现实生活中,除了专业的文字工作者,各行各业都避免不了需要写一些东西,比如策划案、论文、公文、讲话稿、总结计划……等等。而随着科技的进步,数字化时代的深入发展,AI已经成为日常工作中必不可少的工具了&#xff0…

全新升级!中央集中式架构功能测试为新车型保驾护航

“软件定义汽车”新时代下,整车电气电气架构向中央-区域集中式发展已成为行业共识,车型架构的变革带来更复杂的整车功能定义、更多的新技术的应用(如SOA服务化、智能配电等)和更短的车型研发周期,对整车和新产品研发的…

基于合成 VIIRS(NTL)夜间光照数据-印度

GAN based Synthetic VIIRS (NTL) India 基于合成 VIIRS(NTL)的广域网 印度 简介 本研究利用了两个主要来源的夜间光照(NTL)数据:国防气象卫星计划(DMSP)和苏美国家极地伙伴关系(…

使用 Nginx + GeoIP2 获取客户端地理位置及限制指定地区访问

要实现防火墙只允许单个城市的访问,您可以采取以下几种方法: 1、IP地理位置过滤: 使用GeoIP数据库(如MaxMind的GeoIP2)来确定IP地址的地理位置。 配置防火墙规则,只允许来自特定城市的IP地址访问。 2、内容…

SpringCloud-服务网关-Gateway

1.服务网关在微服务中的应用 (1)对外提供服务的难题分析: 微服务架构下的应用系统体系很庞大,光是需要独立部署的基础组件就有注册中心、配置中心和服务总线、Turbine异常聚合和监控大盘、调用链追踪器和链路聚合,还有Kaka和MQ之类的中间件&…

macOS使用Karabiner-Elements解决罗技鼠标G304连击、单击变双击的故障

记录一下罗技鼠标G304单击变双击的软件解决过程和方案(适用于macOS, 如果是Windows,使用AutoHotKey也有类似解决办法、方案,改日提供): 背景:通过罗技Logitect G HUB软件对罗技的游戏鼠标侧键b…

TikTok美区日销二十万美金爆款黑马!胸贴赛道成功起飞!

从去年开始,一项名为“No bra”(无胸罩)的挑战就长期刷屏TikTok。随着平台内各大博主和明星站台发声,越来越多用户也参与其中,话题的热度逐渐走向高潮。截止到目前, TikTok上相关话题累计播放量已高达8.3亿…

数据恢复篇:5 款最佳 Mac 数据恢复软件

说到保护我们的数字生活,数据恢复软件的重要性怎么强调都不为过。无论您是意外删除了假期照片的普通用户,还是面临硬盘损坏的专业人士,随之而来的恐慌都是普遍存在的。幸运的是,数据恢复工具可以缓解这些压力。在Mac用户可用的众多…

Postman接口测试工具详解【保姆级教程】

大家好,我是CodeQi! 在我们日常的开发工作中,无论是前端还是后端,API 接口的测试都是必不可少的一环。 你有没有遇到过这样的情况:接口测试工具复杂难用,使用起来让人抓狂;或者手动构造请求效率低下,容易出错? 别担心,我今天要介绍的 Postman 工具,将会彻底改变你…

【实用小工具】Aconvert文件转换神器

1 Aconvert简介 Aconvert.com在线转换各类PDF,文档,电子锁,图像,图标,视频,音频和压缩文件。域名中的“A”代表“ALL”。您可以点击右上角的转换按钮开始快速转换:无需进入目录,直接…

visual studio远程调试

场景一(被远程调试的电脑) 确定系统位数 我这里是x64的 找到msvsmon.exe msvsmon.exe目录位置解释: “F:\App\VisualStudio\an\Common7\IDE\”是visual studio所在位置、 “Remote Debugger\”是固定位置、 “x64”是系统位数。 拼起来就是…

【Linux】正确的关机方法

1. Linux正确的关机方式 如何关机呢?我想,很多朋友在DOS年代已经有在玩计算机了。在当时我们关闭DOS的系统时,常常是直接关闭电源开关,而Windows 在你不爽的时候,按着电源开关四秒也可以关机,但是在Linux则…

每日一题——Python实现PAT乙级1026 程序运行时间(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码结构和逻辑 时间复杂度 空间复杂度 代码优化建议 总结 我要更强 …

C基础-标准库上

目录 零. 简介 一. assert 二. ctype 三. errno 四. float 五. limits 六. locale C基础-标准库下连接: http://t.csdnimg.cn/LCcXR 零. 简介 C 语言标准库是一组由 ANSI C 标准规定的头文件和函数的集合,为 C 语言提供了常用的功能,以满足各种基…

晨持绪科技:抖音店铺运营思路

在抖音这个充满活力与创意的平台上,店铺运营不仅仅是一种商业行为,它更是一种艺术的展示。如同画家在画布上勾勒出色彩斑斓的画面,抖音店铺的运营者们也在平台上精心策划着每一个细节,以吸引更多的目光和流量。 内容创作。内容是吸…

注意!!2024《信息系统运行管理员》易混淆知识点来了,赶紧收藏

宝子们,在复习信息系统运行管理员中,是不是觉得有很多知识点含义比较相近,很多友友刚看的时候估计会像我一样迷迷糊糊的,作为一个软考老鸟,在这里给大家整理了信息系统运行管理员学习过程中易混淆的知识点,…

瑞数信息:智能防护新时代,看AI如何筑起网络防线

AI时代,网络安全危与机并行。 尤其是近年来大火的大模型,对于网络安全行业的影响与其他行业有所不同,一方面,AI能够通过大幅降低了安全攻击的门槛,网络威胁的复杂性和多样性不断增加,如自动化攻击、零日漏…

AWS亚马逊云服务器:强大的云计算服务

AWS亚马逊云服务器(Amazon Web Services,简称AWS)是亚马逊公司推出的一项云计算服务。作为全球领先的云计算服务提供商,AWS为个人、企业提供了稳定、可靠且安全的云计算服务。AWS亚马逊云服务器的出现,极大地改变了传统…

SALOME源码分析:View Model

作为一款开源的CAx(CAD/CAE/CAM)软件集成平台,为了实现各个Module支持不同的数据显示与交互方案,出于扩展性的考虑,SALOME引入了View Model,用以支持OpenGL、OCC、VTK、ParaView、Qwt等数据显示与交互实现。 本文将以OCCViewer、…