scipy Python中的ECG 60 Hz噪声滤波

to94eoyn  于 2023-05-17  发布在  Python
关注(0)|答案(1)|浏览(162)

我从我工作的实验室开发的采集电路中获得了一些ECG数据,我正在尝试实现一个60 Hz陷波滤波器,以最大限度地减少背景噪声。
代码如下:

from scipy import fft
from scipy import ifft
import matplotlib.pyplot as plt

def notchfilter(ECGdata):
""" Filters the data using notch filter

    Description:
        Digital filter which returns the filtered signal using 60Hz
        notch filter. Transforms the signal into frequency domain
        using the fft function of the Scipy Module. Then, suppresses
        the 60Hz signal by equating it to zero. Finally, transforms
        the signal back to time domain using the ifft function.
    Input:
        ECGdata -- list of integers (ECG data)
    Output:
        ifft(fftECG) -- inverse fast fourier transformed array of filtered ECG data
"""         
fftECG = fft(ECGdata)
for i in range(len(fftECG)):
    if 590<i<620 or 880<i<910: fftECG[i]=0
return ifft(fftECG)

data = open('ECG_LOG4.TXT','r')
y = data.readlines()
data.close()

t = range(len(y))

plt.plot(t,y)
plt.show()

但我得到了这个错误:
“TypeError:无法根据规则'safe'将数组数据从dtype('U1 ')转换为dtype('complex128')。”
输入数据('ECG_LOG4.txt ')是一个带有采样数据的列表:
312\n 319\n 312\n 290\n 296\n 309\n 309\n…
我是一个python乞丐,所以我不知道从哪里开始解决。先谢谢你了。

8gsdolmq

8gsdolmq1#

我设法用一种更干净的方式使用频率来做到这一点。

fs = 160 # pulling rate
N = len(ECGdata)
T = 1/fs
t = np.arange(0,N/fs,T)
f = np.fft.fftfreq(N,T)
fft = np.abs(np.fft.fft(ECGdata))

min = 59.8
max = 60.2

fft[(f>min) & (f<max)] = 0

请记住,您应该微调最小值和最大值。

相关问题