相关包: python_speech_features
这个库提供了一般的用于 ASR(语音识别)的语音特征, 他包含了 MFCCs(梅尔倒谱系数)和 filterbank energies(滤波器组能量?).
MFCC 相关教程:
你需要 numpy 和 scipy 来运行这个库, 这个项目的代码保存在
支持的特征:
python_speech_features.mfcc() - 梅尔倒谱系数
python_speech_features.fbank() - 滤波器组能量(?)
python_speech_features.logfbank() - 对数滤波器组能量
python_speech_features.ssc() - 子带频谱质心特征
使用 MFCC 特征:
- from python_speech_features import mfcc
- from python_speech_features import logfbank
- import scipy.io.wavfile as wav
- (rate,sig) = wav.read("file.wav")
- mfcc_feat = mfcc(sig,rate)
- fbank_feat = logfbank(sig,rate)
- print(fbank_feat[1:3,:])
从这里你可以把特征写入一个文件
python_speech_features 模块提供的函数
- mfcc
- python_speech_features.base.mfcc(signal, samplerate=16000, winlen=0.025, winstep=0.01, numcep=13, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, ceplifter=22, appendEnergy=True, winfunc=<function>)
计算一个音频信号的 MFCC 特征
参数:
signal - 需要用来计算特征的音频信号, 应该是一个 N*1 的数组
samplerate - 我们用来工作的信号的采样率
winlen - 分析窗口的长度, 按秒计, 默认 0.025s(25ms)
winstep - 连续窗口之间的步长, 按秒计, 默认 0.01s(10ms)
numcep - 倒频谱返回的数量, 默认 13
nfilt - 滤波器组的滤波器数量, 默认 26
nfft - FFT 的大小, 默认 512
lowfreq - 梅尔滤波器的最低边缘, 单位赫兹, 默认为 0
highfreq - 梅尔滤波器的最高边缘, 单位赫兹, 默认为采样率 / 2
preemph - 应用预加重过滤器和预加重过滤器的系数, 0 表示没有过滤器, 默认 0.97
ceplifter - 将升降器应用于最终的倒谱系数. 0 没有升降机. 默认值为 22.
appendEnergy - 如果是 true, 则将第 0 个倒谱系数替换为总帧能量的对数.
winfunc - 分析窗口应用于每个框架. 默认情况下不应用任何窗口. 你可以在这里使用 numpy 窗口函数 例如: winfunc=numpy.hamming
返回: 一个大小为 numcep 的 numpy 数组, 包含着特征, 每一行都包含一个特征向量.
- fbank
- python_speech_features.base.fbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, winfunc=<function>)
从一个音频信号中计算梅尔滤波器能量特征
参数:
signal - 需要用来计算特征的音频信号, 应该是一个 N*1 的数组
samplerate - 我们用来工作的信号的采样率
winlen - 分析窗口的长度, 按秒计, 默认 0.025s(25ms)
winstep - 连续窗口之间的步长, 按秒计, 默认 0.01s(10ms)
nfilt - 滤波器组的滤波器数量, 默认 26
nfft - FFT 的大小, 默认 512
lowfreq - 梅尔滤波器的最低边缘, 单位赫兹, 默认为 0
highfreq - 梅尔滤波器的最高边缘, 单位赫兹, 默认为采样率 / 2
preemph - 应用预加重过滤器和预加重过滤器的系数, 0 表示没有过滤器, 默认 0.97
winfunc - 分析窗口应用于每个框架. 默认情况下不应用任何窗口. 你可以在这里使用 numpy 窗口函数 例如: winfunc=numpy.hamming
返回: 2 个值. 第一个是一个包含着特征的大小为 nfilt 的 numpy 数组, 每一行都有一个特征向量. 第二个返回值是每一帧的能量
- logfbank
- python_speech_features.base.logfbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97)
从一个音频信号中计算梅尔滤波器能量特征的对数
参数:
signal - 需要用来计算特征的音频信号, 应该是一个 N*1 的数组
samplerate - 我们用来工作的信号的采样率
winlen - 分析窗口的长度, 按秒计, 默认 0.025s(25ms)
winstep - 连续窗口之间的步长, 按秒计, 默认 0.01s(10ms)
nfilt - 滤波器组的滤波器数量, 默认 26
nfft - FFT 的大小, 默认 512
lowfreq - 梅尔滤波器的最低边缘, 单位赫兹, 默认为 0
highfreq - 梅尔滤波器的最高边缘, 单位赫兹, 默认为采样率 / 2
preemph - 应用预加重过滤器和预加重过滤器的系数, 0 表示没有过滤器, 默认 0.97
返回: 一个包含特征的大小为 nfilt 的 numpy 数组, 每一行都有一个特征向量
- ssc
- python_speech_features.base.ssc(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, winfunc=<function>)
从一个音频信号中计算子带频谱质心特征
参数:
signal - 需要用来计算特征的音频信号, 应该是一个 N*1 的数组
samplerate - 我们用来工作的信号的采样率
winlen - 分析窗口的长度, 按秒计, 默认 0.025s(25ms)
winstep - 连续窗口之间的步长, 按秒计, 默认 0.01s(10ms)
nfilt - 滤波器组的滤波器数量, 默认 26
nfft - FFT 的大小, 默认 512
lowfreq - 梅尔滤波器的最低边缘, 单位赫兹, 默认为 0
highfreq - 梅尔滤波器的最高边缘, 单位赫兹, 默认为采样率 / 2
preemph - 应用预加重过滤器和预加重过滤器的系数, 0 表示没有过滤器, 默认 0.97
winfunc - 分析窗口应用于每个框架. 默认情况下不应用任何窗口. 你可以在这里使用 numpy 窗口函数 例如: winfunc=numpy.hamming
返回: 一个包含特征的大小为 nfilt 的 numpy 数组, 每一行都有一个特征向量
hz2mel
python_speech_features.base.hz2mel(hz)把一个赫兹值转换为梅尔值
参数: hz - 一个单位为 Hz 的值, 他也可以是一个 numpy 数组, 转换按元素进行
返回: 一个单位为 Mels 的值, 如果输入时矩阵, 那么返回的也是对应大小的矩阵
- mel2hz
- python_speech_features.base.mel2hz(mel)
把一个梅尔值转化为赫兹
参数:
mel - 一个单位为 Mels 的值, 他也可以是一个 numpy 数组, 转换按元素进行
返回: 一个单位为 Herz 的值, 如果输入时矩阵, 那么返回的也是对应大小的矩阵
- get_filterbanks
- python_speech_features.base.get_filterbanks(nfilt=20, nfft=512, samplerate=16000, lowfreq=0, highfreq=None)
计算一个梅尔滤波器组. 过滤器存储在行中, 列对应于 FFT 箱. 过滤器以大小为 nfilt *(nfft/2+1)的数组返回.
参数:
nfilt - 滤波器组的滤波器数量, 默认 20
nfft - FFT 的大小, 默认 512
samplerate - 我们用来工作的信号的采样率
lowfreq - 梅尔滤波器的最低边缘, 单位赫兹, 默认为 0
highfreq - 梅尔滤波器的最高边缘, 单位赫兹, 默认为采样率 / 2
返回: 一个包含有滤波器的大小为 nfilt *(nfft/2+1)的数组, 每一行都有一个过滤器.
- lifter
- python_speech_features.base.lifter(cepstra, L=22)
将倒谱提升器应用于倒频谱的矩阵. 这具有增加高频 DCT 系数的幅度的效果.
参数:
cepstra -- 梅尔倒谱矩阵, 大小为 numframes*numcep
L - 提升器的系数, 默认 22,L<=0 禁用
- delta
- python_speech_features.base.delta(feat, N)
从特征向量序列计算 delta 特征.
参数:
feat - 一个大小为特征数量的 numpy 数组, 每一行都有一个特征向量
N - 对于每一帧, 计算 delta 特征根据前后 N 帧
返回: 一个大小为特征数量的 numpy 数组, 包含有 delta 特征, 每一行都有一个 delta 向量
framesig
sigproc 模块提供的函数
python_speech_features.sigproc.framesig(sig, frame_len, frame_step, winfunc=<function>, stride_trick=True)
将信号框成重叠帧.
参数:
sig - 音频信号帧
frame_len - 样品中每一帧的长度
frame_step - 下一帧开始后前一帧开始后的样本数.
winfunc - 分析窗口应用于每个框架. 默认情况下不应用任何窗口.
stride_trick - 使用步长技巧快速计算滚动窗口和窗口倍增
返回: 一个帧的数组, 大小是 frame_len
- deframesig
- python_speech_features.sigproc.deframesig(frames, siglen, frame_len, frame_step, winfunc=<function>)
使用重叠添加过程撤消了 frameig 操作.
参数:
frames - frames 的数组
siglen - 所需信号的长度, 如果未知, 则使用 0. 输出将被截断到 siglen 样本.
frame_len - 样品中每一帧的长度
frame_step - 下一帧开始后前一帧开始后的样本数.
winfunc - 分析窗口应用于每个框架. 默认情况下不应用任何窗口.
返回: 一个 1 维信号
- magspec
- python_speech_features.sigproc.magspec(frames, NFFT)
计算帧中每个帧的幅度谱. 如果帧是 NxD 矩阵, 输出将是 Nx(NFFT/2+1).
参数:
frames - frames 的数组, 每一行就是一帧
NFFT - 使用的 FFT 长度. 如果 NFFT > 帧长度, 帧就是零填充的.
返回: 如果帧是 ND 矩阵, 输出将是 N(nfft/2+1). 每一行都是相应帧的幅度谱.
python_speech_features.sigproc.powspec(frames, NFFT)
计算帧中每个帧的功率谱. 如果帧是 NXD 矩阵, 输出将是 NX(NFFT/2+1).
参数:
frames - frames 的数组, 每一行就是一帧
NFFT - 使用的 FFT 长度. 如果 NFFT > 帧长度, 帧就是零填充的.
返回: 如果帧是 ND 矩阵, 输出将是 N(nfft/2+1). 每一行都是相应帧的功率谱.
- logpowspec
- python_speech_features.sigproc.logpowspec(frames, NFFT, norm=1)
计算帧中每个帧的对数功率谱. 如果帧是 NXD 矩阵, 输出将是 NX(NFFT/2+1).
参数:
frames - frames 的数组, 每一行就是一帧
NFFT - 使用的 FFT 长度. 如果 NFFT > 帧长度, 帧就是零填充的.
norm - 如果范数 = 1, 则对数功率谱被归一化, 使得最大值 (跨越所有帧) 为 0.
返回: 如果帧是 ND 矩阵, 输出将是 N(nfft/2+1). 每一行都是相应帧的对数功率谱.
- preemphasis
- python_speech_features.sigproc.preemphasis(signal, coeff=0.95)
对输入信号进行预加重.
参数:
signal - 过滤器的信号
coeff - 预加重系数, 0 为无, 默认 0.95
返回: 滤波后的信号
来源: http://www.bubuko.com/infodetail-2909138.html