我有一个以 1 kHz 采样的信号,我想在第三个八度频带中进行分析。为此,我定义了具有比例带宽的巴特沃斯滤波器。这适用于较高的频率,但会产生非常奇怪的低频结果。我错过了什么?绘制的是巴特沃斯滤波器的频率响应。我在 Hanning 过滤器中发现了类似的行为,并认为我遗漏了一些基本的东西。
用于定义过滤器的代码:
import scipy
import numpy as np
from scipy import signal
from matplotlib import pyplot as plt
def butter_bandpass(lowcut, highcut, fs, order=5, label=None):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b, a = signal.butter(order, [low, high], btype='band')
w, h = signal.freqz(b,a,worN=2000)
plt.plot((fs * 0.5 / np.pi) * w, abs(h), label=label)
return b, a
center_freqs = np.array([0.5* 2 ** (n * 1 / 3.) for n in range(0, 29)])
center_freqs.sort()
lower_freqs = 2. ** (-1 / 6.) * center_freqs
for lf in lower_freqs:
butter_bandpass(lf, lf*2**(1/3.), fs=1000, order=5)
plt.show()