2012-12-06 24 views
10

czy jest jakaś przygotowana funkcja w pythonie, aby zastosować filtr (na przykład filtr Butterwortha) do danego sygnału? Szukam takiej funkcji w 'scipy.signal', ale nie znalazłem żadnych przydatnych funkcji więcej niż te z filtrem. faktycznie chcę, aby ta funkcja zawęziła filtr z sygnałem.Jak zastosować filtr do sygnału w pythonie

+1

Co próbowaliście? 'lfilter' może zaimplementować dowolny filtr LTI, który możesz wymyślić. – acjay

+0

Zobacz także: http://www.scipy.org/Cookbook/ButterworthBandpass, http://www.scipy.org/Cookbook/FiltFilt, http://www.scipy.org/Cookbook/FIRFilter, http : //www.scipy.org/Cookbook/ApplyFIRFilter –

Odpowiedz

23

Tak! Istnieją dwa:

scipy.signal.filtfilt 
scipy.signal.lfilter 

Istnieją również sposoby splotu (convolve i fftconvolve), ale to nie są prawdopodobnie odpowiednie dla danego zastosowania, ponieważ wiąże filtrów IIR.

Pełna przykładowy kod:

b, a = scipy.signal.butter(N, Wn, 'low') 
output_signal = scipy.signal.filtfilt(b, a, input_signal) 

można przeczytać więcej na temat argumentów i wykorzystanie zawartych w dokumentacji. Jednym z nich jest to, że Wn jest ułamkiem częstotliwości Nyquista (połowa częstotliwości próbkowania). Jeśli więc częstotliwość próbkowania wynosi 1000 Hz, a chcesz uzyskać wartość graniczną 250 Hz, powinieneś użyć Wn=0.5.

Nawiasem mówiąc, bardzo polecam korzystanie z filtfilt przez lfilter (która jest nazywana po prostu filter w Matlab) dla większości aplikacji. Ponieważ documentation określa:

Ta funkcja stosuje filtr liniowy dwa razy, raz do przodu i raz do tyłu. Połączony filtr ma fazę liniową.

Co oznacza, że ​​każda wartość wyjścia jest funkcją zarówno "przeszłych" i "przyszłych" punktów w danych wejściowych jednakowo. Dlatego nie będzie on w tyle na wejściu.

W przeciwieństwie do tego, lfilter używa tylko "przeszłych" wartości wejścia. To nieuchronnie wprowadza opóźnienie czasowe, które będzie zależeć od częstotliwości. Oczywiście jest kilka aplikacji, dla których jest to pożądane (w szczególności filtrowanie w czasie rzeczywistym), ale większość użytkowników znacznie lepiej radzi sobie z filtfilt.

+0

dzięki, mój problem został rozwiązany. –

Powiązane problemy