我有一个音频信号通过butter
带通滤波器:
def bandpass_filter(y, sr, lowcut, highcut):
# Setup parameters.
nyquist_rate = sr / 2.
filter_order = 1001
normalized_low = lowcut / nyquist_rate
normalized_high = highcut / nyquist_rate
b, a = butter(filter_order, [normalized_low, normalized_high], btype='bandpass')
y = lfilter(b, a, y)
return y
然后我使用这个返回的、经过过滤的信号,使用一个名为Librosa的库来检测一些音调。在
当我打电话给:
^{pr2}$其中y
是过滤后的音频信号,我得到以下错误:
librosa.util.exceptions.ParameterError
ParameterError: Audio buffer is not finite everywhere
这基本上来自于以下检查:
if not np.isfinite(y).all():
raise ParameterError('Audio buffer is not finite everywhere')
为什么会这样?在
您正试图创建一个顺序为1001的Butterworth filter(这是一个IIR过滤器),使用传递函数系数(b,a)表示。传递函数是一个有理函数,它是两个多项式的比值,高阶多项式的求值很容易受到数值误差的影响。你想做的事注定要失败。在
一些建议:
尝试使用much低阶,并尝试使用^{} 过滤信号:
相关问题 更多 >
编程相关推荐