日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

巴特沃斯滤波器python_如何用Scipy.signal.bu实现带通巴特沃斯滤波器

發(fā)布時(shí)間:2023/12/2 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巴特沃斯滤波器python_如何用Scipy.signal.bu实现带通巴特沃斯滤波器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

您可以跳過button的使用,而只需為過濾器選擇一個(gè)順序,看看它是否符合您的過濾條件。要生成帶通濾波器的濾波器系數(shù),請(qǐng)將濾波器階數(shù)、截止頻率Wn=[low, high](表示為奈奎斯特頻率的分?jǐn)?shù),即采樣頻率的一半)和頻帶類型btype="band"。

下面是一個(gè)腳本,它定義了兩個(gè)使用巴特沃斯帶通濾波器的便利函數(shù)。當(dāng)作為腳本運(yùn)行時(shí),它生成兩個(gè)圖。其中一個(gè)顯示了相同采樣率和截止頻率下幾個(gè)濾波器階數(shù)的頻率響應(yīng)。另一個(gè)圖展示了濾波器(階數(shù)為6)對(duì)樣本時(shí)間序列的影響。from scipy.signal import butter, lfilter

def butter_bandpass(lowcut, highcut, fs, order=5):

nyq = 0.5 * fs

low = lowcut / nyq

high = highcut / nyq

b, a = butter(order, [low, high], btype='band')

return b, a

def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):

b, a = butter_bandpass(lowcut, highcut, fs, order=order)

y = lfilter(b, a, data)

return y

if __name__ == "__main__":

import numpy as np

import matplotlib.pyplot as plt

from scipy.signal import freqz

# Sample rate and desired cutoff frequencies (in Hz).

fs = 5000.0

lowcut = 500.0

highcut = 1250.0

# Plot the frequency response for a few different orders.

plt.figure(1)

plt.clf()

for order in [3, 6, 9]:

b, a = butter_bandpass(lowcut, highcut, fs, order=order)

w, h = freqz(b, a, worN=2000)

plt.plot((fs * 0.5 / np.pi) * w, abs(h), label="order = %d" % order)

plt.plot([0, 0.5 * fs], [np.sqrt(0.5), np.sqrt(0.5)],

'--', label='sqrt(0.5)')

plt.xlabel('Frequency (Hz)')

plt.ylabel('Gain')

plt.grid(True)

plt.legend(loc='best')

# Filter a noisy signal.

T = 0.05

nsamples = T * fs

t = np.linspace(0, T, nsamples, endpoint=False)

a = 0.02

f0 = 600.0

x = 0.1 * np.sin(2 * np.pi * 1.2 * np.sqrt(t))

x += 0.01 * np.cos(2 * np.pi * 312 * t + 0.1)

x += a * np.cos(2 * np.pi * f0 * t + .11)

x += 0.03 * np.cos(2 * np.pi * 2000 * t)

plt.figure(2)

plt.clf()

plt.plot(t, x, label='Noisy signal')

y = butter_bandpass_filter(x, lowcut, highcut, fs, order=6)

plt.plot(t, y, label='Filtered signal (%g Hz)' % f0)

plt.xlabel('time (seconds)')

plt.hlines([-a, a], 0, T, linestyles='--')

plt.grid(True)

plt.axis('tight')

plt.legend(loc='upper left')

plt.show()

以下是此腳本生成的繪圖:

總結(jié)

以上是生活随笔為你收集整理的巴特沃斯滤波器python_如何用Scipy.signal.bu实现带通巴特沃斯滤波器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。