Table of Contents
Filters are essential components in communications engineering, used to modify signals by allowing certain frequencies to pass while blocking others. SciPy, a Python library, provides tools to design and analyze various types of filters efficiently. This article presents practical examples of designing filters with SciPy, focusing on their application in communications systems.
Designing a Low-Pass Filter
A low-pass filter allows signals with frequencies below a cutoff point to pass through while attenuating higher frequencies. Using SciPy, you can design such filters with the butter function, which creates Butterworth filters known for a flat frequency response.
Example code to design a low-pass Butterworth filter:
from scipy.signal import butter, lfilter
order = 4
cutoff = 0.2
b, a = butter(order, cutoff, btype='low', analog=False)
Once designed, the filter can be applied to signals using lfilter.
Designing a Bandpass Filter
Bandpass filters allow signals within a specific frequency range to pass while blocking frequencies outside that range. SciPy’s butter function can also be used to create these filters.
Example code for a bandpass Butterworth filter:
lowcut = 0.1
highcut = 0.3
b, a = butter(order, [lowcut, highcut], btype='band', analog=False)
Filter Analysis and Visualization
SciPy provides tools to analyze filter characteristics, such as frequency response. The freqz function computes the frequency response, which can be visualized using Matplotlib.
Example code to plot the frequency response:
from scipy.signal import freqz
import matplotlib.pyplot as plt
w, h = freqz(b, a)
plt.plot(w, abs(h))
Plot shows how the filter affects different frequencies, aiding in design validation.