首页 > 解决方案 > 带通滤波器输出和傅里叶变换

问题描述

我正在尝试消除此波形中不需要的噪声和其他一些频率: 修整信号

如下图所示,它有很多噪音: 噪音

我使用 numpy 应用快速傅立叶变换将其转换为频域:(channelA 和 time 是 numpy 数组,channelA 存储电压值)

fY = np.fft.fft(channelA)
freq = np.fft.fftfreq(len(channelA), time[1]-time[0])

这是变换: fft 放大时: fft 放大 我在 python 中使用 scipy 应用了一个巴特沃斯带通滤波器。这是代码:

low = 100 / (0.5 * 2e6)   # nyq = 1/2 * fs
high = 1e3 / (0.5 * 2e6)
sos = sp.butter(1, [low, high], btype='bandpass', output='sos')
y = sp.sosfiltfilt(sos, channelA)

这里我的采样率为 2M (2e6),我的通带频率为 100-1kHz。应用滤波器后,信号似乎已经失去了噪声,但开始时的电压变为负值。我不懂为什么。有人可以解释为什么会这样吗? 滤波信号 放大以显示没有噪音: 无噪音

当我应用高通滤波器时电压变为负值。如果我只应用低通滤波器,噪声就会被消除。(可以使用相同的功能应用高通和低通滤波器)

这是滤波信号的变换: 过滤后的fft 放大: 过滤后的 fft 放大

可以看出,小于 100Hz 的频率仍然存在,而 350Hz 左右的频率已被移除。我试图将注意力集中在 350-400Hz 左右的频率上,并希望在不扭曲信号的同时消除其余频率。为什么会发生这种情况,我应该怎么做才能做到这一点?

PS对不起,这篇文章有点长,但我没有另一种解释方式。

标签: pythonfftnoise-reductionbutterworthbandpass-filter

解决方案


推荐阅读