gpt4 book ai didi

python - 使用 find_peaks_cwt 在噪声数据中查找峰值

转载 作者:行者123 更新时间:2023-11-28 17:19:31 28 4
gpt4 key购买 nike

我试图在一些非常嘈杂的数据中找到峰值,例如:

在不太了解术语的情况下,我将峰定义为窄(宽度<30)并且比附近区域高出 100000 以上。

我正在尝试使用 scipy 的 find_peaks_cwt,但我不太清楚文档。我尝试了 find_peaks_cwt(my_data, np.arange(1,30)) 但它返回了大量的峰值。然后我尝试添加 noise_perc=60 参数,但这并没有真正解决问题。我也试过使用其他参数,但我真的不明白什么是“脊线”。

我应该做些什么不同的事情? widths=np.arange(1,30) 是否像我想的那样设置了我的宽度要求?如何指定高度要求?

最佳答案

很大程度上取决于您的数据实际意味着什么(或者您认为它们应该意味着什么)。这是一个合成数据的例子:

from scipy.signal import find_peaks_cwt
from matplotlib.pyplot import plot, ylim
from numpy import *
N = 2000
x = arange(N)
pwid = 200.
zideal = sinc(x/pwid - 2)**2 # Vaguely similar to yours
z = zideal * random.randn(N)**2 # adding noise
plot(x, zideal, lw=4)
ylim(0, 1)
zf = find_peaks_cwt(z, pwid/4+zeros(N))
plot(x[zf], zideal[zf], '*', ms=20, color='green')
# Create averaging zones around peaks
xlow = maximum(array(zf) - pwid/2, 0)
xhigh = minimum(array(zf) + pwid/2, x.max())
zguess = 0*xlow # allocate space
for ii in range(len(zf)):
zguess[ii] = z[xlow[ii]:xhigh[ii]].mean()
plot(x[zf], zguess, 'o', ms=10, color='red')

pwidth 缩放 sinc() 函数中峰的宽度。在调用 find_peaks_cwt() 时,使用较大的 widths 值会产生较少的峰(峰密度较低)。最好的结果似乎是将 widths 中的值缩放到大约峰的半峰半宽 (HWHM)。

find_peaks_cwt() 在从理想数据中找到峰值方面做得非常出色。围绕这些值求和是一种猜测峰值的方法。如果您要对频谱功率求和,您可能应该对中间的所有值求和,而不是像我在这个快速而肮脏的演示中所做的那样,对固定间隔求和。

ploted as in example

我发现该函数特别令人印象深刻,因为它可以在存在大得多的峰的情况下找到较小的峰。

关于python - 使用 find_peaks_cwt 在噪声数据中查找峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42280725/

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