【问题标题】:Bandpass filter not respecting cutoff不考虑截止的带通滤波器
【发布时间】:2013-05-03 09:09:18
【问题描述】:

我在 python 中使用这个过滤器:

def bandpass_firwin(ntaps, lowcut, highcut, fs, window='hamming'):
    nyq = 0.5 * fs
    taps = firwin(ntaps, [lowcut, highcut], nyq=nyq, pass_zero=False,
                  window=window, scale=False)

我的 ntaps=128;低切 = 0.7 ;高切 = 4 ; fs = 61

我过滤了我的信号,它有 610 个以 61 Hz 采样的样本(所以它是 10 秒长)。

当我查看已被此带通滤波器过滤的信号频谱时,我看到了:

此频谱的峰值为 0.61 Hz。不在 0.7 到 4 Hz 的范围内。

这怎么可能? & 我该如何预防?

【问题讨论】:

  • 我无法重现您的结果。使用您的代码,我得到了一个非常好的带通滤波器。你是如何生成这个情节的?
  • 哦,这是您过滤后的数据。
  • 是的,它已经被卷积了。 taps_hamming = bandpass_firwin(ntaps, 0.7, 4, fs=fs) Ynew3 = np.convolve(Ynew2, taps_hamming, "same")
  • 光谱在过滤之前是什么样子的?如果您查看我对其他问题 (stackoverflow.com/questions/16301569/bandpass-filter-in-python/…) 的回答中的图表,您会发现 0.61 Hz 处的增益约为 0.4。
  • 也许图片的长度是两倍,你会得到两倍的答案。

标签: python numpy scipy signal-processing


【解决方案1】:

您的过滤器并不神奇 - 带宽存在固有限制。如果您确实需要紧截止,请尝试使用更多拍子。

不过,您使用的抽头越多,您就越需要考虑边缘效应以及如何处理它们(因为边缘假设越来越深入数据块)。也许您想要在边缘平滑滚动?还是数据的镜像和重复?也许你可以完全忽略它......

卷积的另一种技术是通过简单地乘以所需的频谱直接在频域中进行滤波。这强加了您的信号重复的边缘假设,尽管您可以通过扩展您认为合适的信号来改变这一点。如果你想知道等效 FIR 滤波器的支持,取窗口的 IFFT,你可以看到时间块的开头会拖到开头。

【讨论】:

  • 我认为任何边缘效应对我来说都不重要。我只需要 0.7 Hz 和 4 Hz 之间的窥视频率。
  • 峰值频率是您的最终目标吗?您还需要过滤后的信号吗?如果您真的不需要过滤后的信号,您可以找到未过滤信号频谱的 0.7 Hz 到 4 Hz 之间的峰值。
  • @Ojtwist 所以我给了你一个解决方案......你应该意识到边缘效应的影响,因为它们可能非常明显。另外,我赞同沃伦的评论。
猜你喜欢
  • 2020-08-11
  • 2021-02-24
  • 2023-04-10
  • 1970-01-01
  • 2015-03-05
  • 2019-04-09
  • 2017-01-05
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多