2016-05-14 181 views
1

我试图制作一个带通滤波器。当我正在处理它时,我注意到一些奇怪的东西。 滤波器的频率响应正常(scipy.signal.freqz)。但是当我将它应用于正弦信号时,滤波器的形状会发生变化。Python中的带通滤波器形状

图3 =信号的频谱

图根据freqz()函数

图滤波器1 =频谱施加的信号

最后过滤器的4 =频率响应为什么的形状滤波器(也是幅度)在应用于信号时会发生变化?

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

你能分享生成这些可视化的代码吗?我认为这会有所帮助。 –

+0

添加了代码,对不起我的错 – Reactionic

回答

2

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

+0

谢谢。当我尝试了很多正弦函数,它就像你说的那样工作 http://s32.postimg.org/loh24vtrp/wow.png – Reactionic