Python中的带通滤镜形状

时间:2016-05-14 20:53:45

标签: python python-2.7 filter signal-processing

我正在尝试制作带通滤波器。当我正在努力的时候,我发现了一些奇怪的东西。 过滤器的频率响应正常(scipy.signal.freqz)。但是当我在正弦信号上应用它时,滤波器的形状会发生变化。

图3 =信号频谱

图4 =根据freqz()函数

的滤波器的频率响应

图1 =滤波器应用信号的频谱

最后,为什么在将信号应用于信号时,滤波器的形状(也是幅度)会发生变化?

Spectrum of my signal

Response of filter according to freqz function

Filter applied signal spectrum

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()

1 个答案:

答案 0 :(得分:2)

当您应用滤波器时,您将信号f(w)的傅立叶变换(即频谱)乘以滤波函数g(w)。因此,时域中的输出是IFFT(f(w)g(w)),而谱域中的g(w)f(w)就是你的图1.显然,该产品将与信号和滤波器。在您的情况下,滤波器和信号不会重叠很多,这会导致一些奇怪的结果。尝试添加角频率为0.5 pi的第二个sin波,你会看到一个非常不同的结果。