2013-05-03 90 views
0

我使用这个过滤器的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; highcut = 4; fs = 61

我过滤我的信号,其中有61个样本以61 Hz采样(因此它的长度为10秒)。

当我看这已经被过滤通过该带通滤波器的信号的频谱,我看到:

enter image description here

在此光谱中的PEEK是在0.61赫兹。这不在0.7到4赫兹的范围内。

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

+0

我无法重现您的结果。我使用你的代码得到了一个非常好的带通滤波器。你怎么生成这个阴谋? – 2013-05-03 09:21:08

+0

哦,这是你的过滤数据。 – 2013-05-03 09:23:47

+0

是的,它已经被卷入。 taps_hamming = bandpass_firwin(ntaps,0.7%,4,FS = FS) Ynew3 = np.convolve(Ynew2,taps_hamming, “相同”) – Ojtwist 2013-05-03 09:25:55

回答

0

你的过滤器并不神奇 - 对带宽有内在的限制。如果您确实需要紧急切断,请尝试使用更多的水龙头。

尽管您使用的点击越多,您就越需要考虑边缘效应以及您如何处理它们(因为边缘假设会越来越深入地侵入数据块)。也许你想要在边缘平滑滚动?或者镜像和重复的数据?也许你可以完全忽略它...

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

+0

我不认为任何边缘效应对我来说都很重要。我只需要0.7赫兹和4赫兹之间的峰值频率。 – Ojtwist 2013-05-03 09:47:05

+0

峰值频率是您的最终目标吗?你是否也需要滤波后的信号?如果您确实不需要滤波信号,则可以在未滤波信号的频谱中找到0.7 Hz和4 Hz之间的峰值。 – 2013-05-03 10:23:58

+0

@Ojtwist,所以我给了你一个解决方案......你应该*知道边缘效应的影响,因为它们可以相当明显。同样,我也赞同沃伦的评论。 – 2013-05-03 11:09:28