Python Librosa:用于计算 MFCC 特征的默认帧大小是多少?
Python Librosa : What is the default frame size used to compute the MFCC features?
使用 Librosa 库,我将音频文件 1319 秒的 MFCC 特征生成矩阵 20 X 56829
。这里的20
代表没有MFCC特性(我可以手动调整)。但是我不知道它是如何将音频长度分割成56829
的。处理音频所需的帧大小是多少?
import numpy as np
import matplotlib.pyplot as plt
import librosa
def getPathToGroundtruth(episode):
"""Return path to groundtruth file for episode"""
pathToGroundtruth = "../../../season01/Audio/" \
+ "Season01.Episode%02d.en.wav" % episode
return pathToGroundtruth
def getduration(episode):
pathToAudioFile = getPathToGroundtruth(episode)
y, sr = librosa.load(pathToAudioFile)
duration = librosa.get_duration(y=y, sr=sr)
return duration
def getMFCC(episode):
filename = getPathToGroundtruth(episode)
y, sr = librosa.load(filename) # Y gives
data = librosa.feature.mfcc(y=y, sr=sr)
return data
data = getMFCC(1)
简答
您可以通过更改 stft 计算中使用的参数来指定更改长度。以下代码将使输出的大小加倍 (20 x 113658)
data = librosa.feature.mfcc(y=y, sr=sr, n_fft=1012, hop_length=256, n_mfcc=20)
长答案
Librosa 的 librosa.feature.mfcc()
函数实际上只是作为 librosa 的 librosa.feature.melspectrogram()
函数的包装器(它是 librosa.core.stft
和 librosa.filters.mel
函数的包装器)。
所有与音频信号分割有关的参数——即帧和重叠值——都指定用于 Mel 标度功率谱函数(以及为嵌套核心函数指定的其他可调参数)。您将这些参数指定为 librosa.feature.mfcc()
函数中的关键字参数。
所有额外的 **kwargs
参数被提供给 librosa.feature.melspectrogram()
,随后提供给 librosa.filters.mel()
默认情况下,梅尔标度功率谱图window和跳跃长度如下:
n_fft=2048
hop_length=512
所以假设您使用默认采样率 (sr=22050
),您的 mfcc 函数的输出是有意义的:
输出长度=(秒)*(采样率)/(hop_length)
(1319) * (22050) / (512) = 56804 样本
您可以调整的参数如下:
Melspectrogram Parameters
-------------------------
y : np.ndarray [shape=(n,)] or None
audio time-series
sr : number > 0 [scalar]
sampling rate of `y`
S : np.ndarray [shape=(d, t)]
power spectrogram
n_fft : int > 0 [scalar]
length of the FFT window
hop_length : int > 0 [scalar]
number of samples between successive frames.
See `librosa.core.stft`
kwargs : additional keyword arguments
Mel filter bank parameters.
See `librosa.filters.mel` for details.
如果你想进一步指定用于定义梅尔标度功率谱图的梅尔滤波器组的特性,你可以调整以下
Mel Frequency Parameters
------------------------
sr : number > 0 [scalar]
sampling rate of the incoming signal
n_fft : int > 0 [scalar]
number of FFT components
n_mels : int > 0 [scalar]
number of Mel bands to generate
fmin : float >= 0 [scalar]
lowest frequency (in Hz)
fmax : float >= 0 [scalar]
highest frequency (in Hz).
If `None`, use `fmax = sr / 2.0`
htk : bool [scalar]
use HTK formula instead of Slaney
Librosa 文档:
使用 Librosa 库,我将音频文件 1319 秒的 MFCC 特征生成矩阵 20 X 56829
。这里的20
代表没有MFCC特性(我可以手动调整)。但是我不知道它是如何将音频长度分割成56829
的。处理音频所需的帧大小是多少?
import numpy as np
import matplotlib.pyplot as plt
import librosa
def getPathToGroundtruth(episode):
"""Return path to groundtruth file for episode"""
pathToGroundtruth = "../../../season01/Audio/" \
+ "Season01.Episode%02d.en.wav" % episode
return pathToGroundtruth
def getduration(episode):
pathToAudioFile = getPathToGroundtruth(episode)
y, sr = librosa.load(pathToAudioFile)
duration = librosa.get_duration(y=y, sr=sr)
return duration
def getMFCC(episode):
filename = getPathToGroundtruth(episode)
y, sr = librosa.load(filename) # Y gives
data = librosa.feature.mfcc(y=y, sr=sr)
return data
data = getMFCC(1)
简答
您可以通过更改 stft 计算中使用的参数来指定更改长度。以下代码将使输出的大小加倍 (20 x 113658)
data = librosa.feature.mfcc(y=y, sr=sr, n_fft=1012, hop_length=256, n_mfcc=20)
长答案
Librosa 的 librosa.feature.mfcc()
函数实际上只是作为 librosa 的 librosa.feature.melspectrogram()
函数的包装器(它是 librosa.core.stft
和 librosa.filters.mel
函数的包装器)。
所有与音频信号分割有关的参数——即帧和重叠值——都指定用于 Mel 标度功率谱函数(以及为嵌套核心函数指定的其他可调参数)。您将这些参数指定为 librosa.feature.mfcc()
函数中的关键字参数。
所有额外的 **kwargs
参数被提供给 librosa.feature.melspectrogram()
,随后提供给 librosa.filters.mel()
默认情况下,梅尔标度功率谱图window和跳跃长度如下:
n_fft=2048
hop_length=512
所以假设您使用默认采样率 (sr=22050
),您的 mfcc 函数的输出是有意义的:
输出长度=(秒)*(采样率)/(hop_length)
(1319) * (22050) / (512) = 56804 样本
您可以调整的参数如下:
Melspectrogram Parameters
-------------------------
y : np.ndarray [shape=(n,)] or None
audio time-series
sr : number > 0 [scalar]
sampling rate of `y`
S : np.ndarray [shape=(d, t)]
power spectrogram
n_fft : int > 0 [scalar]
length of the FFT window
hop_length : int > 0 [scalar]
number of samples between successive frames.
See `librosa.core.stft`
kwargs : additional keyword arguments
Mel filter bank parameters.
See `librosa.filters.mel` for details.
如果你想进一步指定用于定义梅尔标度功率谱图的梅尔滤波器组的特性,你可以调整以下
Mel Frequency Parameters
------------------------
sr : number > 0 [scalar]
sampling rate of the incoming signal
n_fft : int > 0 [scalar]
number of FFT components
n_mels : int > 0 [scalar]
number of Mel bands to generate
fmin : float >= 0 [scalar]
lowest frequency (in Hz)
fmax : float >= 0 [scalar]
highest frequency (in Hz).
If `None`, use `fmax = sr / 2.0`
htk : bool [scalar]
use HTK formula instead of Slaney
Librosa 文档: