2016-05-14 225 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