Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python_speech_功能获取96个MFCC功能_Python_Librosa - Fatal编程技术网

使用python_speech_功能获取96个MFCC功能

使用python_speech_功能获取96个MFCC功能,python,librosa,Python,Librosa,我想用96个MFCC功能训练我的模型。我使用了Librosa,但没有得到一个有希望的结果。 然后我尝试使用python_speech_特性,但是我最多只能获得26个特性!为什么? 这是同一音频文件的形状 使用Librosa x = librosa.feature.mfcc(audio, rate, n_mfcc=96) x.shape # (96, 204) 使用python\u speech\u功能 mfcc_feature = pySpeech.mfcc(audio, rate, 0.0

我想用96个MFCC功能训练我的模型。我使用了Librosa,但没有得到一个有希望的结果。 然后我尝试使用python_speech_特性,但是我最多只能获得26个特性!为什么? 这是同一音频文件的形状

使用
Librosa

x = librosa.feature.mfcc(audio, rate, n_mfcc=96)
x.shape  # (96, 204)
使用
python\u speech\u功能

mfcc_feature = pySpeech.mfcc(audio, rate, 0.025, 0.01, 96, nfft=1200, appendEnergy = True)
mfcc_feature.shape # output => (471, 26)

任何想法

因此,
librosa
python\u speech\u功能的实现在结构上甚至理论上都有所不同。根据文件:

  • (还)
您会注意到输出是不同的,
librosa mfcc output shape=(n\u mels,t)
python\u speech\u features output=(num\u frames,num\u cep)
,因此您需要转换其中一个。您还将注意到,在
python\u speech\u功能中,任何大于26的
num\u ceps
值都不会改变返回的MFCC
num\u ceps
中的任何内容,这是因为您受到所用过滤器数量的限制。因此,您也必须增加该值。此外,您需要确保使用了类似的值(一个是使用samples count,另一个是持续时间),因此您必须解决这个问题。另外,
python\u speech\u特性
接受scipy read函数返回的int16值,但librosa需要float32,因此必须转换读取数组或使用
librosa.load()
。下面是一个小片段,其中包括前面的更改:

import librosa
import numpy as np
import python_speech_features
from scipy.io.wavfile import read


# init fname
fname = "sample.wav"

# read audio 
rate, audio = read(fname)

# using librosa 
lisbrosa_mfcc_feature = librosa.feature.mfcc(y=audio.astype(np.float32), 
                                             sr=rate,
                                             n_mfcc=96,
                                             n_fft=1024,
                                             win_length=int(0.025*rate),                                            
                                             hop_length=int(0.01*rate))
print(lisbrosa_mfcc_feature.T.shape)

# using python_speech_features
psf_mfcc_feature = python_speech_features.mfcc(signal=audio, 
                                               samplerate=rate, 
                                               winlen=0.025,
                                               winstep=0.01, 
                                               numcep=96,
                                               nfilt=96,
                                               nfft=1024, 
                                               appendEnergy=False)
print(psf_mfcc_feature.shape)


# check if size is the same
print(lisbrosa_mfcc_feature.shape == psf_mfcc_feature.shape)
我对此进行了测试,结果如下:

(9003, 96)
(9001, 96)
False

它不是完全相同的输出,但只是相差两帧。顺便说一句,值不会相同,因为每个库使用不同的方法来计算MFCC,
python_speech_features
使用,而librosa使用

也许你可以微笑。从音频中提取特征非常好。可以根据需要生成100多个功能。