当前位置: 首页 > news >正文

Mel Frequency Cepstral Coefficients (MFCCs)

wiki里说
在声音处理中,梅尔频率倒谱( MFC ) 是声音的短期功率谱的表示,基于非线性梅尔频率标度上的对数功率谱的线性余弦变换。
倒谱和MFC 之间的区别在于,在 MFC 中,频带在梅尔尺度上等距分布,这比正常频谱中使用的线性间隔频带更接近人类听觉系统的响应。这种频率扭曲可以更好地表示声音,例如,在可能会降低传输带宽的音频压缩中以及音频信号的存储要求。
梅尔频率倒谱系数( MFCC ) 是共同构成 MFC 的系数。它们源自音频剪辑的一种倒谱表示。

信号的梅尔频率倒谱系数 (MFCC) 是一小组特征(通常为 10-20),它们简明地描述了 spectral envelope 的​​整体形状。在MIR中,它常被用来描述音色。
本文参考了Gender identification of a speaker using MFCC and GMM论文中描述的MFCC把语音转换为参数方法
将一个语音信号转换为MFCC要以下几个步骤:

在这里插入图片描述

  1. 预加重滤波器 pre-emphasis filter 滤波

让采样后的信号通过一个滤波器,并调整高低频率的强度。浊音区域的频谱通过预加重进行补偿,预加重会放大高频区域并执行滤波。简单描述实现就是:
在这里插入图片描述
α是滤波器的系数,常为0.95-0.97
但是这是很多年前因为有限的计算资源迫使开发人员创建的方法。
对于信号消歧而言,较高的频率比较低的频率更为重要。
在古早的时间里,应用模拟预加重滤波器会更容易获得好结果,因此大家都用了预加重。
预加重的另一个好特性是它有助于处理录音中经常出现的 DC offset 直流偏移,因此它可以改进基于能量的语音活动检测。
而现代语音识别不需要预加重。预加重在后期通过 channel normalization(如倒谱均值归一化)进行补偿,因此它应该根本没有影响。

预加重的好处:

  • 平衡频谱
  • 避免 Fourier transform 操作期间的数值问题
  • 改善信号噪声比 Signal-to-Noise Ratio (SNR)
  1. framing , 汉明窗Hamming window处理

与所有语音分析方法一样,MFCC 方法也适用于语音具有固定声学特征的短部分。即进行分帧framing,一帧有N个采样点:
这些部分通常选择为 20-30 毫秒,沿信号偏移 10-15 毫秒。
在大多数情况下,对整个信号进行傅里叶变换没有意义,因为会随着时间的推移丢失信号的频率轮廓(时序信息?)。通过对这个短时间帧进行傅立叶变换,我们可以通过连接相邻帧来获得信号频率轮廓的良好近似(这句话没怎么理解这个良好近似)。每一帧都包含其前一帧的一部分。
语音处理中的典型帧大小范围为 20 到 40 毫秒,连续帧之间有 50% (+/-10%) 的重叠。
通常的设置是:
帧大小为 25 ms,frame_size = 0.025 和 10 ms stride(15ms overlap ),frame_stride = 0.01。
在语音应用中,汉明窗通常是首选。其公式为:
在这里插入图片描述
可以用np.hamming

  1. 频率频谱图

语音信号被划分成分析窗口,通过FFT从时域变换到频域。这种表示语音信号频率分布的符号称为幅度谱。
amplitude spectrum / magnitude spectrum
我们现在可以做一个 N- 对每一帧进行点FFT计算频谱,也称为短时傅立叶变换(STFT),其中 N通常为 256 或 512,NFFT = 512;然后使用以下公式计算功率谱
在这里插入图片描述
也就是对每一帧进行FFT变换

  1. Mel-Frequency Warping

为了将获得的振幅谱转换为 mel-scale,使用相对于 mel-scale 线性放置的滤波器组。该组由重叠 50% 的三角形带通滤波器组成。一般滤波系数取值在20~30之间。

  1. 创建mel filter bank

mel filter的公式:
在这里插入图片描述
滤波组的公式:

  1. 计算log mel spectrum

计算滤波器组和频率频谱图的内积,再进行log计算
有点不懂的是他算的公式是20 * np.log10(fbank),有点不太清楚这个公式是哪里来的。感觉用librosa库的会多一些

  1. 离散余弦变换 (DCT)的 liftering

主要作用是对滤波器组进行去相关操作,丢弃除了自己设定的num_ceps以外的值,这些值代表滤波器组系数的快速变化,而这些细节对自动语音识别 (ASR) 没有什么帮助,然后将lift与mfcc相乘计算外积,以弱化较高的 MFCC,据称可以改善噪声信号中的语音识别
cep_lifter 是 Cepstral liftering order
num_ceps 是 number of cepstral coefficients (C1-C12, omitting C0)
lift = 1 + (cep_lifter / 2.0) * np.sin(np.pi * np.arange(num_ceps) / cep_lifter)

http://www.lryc.cn/news/11778.html

相关文章:

  • 第七讲---贪心(上课)
  • 计算机如何思考与图灵完备
  • 惠普LaserJet M1005 MFP报错b2
  • 网络协议(TCP/IP)
  • 2023河南省第二届职业技能大赛郑州市选拔赛“网络安全” 项目比赛样题任务书
  • 6、流程控制
  • Linux中最基本常见命令总结
  • Python学习-----模块2.0(常用模块之时间模块-->time)
  • XXL-JOB分布式任务调度框架(二)-策略详解
  • JAVA练习54-最小栈
  • Redis-哨兵模式以及集群
  • 过滤器和监听器
  • Acwing 第 91 场周赛
  • JavaEE|套接字编程之UDP数据报
  • 如何使用Python创建一个自定义视频播放器
  • Elasticsearch进行优化-使用索引拆分(Split)和索引收缩(shrink )
  • 数论 —— 高斯记号(Gauss mark)
  • 【随笔】程序员眼中的 CPU,“没有灵魂的躯体”
  • 算法的时间复杂度
  • 华为OD机试 - 叠放书籍(Python) | 机试题算法思路 【2023】
  • 进程间通信(重点)
  • Reverse入门[不断记录]
  • 如何实现外网访问内网ip?公网端口映射或内网映射来解决
  • [acwing周赛复盘] 第 91 场周赛20230218
  • 蓝桥12届
  • 华为OD机试 - 斗地主(JS)
  • 【MyBatis】| MyBatis的注解式开发
  • python自制PDF转换.PNG格式图片(按每页生成图片完整源码)小工具!
  • Go 数组和切片反思
  • win10电脑性能优化设置