语谱图(四) Mel spectrogram 梅尔语谱图

本文详细介绍了语谱图的生成过程,包括信号预处理、频谱映射和时间拼接。重点讲解了梅尔滤波器组的概念,它模拟人耳对不同频率的感知,尤其在语音识别和处理中起到关键作用。梅尔滤波器组由等高的三角滤波器构成,通过线性间隔出梅尔频率点并映射回Hz频率,再将这些频率映射到DFT频率,形成滤波器中心频率。最后,梅尔滤波器组用于功率谱,生成梅尔谱图,该图谱在人声识别等领域广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

1. 语谱图的产生

前文介绍了语谱图的产生

这里在简单小结如下,

  1. 信号预处理,预加重, 分帧,
  2. 加窗, 进行STFT 变换, 生成频谱图;
  3. 对单帧信号的频谱进行映射, (2,3 步骤如下图)

在这里插入图片描述

  1. 将映射后的多帧频谱, 在时间维度上进行拼接, 从而形成整个语谱图(如下图所示);
    在这里插入图片描述

2. 频谱图的类型

这里需要说明的是,在实际使用中, 根据需求不同, 频谱图有三种类型

  1. 线性振幅谱
  2. 对数振幅谱 (对数振幅谱中各谱线的振幅都作了对数计算,所以其纵坐标的单位是dB分贝))
  3. 功率谱

而这里要介绍Mel_ spectrogram 语谱图, 其中的频谱类型使用的便是功率谱

3. Mel 语谱图

  1. 在上述语谱图的形成过程中,其中频谱采用的功率谱,而后使用多帧的功率谱形成最终的语谱图;

Mel 语谱图便是将, 功率谱构成的语谱图, 经过Mel 滤波器组后,得到的语谱图, 称之为Mel 语谱图。

4. Mel 滤波器组的概念:

所谓梅尔滤波器组是一个等高的三角滤波器组,每个滤波器的起始点在上一个滤波器的中点处。其对应的频率在梅尔尺度上是线性的,因此称之为梅尔滤波器组。

每个滤波器对应的频率可以将最大频率(下图中是4000,我们这里是22.05k)用上文中提到的公式转换成梅尔频率,在梅尔尺度上线性分成若干个频段,再转换回实际频率尺度即可。

实际操作时,将每个滤波器分别和功率谱pow_frames进行点乘,获得的结果即为该频带上的能量(energy)。

4.1 Mel 滤波器的个数与 N f f t N_{fft} Nfft 点数之间的关系

梅尔滤波器fbank是一个(mel_N, 513)的矩阵,其中, N f f t N_{fft} Nfft 点数这里取得513, mel_N代表对应的梅尔滤波器个数,这个值不能太大,因为这里我们一共只有513个点,

如果mel_N取得太大,会导致前面几个滤波器的长度都是0 (因为低频的梅尔滤波器特别窄)

在这里插入图片描述

梅尔滤波器的数量越多,因为低频的梅尔滤波器特别窄, 所以低频滤波器分到的频率点数越少,相应的就需要 N F F T N_{FFT} NFFT

提高,否则低频滤波器对应的点数太少甚至为0.

5. Mel 滤波器组产生

主要有分为三步:

  1. 将信号的最高频率和最低频率 映射到Mel 频率上, 根据Mel 滤波器的个数K, 在Mel低频率和Mel 高频率之间 线性间隔出 K 个附加 点, 共 (K + 2) 个 Mel频率点 m ( i ) m(i) m(i)

映射到Mel 尺度上的原因,该Mel尺度的频率是拟合了人耳的线性变换,

  1. 将上述步骤一中, (K + 2) 个Mel 频率点 映射到(K + 2) 普通频率HZ上 h ( i ) h(i) h(i)

  2. 将步骤二中, (K + 2) 个普通频率取整到最接近的 frequency bin 频率上 f ( i ) f(i) f(i); 此时得到的 f ( i ) f(i) f(i) 即是各个滤波器的中心频率, 生成三角滤波器;

以下,依次介绍上面的三个步骤

5.1 Mel 滤波器中等间隔的Mel 频率:

求出 Mel 滤波器中,对应的等间隔的Mel频率:

假如有10个Mel滤波器
(在实际应用中通常一组Mel滤波器组有26个滤波器。)

首先要选择一个最高频率和最低频率,通常最高频率为8000Hz,最低频率为300Hz。

使用从频率转换为Mel频率的公式将300Hz转换为401.25Mels,8000Hz转换为2834.99Mels,

由于有10个滤波器,每个滤波器针对两个频率的样点,样点之间会进行重叠处理,因此需要12个点,意味着需要在401.25和2834.99之间再线性间隔出10个附加点,如:

m(i)=401.25,622.50,843.75,1065.00,1286.25,1507.50,1728.74,1949.99,2171.24,2392.49,2613.74,2834.99

5.2 Mel 频率转换为 HZ:

现在使用从Mel频率转换为频率的公式将它们转换回赫兹:

def hz2mel(hz):
    '''把频率hz转化为梅尔频率'''
    return 2595 * numpy.log10(1 + hz / 700.0)

def mel2hz(mel):
    '''把梅尔频率转化为hz'''
    return 700 * (10 ** (mel / 2595.0) - 1)

h(i)=300,517.33,781.90,1103.97,1496.04,1973.32,2554.33,3261.62,4122.63,5170.76,6446.70,8000

5.3 Mel 滤波器中心频率

将频率映射到最接近的DFT频率
其中 257 = N , N取值为 DFT 长度中的有效保留值,
在这里插入图片描述

此时得到的 f(i), 便是 Mel 滤波器组中 各个滤波器的中心频率;

在这里插入图片描述

  • Mel 滤波器的频率响应

