[英]Setting Parameters for a Butterworth Filter
我正在處理腦電波數據,並且第一次嘗試使用巴特沃斯濾波器。
這里有很多關於堆棧交換的有用資源(i) python 中的巴特沃斯濾波器和這里(ii) 如何使用 Scipy.signal.butter 實現帶通巴特沃斯濾波器
利用這些資源,我實現了以下代碼:
from scipy.signal import butter, sosfilt, sosfreqz
def butter_bandpass(lowcut, highcut, fs, order=5):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
sos = butter(order, [low, high], analog=False, btype='band', output='sos')
return sos
def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
sos = butter_bandpass(lowcut, highcut, fs, order=order)
y = sosfilt(sos, data)
return y
我正在處理的數據在左側圖上,我嘗試過濾它在右側:
我相信我遇到的問題是參數。
階數:設置為 5。階數 5 的頻率響應看起來沒問題
低切:設置為排除低於 0.5 Hz 的任何內容
高切:設置為過濾掉 60 hz 以上的任何內容
FS/Sample Rate/Waves:我們能夠每秒收集 500 個數據點,所以我將其設置為 500
N:350。我們正在處理超過 700 毫秒的數據,但每隔一毫秒才采樣一次
查看我的數據,似乎我們在 700 ms 周期內有大約 2 個正弦波與 11 個更高頻率的波相結合……我是否應該能夠查看此並將低切設置為 2,將高切設置為更大比11? 我已經嘗試在這一點上迭代幾十個值......
感謝任何試圖提供幫助的人。 過去兩天我一直在試圖解決這個問題,但遇到了麻煩。
想想如果用零填充信號會發生什么。
你會突然跳到~821000。
另請注意,帶通濾波器在頻率 0 處增益為 0,這意味着直流分量將被過濾,如果在過濾前從信號中減去平均值,您可能會獲得更好的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.