我没有得到所需的输出,它切断了较低的频率。不管我将其设置为“低”还是“高”。
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
def butter_filter(data, butterCutoffFreq, order=1):
b, a = signal.butter(order, butterCutoffFreq, 'low', analog=True)
y = signal.lfilter(b, a, data)
return y
"""
White noise
"""
N = 1024
dt = np.float64(1)
y = np.random.normal(loc=0.0, scale=1.0, size=N)
t = np.arange(start=0, stop=N, step=dt)
butterCutoffFreq = 0.5 * 1/dt
amps = np.fft.rfft(y)
freqs = np.fft.rfftfreq(y.size, dt)
#plt.plot(freqs, np.abs(amps), color='b')
ampsFiltered = butter_filter(y, butterCutoffFreq)
ampsFiltered = np.fft.rfft(ampsFiltered)
plt.plot(freqs, np.abs(ampsFiltered), color='g')
plt.show()
答案 0 :(得分:0)
您的问题是参数analog=True
删除了它,它将起作用。
lfilter()
只能使用数字滤波器。用模拟滤波器滤波数字信号(假设您的白噪声假定为定期采样)是没有意义的。