在得到各个滤波器的中心频率后, 便可知 各个滤波器对应的频率响应;

在这里插入图片描述

将功率谱形成的语谱图通过 Mel 滤波器组,便得到 Mel Spectrogram;

在这里插入图片描述

6. 简介 梅尔刻度

  1. 为什么需要 Mel 刻度:
    MEL刻度模拟人耳对不同频率语音的感知:
    研究表明,人类对频率的感知并不是线性的,并且对低频信号的感知要比高频信号敏感。对1kHz以下,与频率成线性关系,对1kHz以上,与频率成对数关系。频率越高,感知能力就越差。

例如,人们可以比较容易地发现500和1000Hz的区别,但很难发现7500和8000Hz的区别。

  1. Mel (melody)刻度定义:
    这时,梅尔标度(the Mel Scale)被提出,它是Hz的非线性变换,对于以mel scale为单位的信号,可以做到人们对于相同频率差别的信号的感知能力几乎相同。

M = 2595 * log10 (1 + f / 700 ) ; M 被称作 Mel 频率;
在这里插入图片描述
观察上图: 从Hz到mel的映射图,由于它们是log的关系,当频率较小时,mel随Hz变化较快;当频率很大时,mel的上升很缓慢,曲线的斜率很小。

这说明了人耳对低频音调的感知较灵敏,在高频时人耳是很迟钝的,梅尔标度滤波器组启发于此, 从而 梅尔滤波器 的 分布情况 受启发于此。

 等面积 Mel filter
如上图所示,40个三角滤波器组成滤波器组,低频处滤波器密集,门限值大,高频处滤波器稀疏,门限值低。恰好对应了频率越高人耳越迟钝这一客观规律。上图所示的滤波器形式叫做等面积梅尔滤波器(Mel-filter bank with same bank area),在人声领域(语音识别,说话人辨认)等领域应用广泛,但是如果用到非人声领域,就会丢掉很多高频信息。

  等高  Mel filter

如上图所示,如果用到非人声领域,这时常用的是等高梅尔滤波器Mel-filter bank with same bank height;

### Mel谱图的概念 Mel谱图是一种用于音频处理的技术,能够有效地捕捉人类听觉系统的特性。它基于Mel尺度设计,这是一种模拟人耳感知声音的方式。Mel尺度反映了人耳对不同频率的声音敏感度的变化规律[^1]。 具体来说,低频区域的人耳更加敏感,而高频区域则相对迟钝。因此,Mel谱图通过对频率轴进行非线性变换来更好地匹配这种感知特征。这一变换通常由`Hz`到`Mel`的转换函数实现: ```python import numpy as np def hz2mel(hz): '''把频率hz转化为尔频率''' return 2595 * np.log10(1 + hz / 700.0) def mel2hz(mel): '''把尔频率转化为hz''' return 700 * (10 ** (mel / 2595.0) - 1) ``` 上述代码定义了两个核心函数:`hz2mel` 和 `mel2hz`,分别实现了从赫兹到Mel以及反向的转换操作。 --- ### Mel谱图的生成方法 为了生成Mel谱图,一般遵循以下技术流程: #### 1. 预处理阶段 输入信号通常是时间域上的原始音频数据。首先对其进行分帧(Frame Splitting),并应用窗口函数(如汉明窗)以减少边界效应。 #### 2. 转换至频域 利用快速傅里叶变换(FFT)将每一帧的时间域信号转换为频域表示。这一步骤的结果是一个复数数组,其中包含了幅度和相位信息。 #### 3. 应用Mel滤波器组 构建一系列三角形滤波器覆盖整个频带范围,并将其应用于FFT后的功率谱上。这些滤波器的设计依据就是前面提到的`hz2mel`映射关系,从而使得最终得到的能量分布更接近于人的听力感受。 计算公式如下所示: \[ M_k = \sum_{n=0}^{N-1}{|X(n)|^2 H_k(f_n)} \] 这里 \(M_k\) 表示第k个Mel滤波器输出;\(H_k(f)\) 是对应位置处的增益系数;\(|X(n)|^2\) 则代表离散Fourier Transform之后取模平方所得数值。 #### 4. 取对数运算 由于动态范围较大,所以最后还要加上一个自然对数步骤以便压缩这个区间内的差异程度。 #### 5. 进行DCT变换 如果目的是提取MFCCs,则还需要执行离散余弦变换(DCT),选取前若干维作为特征向量。 以下是完整的Python代码示范如何生成Mel Spectrogram: ```python import librosa import matplotlib.pyplot as plt # 加载音频文件 y, sr = librosa.load(librosa.ex('trumpet')) # 计算Mel Spectrogram S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128,fmax=8000) # 将功率转成dB单位 S_dB = librosa.power_to_db(S, ref=np.max) # 显示图像 plt.figure(figsize=(10, 4)) librosa.display.specshow(S_dB, x_axis='time', y_axis='mel', sr=sr, fmax=8000) plt.colorbar(format='%+2.0f dB') plt.title('Mel-frequency spectrogram') plt.tight_layout() plt.show() ``` 此脚本使用LibROSA库加载一段示例音乐(`'trumpet'`),并通过内置功能完成Mel谱图绘制工作。 --- ### 在语音模型中的作用 在现代深度学习框架下,比如Wav2Vec2或者HuBERT等先进架构中,Mel谱图经常充当重要的中间表征形式之一。例如,在Waveform-to-MFCC路径当中,先要经历这样的转化过程才能进一步送入神经网络内部去挖掘高层次语义含义[^2]。 另外值得注意的是,当涉及到实际部署场景时,可能还会考虑优化参数设置等问题。像TensorFlow提供了一些特定命令选项让用户可以灵活调整训练细节,确保达到最佳性能表现[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值