我正在尝试制作带通滤波器。当我正在努力的时候,我发现了一些奇怪的东西。 过滤器的频率响应正常(scipy.signal.freqz)。但是当我在正弦信号上应用它时,滤波器的形状会发生变化。
图3 =信号频谱
图4 =根据freqz()函数
的滤波器的频率响应图1 =滤波器应用信号的频谱
最后,为什么在将信号应用于信号时,滤波器的形状(也是幅度)会发生变化?
from scipy.signal import butter, lfilter, buttord, freqz
import numpy as np
import matplotlib.pyplot as plt
import math
t = np.arange(0, 8192, 1)
data = 1+np.sin(.15*np.pi*t + np.pi/2)
b, a = butter(6, [0.35, 0.55], btype='band')
y = lfilter(b, a, data)
y = np.fft.rfft(y)
y = np.abs(y)
x = np.fft.rfft(data)
x = np.abs(x)
w, h = freqz(b, a, worN=4096)
plt.figure(1)
plt.plot(np.arange(0,4097,1),y)
plt.figure(2)
plt.plot(np.arange(0,8192,1), data)
plt.figure(3)
plt.plot(np.arange(0,4097,1), x)
plt.figure(4)
plt.plot(np.arange(0,4096,1),np.abs(h))
plt.show()
答案 0 :(得分:2)
当您应用滤波器时,您将信号f(w)的傅立叶变换(即频谱)乘以滤波函数g(w)。因此,时域中的输出是IFFT(f(w)g(w)),而谱域中的g(w)f(w)就是你的图1.显然,该产品将与信号和滤波器。在您的情况下,滤波器和信号不会重叠很多,这会导致一些奇怪的结果。尝试添加角频率为0.5 pi的第二个sin波,你会看到一个非常不同的结果。