你离成功已经很接近了,就像
Mike指出的那样,但这里有一种不同的方法更容易理解。你可以设置一个变量来保存过滤后的信号,并返回Af的一维数组,然后应用上述公式,这个公式非常简单(这些振幅的平方和)。
像这样过滤信号。
from scipy.signal import butter, lfilter
def butter_bandpass(lowcut, highcut, fs, order=5):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b, a = butter(order, [low, high], btype='band')
return b, a
def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
b, a = butter_bandpass(lowcut, highcut, fs, order=order)
y = lfilter(b, a, data)
return y
现在假设y
是您的原始信号,您需要信号中5Hz的能量成分,
#let fs = 250
#let order = 5
oneD_array_of_amps_of_fiveHz_component = butter_bandpass_filter(y, 4, 6, 250, 5)
#calculate energy like this
energy_of_fiveHz_comp = sum([x*2 for x in oneD_array_of_amps_of_fiveHz_component])
sum(abs(f[F-d:F+d]) ** 2)
有什么问题吗? - Mike