【发布时间】:2016-12-26 05:14:25
【问题描述】:
我使用以下代码在 python 中实现了一个高通滤波器:
from scipy.signal import butter, filtfilt
import numpy as np
def butter_highpass(cutoff, fs, order=5):
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
b, a = butter(order, normal_cutoff, btype='high', analog=False)
return b, a
def butter_highpass_filter(data, cutoff, fs, order=5):
b, a = butter_highpass(cutoff, fs, order=order)
y = filtfilt(b, a, data)
return y
rawdata = np.loadtxt('sampleSignal.txt', skiprows=0)
signal = rawdata
fs = 100000.0
cutoff = 100
order = 6
conditioned_signal = butter_highpass_filter(signal, cutoff, fs, order)
我将此滤波器应用于 100 kHz 电压信号,它适用于 >= 60 Hz 的截止频率。但它在下面不起作用。我想切断所有低于 10 Hz 的频率。任何提示我的错误在哪里?我观察到的是滤波器的阶数越低,截止频率就越低。
【问题讨论】:
-
你在哪里设置你的通带?你有你可以粘贴的公式吗?和你的
filtfilt()函数。和你的butter()函数 -
@Daniel Lee:我编辑了我的问题。 butter() 和 filtfilt() 函数来自 scipy.signal。
-
你能举一些例子,你是如何使用它的,观察到的行为是什么样的,以及预期的行为会是什么?寻求调试帮助的问题需要明确的问题陈述。 在这里工作得很好 vs. 在那里不工作不够清楚。
-
@moooeeeep:我添加了一个样本信号和一个如何应用过滤器的示例。
标签: python scipy signal-processing