filtfilt
শূন্য-পর্বের ফিল্টারিং, এটি ফিল্টার করার সাথে সাথে সিগন্যালটি স্থানান্তরিত করে না। যেহেতু সমস্ত ফ্রিকোয়েন্সিতে পর্যায়টি শূন্য, এটি লিনিয়ার-ফেজও। সময়ে পিছনে ফিল্টার করা আপনার ভবিষ্যতের পূর্বাভাসের প্রয়োজন, সুতরাং এটি কেবলমাত্র সংকেতের রেকর্ডিংয়ের অফলাইনে প্রক্রিয়াকরণের জন্য, "অনলাইন" রিয়েল-লাইফ অ্যাপ্লিকেশনগুলিতে ব্যবহার করা যাবে না।
lfilter
কেবলমাত্র বাস্তব জীবনের বৈদ্যুতিন ফিল্টারের অনুরূপ কেবল সময়ের মধ্যে আগত ফিল্টারিং। এটি জিরো-ফেজ হতে পারে না। এটি লিনিয়ার-ফেজ (প্রতিসম এফআইআর) হতে পারে, তবে সাধারণত হয় না। সাধারণত এটি বিভিন্ন ফ্রিকোয়েন্সিগুলিতে বিলম্বের বিভিন্ন পরিমাণ যুক্ত করে।
একটি উদাহরণ এবং চিত্র এটি সুস্পষ্ট করা উচিত। যদিও ফিল্টারগুলির ফ্রিকোয়েন্সি প্রতিক্রিয়াটির মাত্রা অভিন্ন (শীর্ষে বাম এবং উপরের ডানদিকে), শূন্য-পর্বের লোপপাস লাইনগুলি মূল সংকেত সহ কেবল উচ্চ ফ্রিকোয়েন্সি সামগ্রী ছাড়াই, যখন ন্যূনতম পর্যায়ে ফিল্টারিং কার্যকারী উপায়ে সংকেতকে বিলম্ব করে :
from __future__ import division, print_function
import numpy as np
from numpy.random import randn
from numpy.fft import rfft
from scipy import signal
import matplotlib.pyplot as plt
b, a = signal.butter(4, 0.03, analog=False)
# Show that frequency response is the same
impulse = np.zeros(1000)
impulse[500] = 1
# Applies filter forward and backward in time
imp_ff = signal.filtfilt(b, a, impulse)
# Applies filter forward in time twice (for same frequency response)
imp_lf = signal.lfilter(b, a, signal.lfilter(b, a, impulse))
plt.subplot(2, 2, 1)
plt.semilogx(20*np.log10(np.abs(rfft(imp_lf))))
plt.ylim(-100, 20)
plt.grid(True, which='both')
plt.title('lfilter')
plt.subplot(2, 2, 2)
plt.semilogx(20*np.log10(np.abs(rfft(imp_ff))))
plt.ylim(-100, 20)
plt.grid(True, which='both')
plt.title('filtfilt')
sig = np.cumsum(randn(800)) # Brownian noise
sig_ff = signal.filtfilt(b, a, sig)
sig_lf = signal.lfilter(b, a, signal.lfilter(b, a, sig))
plt.subplot(2, 1, 2)
plt.plot(sig, color='silver', label='Original')
plt.plot(sig_ff, color='#3465a4', label='filtfilt')
plt.plot(sig_lf, color='#cc0000', label='lfilter')
plt.grid(True, which='both')
plt.legend(loc="best")