在 Python 中實現低通濾波器
Vaibhhav Khetarpal
2022年12月21日
2021年12月2日
低通濾波器是訊號處理基礎中的一個術語,經常用於過濾訊號以獲得更準確的結果。
本教程將討論低通濾波器以及如何在 Python 中建立和實現它。
低通濾波器用於使頻率低於截止頻率的訊號通過,該頻率保持使用者指定的某個值。所有頻率超過截止頻率的訊號都被削弱。
在 Python 中使用 Scipy
建立低通巴特沃斯濾波器
在 Python 中,我們可以利用 SciPy
庫中的函式來建立低通濾波器。SciPy
是 Scientific Python 的縮寫,是一個用於提供執行訊號處理、優化和統計的函式的庫。該庫還使用下面的 NumPy
庫。
現實世界中存在幾個低通濾波器。但是,我們將在 Python 中建立一個 Butterworth 低通濾波器,因為它具有最大平坦的頻率,這意味著通帶中沒有波紋。這使其成為最流行和最常用的低通濾波器之一。
要在 Python 中成功實現此方法,我們首先需要將 NumPy
、SciPy
和 Matplotlib
模組匯入 Python 程式碼。
以下程式碼使用 SciPy
模組在 Python 中建立低通巴特沃斯濾波器。
import numpy as np
from scipy.signal import butter, lfilter, freqz
import matplotlib.pyplot as plt
def butter_lowpass(cutoff, fs, order=5):
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
b, a = butter(order, normal_cutoff, btype='low', analog=False)
return b, a
def butter_lowpass_filter(data, cutoff, fs, order=5):
b, a = butter_lowpass(cutoff, fs, order=order)
y = lfilter(b, a, data)
return y
# Setting standard filter requirements.
order = 6
fs = 30.0
cutoff = 3.667
b, a = butter_lowpass(cutoff, fs, order)
# Plotting the frequency response.
w, h = freqz(b, a, worN=8000)
plt.subplot(2, 1, 1)
plt.plot(0.5*fs*w/np.pi, np.abs(h), 'b')
plt.plot(cutoff, 0.5*np.sqrt(2), 'ko')
plt.axvline(cutoff, color='k')
plt.xlim(0, 0.5*fs)
plt.title("Lowpass Filter Frequency Response")
plt.xlabel('Frequency [Hz]')
plt.grid()
# Creating the data for filteration
T = 5.0 # value taken in seconds
n = int(T * fs) # indicates total samples
t = np.linspace(0, T, n, endpoint=False)
data = np.sin(1.2*2*np.pi*t) + 1.5*np.cos(9*2*np.pi*t) + 0.5*np.sin(12.0*2*np.pi*t)
# Filtering and plotting
y = butter_lowpass_filter(data, cutoff, fs, order)
plt.subplot(2, 1, 2)
plt.plot(t, data, 'b-', label='data')
plt.plot(t, y, 'g-', linewidth=2, label='filtered data')
plt.xlabel('Time [sec]')
plt.grid()
plt.legend()
plt.subplots_adjust(hspace=0.35)
plt.show()
Author: Vaibhhav Khetarpal
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn