2016-05-14 3 views
1

Я пытался создать полосовой фильтр. Пока я работал над этим, я заметил что-то странное. Частотная характеристика фильтра в порядке (scipy.signal.freqz). Но когда я применил его по синусоидальному сигналу, меняется форма фильтра.Форма полосы пропускания в Python

Рисунок 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() 
+0

Не могли бы вы поделиться кодом, создавшим эти визуализации? Я думаю, это было бы полезно. –

+0

Добавлен код, извините, моя ошибка – Reactionic

ответ

2

При применении фильтра вы умножающий преобразование Фурье (т.е. спектра) сигнала е (ш) с функцией фильтра г (ш). Таким образом, выход во временной области является IFFT (f (w) g (w)) и просто g (w) f (w) в спектральной области, которая является вашей цифрой 1. Ясно, что продукт будет отличаться от как сигнал, так и фильтр. В вашем случае фильтр и сигнал не перекрываются очень сильно, что приводит к несколько странному результату. Попробуйте добавить вторую волну sin с угловой частотой 0,5 pi, и вы увидите совсем другой результат.

+0

Спасибо. Когда я попытался с большим количеством функций синуса, он работал, как вы сказали http://s32.postimg.org/loh24vtrp/wow.png – Reactionic