使用signal.butter實現數字信號的低通濾波

一、signal.butter函數概述

signal.butter函數是scipy.signal庫中的一個函數,用於設計巴特沃斯濾波器。該函數有四個參數,分別是濾波器的階數、正常化截止頻率、濾波器類型和濾波器模式。其中,濾波器階數控制了濾波器的降噪效果,正常化截止頻率決定了濾波器的截止頻率,並影響了濾波器的通帶衰減和阻帶衰減。

二、使用signal.butter實現數字信號的低通濾波

數字信號處理是數字電子技術的應用領域之一。在實際應用中,由於信號可能受到各種雜訊的干擾,需要利用濾波器進行降噪。低通濾波器是一種能夠通過濾波器的信號頻率截止限制來濾除高頻信號的濾波器,廣泛應用於信號處理領域。

下面是一個使用signal.butter函數實現數字信號低通濾波的代碼示例:

import numpy as np
from scipy import signal

# 生成採樣率為1000Hz,頻率為10Hz、50Hz的數字信號
t = np.linspace(0, 1, 1000, endpoint=False)
x = np.sin(2 * np.pi * 10 * t) + 0.5 * np.sin(2 * np.pi * 50 * t)

# 設計2階低通濾波器,截止頻率為30Hz
b, a = signal.butter(2, 30, 'lowpass', fs=1000)

# 使用濾波器對信號進行降噪
y = signal.filtfilt(b, a, x)

在上面的代碼中,首先生成了一個採樣頻率為1000Hz、頻率包括10Hz和50Hz的信號x。然後利用signal.butter函數設計了一個2階低通濾波器,截止頻率為30Hz。最後,利用signal.filtfilt函數對信號進行低通濾波,並得到濾波後的信號y。

三、使用matplotlib庫對濾波器效果進行可視化

為了觀察低通濾波器的濾波效果,我們可以使用matplotlib庫進行可視化。
在下面的代碼示例中,我們將想要進行低通濾波的信號x和濾波器輸出的信號y在時域和頻域上進行了繪圖對比。

import matplotlib.pyplot as plt

# 時域繪圖
plt.figure()
plt.plot(t, x, label='Original signal')
plt.plot(t, y, label='Filtered signal')
plt.xlabel('Time [sec]')
plt.grid()
plt.legend()

# 頻域繪圖
Fx = np.fft.fft(x)
Fy = np.fft.fft(y)
freqs = np.fft.fftfreq(len(x), 1.0 / 1000)
plt.figure()
plt.plot(freqs, np.abs(Fx), label='Original signal')
plt.plot(freqs, np.abs(Fy), label='Filtered signal')
plt.xlabel('Frequency [Hz]')
plt.xlim(0, 100)
plt.grid()
plt.legend()

plt.show()

在上面的代碼中,首先對信號x和信號y進行了時域上的繪製,並將繪圖結果顯示在一個圖形化界面上。接著,對信號x和信號y在頻域上進行了繪製,並將繪圖結果顯示在另外一個圖形化界面上。在頻域繪圖中,我們繪製了信號頻譜的幅值譜,可以清晰地看到濾波器將高頻信號濾除的效果。

四、總結

本文主要介紹了使用signal.butter函數實現數字信號低通濾波的方法,並演示了利用matplotlib庫對濾波器效果進行可視化的過程。這種濾波器在實際應用中有很多用途,例如在語音識別、圖像處理等領域中都有廣泛應用。

原創文章,作者:WZFCX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333592.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WZFCX的頭像WZFCX
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相關推薦

  • C++ Signal:簡單實用的信號與槽機制

    一、Signal是什麼? Signal(信號)是C++中實現觀察者模式最常用的工具之一,是一種機制,允許對象間的通信,使得某一對象改變時,與之相關的對象能夠收到通知並進行響應。 S…

    編程 2024-10-10

發表回復

登錄後才能評論