Python 低频带通滤波

Python 低频带通滤波,python,python-2.7,matlab,signal-processing,bandpass-filter,Python,Python 2.7,Matlab,Signal Processing,Bandpass Filter,我想知道是否有任何最佳做法可以解决我认为可能引起普遍关注的以下问题 我有一个信号采样40千赫约60秒。该信号包含高达5kHz的频率,但我只对其40Hz分量感兴趣 如何获得稳定的窄带通滤波(约40 Hz)信号,该信号与原始信号具有相同的时基(零滞后)。滤波器还应具有线性相位 计算工作不是问题。使用以下方法设计窄带通滤波器: 然后使用前向-后向滤波器filtfilt在信号上实现: 前向-后向滤波需要对信号进行分段,但始终可以生成重叠较大的分段。在Matlab中,我会尝试butter来设计滤波器。使

我想知道是否有任何最佳做法可以解决我认为可能引起普遍关注的以下问题

我有一个信号采样40千赫约60秒。该信号包含高达5kHz的频率,但我只对其40Hz分量感兴趣

如何获得稳定的窄带通滤波(约40 Hz)信号,该信号与原始信号具有相同的时基(零滞后)。滤波器还应具有线性相位


计算工作不是问题。

使用以下方法设计窄带通滤波器: 然后使用前向-后向滤波器filtfilt在信号上实现:


前向-后向滤波需要对信号进行分段,但始终可以生成重叠较大的分段。

在Matlab中,我会尝试
butter
来设计滤波器。使用零极点增益输出(而不是传递函数的分子和分母,这会导致数值不稳定,即使是低阶滤波器)。然后转换为SOS格式。然后,您可以使用
filtfilt
,它应用过滤器两次:正常和时间反转。确保线性相位;它还有效地使滤波器阶数加倍,并使传递函数的绝对值平方。请参阅示例,当您想要实时过滤某些信号时,设计和应用滤波器是一种很好的方法。如果您只是对操纵某个信号块感兴趣,在进行FFT之前应用一个窗口,然后简单地将不需要的频率单元设置为零,并通过IFFT将操纵的频谱转换回时域,这可能是值得的。从某种意义上说,这种方法就像对你的信号应用一个完美的低通滤波器。这些都是非常有趣的方法。然而,我确实需要实时滤波,因为我需要一个新的信号,它只包含原始信号的40Hz分量,以便进一步处理。不仅仅是原始信号的一部分。我将按照@LuisMendo的建议尝试实现它,以供进一步讨论。实时需求改变了一切。问题中不清楚您是否需要实时性。如果是那样的话,我不能提供任何帮助对不起,我想我弄错了。我的意思是,我已经捕获了信号,然后想要对其进行后处理,这样新信号将只具有原始信号的40 Hz分量,但具有相同的时基和线性相位。然而,我需要处理整个信号,而不仅仅是一大块信号。