2016-05-14 5 views
1

私はバンドパスフィルタを作成しようとしていました。私はそれに取り組んでいる間、私は奇妙な何かに気づいた。 フィルタの周波数応答はOKです(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)だけです。これはFigure 1です。信号とフィルタの両方。あなたのケースでは、フィルタと信号はあまり重ならないので、やや奇妙な結果につながります。角周波数0.5 piの2番目のsin波を追加してみてください。結果は非常に異なって見えます。

+0

ありがとうございます。私が正弦関数をたくさん試してみたら、それはあなたが言ったように働いた http://s32.postimg.org/loh24vtrp/wow.png – Reactionic