Mel滤波器的原理

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

推荐阅读

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)

# 计算滤波器组的频率响应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值