gpt4 book ai didi

python - Scipy signal.find_peaks_cwt 挂断

转载 作者:行者123 更新时间:2023-11-30 23:16:16 47 4
gpt4 key购买 nike

我有一个简单的问题,我需要找到波形的峰值。现在,我在使用 scipy 库中的 find_peaks_cwt 方法之前已经完成了此操作。然而,在这种情况下,我的程序在尝试找到峰值时只是挂起。我认为这与波形中的样本数量或我正在使用的“宽度”参数有关。

对信号进行下采样后,我能够正确找到峰值,但是,花了很长时间才找到它们。大约五分钟。

Here是波形截图。

波形有 526728 个样本。我不认为这是一个如此复杂的任务,我会耗尽硬件资源(内存、CPU 等)

Here是我使用代码处理的波形屏幕截图:

iMaxPeaks = signal.find_peaks_cwt(signal, np.arange(35,40), min_snr=2)

此波包含 32000 个样本。

非常感谢任何帮助或正确方向的指示。

最佳答案

来自文档:find_peaks_cwt

scipy.signal.find_peaks_cwt(vector, widths, wavelet=None,
max_distances=None, gap_thresh=None, min_length=None, min_snr=1,
noise_perc=10)[source]

Attempt to find the peaks in a 1-D array.

The general approach is to smooth vector by convolving it with wavelet(width) for each width in widths. Relative maxima which appear at enough length scales, and with sufficiently high SNR, are accepted.

此卷积(针对 5 个宽度中的每一个)很可能导致您的代码需要很长时间才能运行。查看源码,find_peaks_cwt调用了cwt,而cwt调用了scipy.signal.convolve:这个方法似乎没有使用FFT方法进行卷积,对于大型数组来说可能会更快。

如果您可以使用 FFT 重新实现卷积,您可能会看到性能的提高。 (您的样本数量 526728 刚刚超过 2^19。如果您要使用 2^19 = 524288 个样本,速度还会更快)。

要查看是否遇到内存限制,您可以尝试缓慢增加样本大小,并查看是否存在导致性能急剧下降的临界大小。

关于python - Scipy signal.find_peaks_cwt 挂断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27787101/

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