问题描述
我正在使用 python 3.5 处理 .wav 信号并尝试提取 mfcc、mfcc delta、mfcc delta-deltas 和其他信号特征。但是只有 mfcc delta 会引发错误:
Traceback (most recent call last):
mfcc_delta = librosa.feature.delta(mfcc)
File "C:\Users\hp\AppData\Local\Programs\Python\python35\lib\site-packages\librosa\feature\utils.py",line 116,in delta
**kwargs)
File "C:\Users\hp\AppData\Local\Programs\Python\python35\lib\site-packages\scipy\signal\_savitzky_golay.py",line 337,in savgol_filter
coeffs = savgol_coeffs(window_length,polyorder,deriv=deriv,delta=delta)
File "C:\Users\hp\AppData\Local\Programs\Python\python35\lib\site-packages\scipy\signal\_savitzky_golay.py",line 139,in savgol_coeffs
coeffs,_,_ = lstsq(A,y)
File "C:\Users\hp\AppData\Local\Programs\Python\python35\lib\site-packages\scipy\linalg\basic.py",line 1226,in lstsq
% (-info,lapack_driver))
ValueError: illegal value in 4-th argument of internal None
我正在处理以下代码:
import librosa
import numpy as np
import librosa
from scipy import signal
import scipy.stats
def preprocess_cough(x,fs,cutoff = 6000,normalize = True,filter_ = True,downsample = True):
#Preprocess Data
if len(x.shape)>1:
x = np.mean(x,axis=1) # Convert to mono
if normalize:
x = x/(np.max(np.abs(x))+1e-17) # norm to range between -1 to 1
if filter_:
b,a = butter(4,fs_downsample/fs,btype='lowpass') # 4th order butter lowpass filter
x = filtfilt(b,a,x)
if downsample:
x = signal.decimate(x,int(fs/fs_downsample)) # Downsample for anti-aliasing
fs_new = fs_downsample
return np.float32(x),fs_new
audio_data = 'F:/test/'
files = librosa.util.find_files(audio_data,ext=['wav'])
x,fs = librosa.load(myFile,sr=48000)
arr,f = preprocess_cough(x,fs)
mfcc = librosa.feature.mfcc(y=arr,sr=f,n_mfcc=13)
mfcc_delta = librosa.feature.delta(mfcc)
mfcc_delta2 = librosa.feature.delta(mfcc,order=2)
当我删除 mffcs 计算并计算其他 wav 信号特征时,错误不会再次出现。此外,我尝试删除 n_mfcc=13
参数,但错误仍然存在。
输出样本和 mfcc 变量的形状
[-3.86701782e+02 -4.14421021e+02 -4.67373749e+02 -4.76989105e+02
-4.23713501e+02 -3.71329285e+02 -3.47003693e+02 -3.19309082e+02
-3.29547089e+02 -3.32584625e+02 -2.78399109e+02 -2.43284348e+02
-2.47878128e+02 -2.59308533e+02 -2.71102844e+02 -2.87314514e+02
-2.58869965e+02 -6.01125565e+01 1.66160011e+01 -8.58060551e+00
-8.49179382e+01 -9.29880371e+01 -9.96001358e+01 -1.04499428e+02
-3.65511665e+01 -3.82106819e+01 -8.69802475e+01 -1.22267052e+02
-1.70187592e+02 -2.35996841e+02 -2.96493286e+02 -3.39086365e+02
-3.59514771e+02]
形状是(13,33)
任何人都可以帮助我吗?
提前致谢
解决方法
与 this question 中提出的问题有些相似,该问题与 librosa
遵从 scipy
的底层数值运算的复杂性有关。 SciPy
取决于正在安装的 LAPACK 库。所以一开始我会检查 if you have it installed。
此外,您可能希望逐步调试脚本以进入 SciPy 并检查从 librosa.feature.delta
渗透到 scipy.signal.savgol_filter
的实际值,这可能会在您交叉时告诉您原因-用 documentation 检查它们。