gpt4 book ai didi

pandas - 从 Python 中的信号中删除尖峰

转载 作者:行者123 更新时间:2023-12-03 23:08:05 27 4
gpt4 key购买 nike

例如,我有一个来自呼吸记录的信号,其中有很多由于打哈欠引起的尖峰。我曾尝试使用 pandas 中的滚动均值函数将其删除,但没有帮助。此图上的绿色空间是使用滚动平均值的结果。

import pandas as pd

RESP=pd.DataFrame(RESP)
RESP_AV=pd.rolling_mean(RESP,50)

我对过滤数据不太了解,我在 Pandas 中找不到任何其他方法来消除这些尖峰,所以我的问题是在哪里寻找答案。
RESP.head() 的结果是:
 0 -2562.863389
1 -2035.020403
2 -2425.538355
3 -2554.280563
4 -2242.438367
6.7636961937

enter image description here

最佳答案

以下函数将从数组 yi 中删除最高尖峰并用抛物线替换尖峰区域:

import numpy as np
def despike(yi, th=1.e-8):
'''Remove spike from array yi, the spike area is where the difference between
the neigboring points is higher than th.'''
y = np.copy(yi) # use y = y1 if it is OK to modify input array
n = len(y)
x = np.arange(n)
c = np.argmax(y)
d = abs(np.diff(y))
try:
l = c - 1 - np.where(d[c-1::-1]<th)[0][0]
r = c + np.where(d[c:]<th)[0][0] + 1
except: # no spike, return unaltered array
return y
# for fit, use area twice wider then the spike
if (r-l) <= 3:
l -= 1
r += 1
s = int(round((r-l)/2.))
lx = l - s
rx = r + s
# make a gap at spike area
xgapped = np.concatenate((x[lx:l],x[r:rx]))
ygapped = np.concatenate((y[lx:l],y[r:rx]))
# quadratic fit of the gapped array
z = np.polyfit(xgapped,ygapped,2)
p = np.poly1d(z)
y[l:r] = p(x[l:r])
return y
要去除许多尖峰:找到最高尖峰的位置,将此功能应用于尖峰周围的狭窄区域,重复。

关于pandas - 从 Python 中的信号中删除尖峰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37556487/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com