python带通滤波_python中的fft带通滤波器(fft bandpass filter in python)

这篇博客探讨了如何在Python中使用scipy库的fft进行带通滤波。作者遇到的问题是在进行FFT滤波后得到的是复数,而非预期的滤波结果。解决方案涉及到正确设置滤波频率范围,并使用rfft和irfft进行实数信号的傅立叶变换。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值