我正在用 Python 进行基本的信号处理。我正在使用 scipy 的 filtfilt 过滤信号的连续块(以获得零相位)。我想在过滤后连接几个块,但是,每个过滤块似乎与其他过滤块不正确连续。有没有办法解决这个问题?
我想指出,当我对 scipy 的 lfilter 执行相同操作时,在每次迭代中将“初始条件”(zi)参数传递给它时,过滤后的块似乎是连续的。
任何帮助将不胜感激。
麦克风
我正在用 Python 进行基本的信号处理。我正在使用 scipy 的 filtfilt 过滤信号的连续块(以获得零相位)。我想在过滤后连接几个块,但是,每个过滤块似乎与其他过滤块不正确连续。有没有办法解决这个问题?
我想指出,当我对 scipy 的 lfilter 执行相同操作时,在每次迭代中将“初始条件”(zi)参数传递给它时,过滤后的块似乎是连续的。
任何帮助将不胜感激。
麦克风
filtfilt 的 SciPy 和 MATLAB 实现都使用信号开头和结尾的镜像部分(长度大致等于滤波器的脉冲响应)来减少初始条件对滤波信号的影响(即减少振铃通过连接信号的镜像部分人为地延长信号)。
由于这些镜像信号部分可能不等于前后数据块中的数据,因此过滤块的级联不会产生连续信号。
一种可能的解决方法可能是从原始信号中选择更长的数据块,并在应用滤波器之后但在连接之前从头到尾丢弃一部分。请注意,这可能需要 FIR 滤波器才能正常工作,但如果数据块足够长,我希望 IIR 滤波器的结果可以接受。