python中的fft带通滤波器(fft bandpass filter in python)
我尝试的是用fft过滤我的数据。 我有一个以500Hz记录的嘈杂信号作为1d阵列。 我的高频应该以20Hz的频率切断,我的低频以10Hz的频率切断。 我试过的是:
fft=scipy.fft(signal)
bp=fft[:]
for i in range(len(bp)):
if not 10
bp[i]=0
ibp=scipy.ifft(bp)
我现在得到的是复杂的数字。 所以有些事情一定是错的。 什么? 我如何纠正我的代码?
What I try is to filter my data with fft. I have a noisy signal recorded with 500Hz as a 1d- array. My high-frequency should cut off with 20Hz and my low-frequency with 10Hz. What I have tried is:
fft=scipy.fft(signal)
bp=fft[:]
for i in range(len(bp)):
if not 10
bp[i]=0
ibp=scipy.ifft(bp)
What I get now are complex numbers. So something must be wrong. What? How can I correct my code?
原文:https://stackoverflow.com/questions/19122157
更新时间:2019-11-04 13:56
最满意答案
值得注意的是, bp的单位数量不一定是以Hz为单位,而是取决于信号的采样频率,您应该使用scipy.fftpack.fftfreq进行转换。 此外,如果你的信号是真实的,你应该使用scipy.fftpack.rfft 。 这是一个最小的工作示例,可过滤掉小于指定数量的所有频率:
import numpy as np
from scipy.fftpack import rfft, irfft, fftfreq
time = np.linspace(0,10,2000)
signal = np.c