推荐阅读
http://fancyerii.github.io/books/mfcc/
1. Mel滤波器如何生成的
Mel滤波器是一种用于语音信号处理的滤波器,通常用于语音识别、语音合成和音频处理等任务中。它的设计基于人类听觉系统对声音的频率响应的特性。
Mel滤波器的生成过程如下:
选择一个三角滤波器组(Triangular filter bank),通常包括20-40个三角滤波器。每个三角滤波器的中心频率和带宽都是根据梅尔刻度(Mel scale)来确定的,梅尔刻度是一种基于人耳感知音高的非线性频率刻度。
计算三角滤波器组在频域上的响应。每个滤波器的响应函数是一个三角形,在中心频率处取到最大值,然后向左右两边逐渐变小,直到频率为0为止。
将每个滤波器的响应函数与频谱图进行卷积,得到每个滤波器在频域上的输出。这个输出代表了在该频段内声音的强度,相当于将原始信号分成了若干个不同频率的带通信号。
取每个滤波器输出的对数作为特征向量。这样做的原因是人耳的感知是对数刻度的,因此对数变换可以更好地模拟人耳对声音的感知。
这样就得到了一个Mel滤波器组,它将语音信号分成了若干个不同的频带,每个频带的强度可以用一个对数值表示。这些对数值通常被用作声学特征,在语音识别等任务中进行分类和建模。
1.1 生成Mel 滤波器的代码
import numpy as np
import scipy.signal as signal
# 定义参数
sample_rate = 16000 # 采样率
num_filters = 40 # 滤波器组的数量
min_freq = 0 # 最小频率
max_freq = sample_rate / 2 # 最大频率
num_fft_points = 2048 # FFT的点数
# 计算梅尔刻度
mel_min = 0
mel_max = 2595 * np.log10(1 + max_freq / 700)
mel_centers = np.linspace(mel_min, mel_max, num_filters + 2)
# 将梅尔刻度转换为频率
freq_centers = 700 * (10**(mel_centers / 2595) - 1)
# 计算滤波器组的频率响应

文章介绍了Mel滤波器的生成过程,它是基于人耳感知声音特性的滤波器,常用于语音识别和音频处理。通过计算梅尔刻度、频率响应和离散余弦变换得到滤波器组的系数。此外,还讨论了Gamma滤波器,一种用于预加重的高通滤波器,常用于增强高频信号,提高语音质量。
最低0.47元/天 解锁文章
635

被折叠的 条评论
为什么被折叠?



