CẬP NHẬT:
Tôi đã tìm thấy Công thức Scipy dựa trên câu hỏi này! Vì vậy, đối với bất kỳ ai quan tâm, hãy truy cập ngay: Nội dung »Xử lý tín hiệu» Butterworth Bandpass
Tôi đang gặp khó khăn để đạt được điều mà ban đầu có vẻ là một nhiệm vụ đơn giản là triển khai bộ lọc thông dải Butterworth cho mảng không có 1-D (chuỗi thời gian).
Các thông số tôi phải bao gồm là sample_rate, tần số cắt TRONG HERTZ và có thể là thứ tự (các thông số khác, như suy hao, tần số tự nhiên, v.v. đối với tôi khó hiểu hơn, vì vậy bất kỳ giá trị "mặc định" nào cũng vậy).
Những gì tôi có bây giờ là cái này, có vẻ như hoạt động như một bộ lọc thông cao nhưng tôi không có cách nào chắc chắn liệu mình có làm đúng hay không:
def butter_highpass(interval, sampling_rate, cutoff, order=5):
nyq = sampling_rate * 0.5
stopfreq = float(cutoff)
cornerfreq = 0.4 * stopfreq # (?)
ws = cornerfreq/nyq
wp = stopfreq/nyq
# for bandpass:
# wp = [0.2, 0.5], ws = [0.1, 0.6]
N, wn = scipy.signal.buttord(wp, ws, 3, 16) # (?)
# for hardcoded order:
# N = order
b, a = scipy.signal.butter(N, wn, btype='high') # should 'high' be here for bandpass?
sf = scipy.signal.lfilter(b, a, interval)
return sf
Các tài liệu và ví dụ khó hiểu và tối nghĩa, nhưng tôi muốn triển khai biểu mẫu được trình bày trong phần khen thưởng được đánh dấu là "cho dải thông". Các dấu chấm hỏi trong phần nhận xét cho thấy nơi tôi chỉ sao chép và dán một số ví dụ mà không hiểu chuyện gì đang xảy ra.
Tôi không phải là kỹ sư điện hay nhà khoa học, chỉ là một nhà thiết kế thiết bị y tế cần thực hiện một số lọc thông dải khá đơn giản trên các tín hiệu EMG.