我使用以下代码在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赫兹的频率。有什么线索表明我错在哪里吗?我观察到滤波器阶数越低,截止频率就越低。
我添加了验证上述Konstantin Purtov代码的函数,这样您就可以看到顺序和截止频率之间的关系。代码主要来自Warren Weckesser。
我希望这能帮助你:
由于我的声誉很低,我无法对你的问题发表评论:“截止和过滤顺序之间的关系是什么?”这不是你原来问题的答案。
对于FIR滤波器,对于给定的截止频率,对于高阶滤波器,脉冲响应图的斜率(| H(f)| vs f)更陡。因此,为了在不需要的频率范围内获得更高的衰减,可以增加滤波器阶数。但是,当滤波器阶数如此之高以至于脉冲响应是一个理想的盒函数时,会发生什么呢?你会看到一种类似符号间干扰(数字通信中的ISI)的效果。当截止频率与采样频率之比变小时(考虑频域中盒函数宽度与sinc函数主瓣宽度之间的关系),这种影响的强度增大。
我第一次观察到这一点是在TI DSP微控制器上实现一个非常窄带的低通IIR滤波器时。TI库将滤波器实现为级联的双四元结构,以处理众所周知的截断效应。这仍然不能解决这个问题,因为这个问题并不仅仅是由于截断造成的。我解决这个问题的方法是使用抗混叠滤波器,然后对输入信号进行下采样,然后使用我想要的低通IIR滤波器。
我知道你正在实现一个HPF,这是一个在频域中翻译的LPF。希望这能回答你的一些问题。让我知道下采样对你是否有效。
相关问题 更多 >
编程相关推荐