python - 设置 scipy.signal.peak_widths 的绝对值

我刚刚开始使用 scipy 的信号函数。

在附图中,我试图找到曲线与任意阈值(检测到的峰值的左右)相交的坐标 A[n] 的位置。使用 peak_widths 给出点 B[n],其中 B 位于某个相对峰值位置。我正在寻找处于固定阈值的 A[n]。

我该如何解决这个问题?我还不能添加内嵌图片,因为我是 Stack exchange 的新手。附上图片。 提前致谢。

Annotated Plot from Code below

x = np.linspace(0, 6 * np.pi, 1000)
x = np.sin(x) #+ 0.6 * np.sin(2.6 * x)
peaks, _ = find_peaks(x,height=0.5)
threshold = 0.3
results_half = peak_widths(x, peaks, rel_height=0.5)
results_half[0]  # widths
plt.plot(x)
plt.plot(peaks, x[peaks], "x",color='r')
plt.hlines(*results_half[1:], color="C2")
plt.axhline(threshold,color='green')

最佳答案

peak_width 用于计算全宽半最大“fwhm”(使用 rel_height=0.5)并且它很好(使用不同的 rel_heights)。 所以它总是寻找峰曲线的“开始”和“结束”来计算那个峰的宽度。 (参见 scipy 示例:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.peak_widths.html?highlight=peak_width)

这就是 B1 和 B2 与 B3-B6 位于不同高度的原因。您可以看到 B1 和 B2 位于起点(该峰值信号的最低点)和第一个峰值(该峰值信号的最高点)的中间,而 B3-B6 位于它们的最低点和第一个峰值的中间最高分。

我想您正在寻找的是曲线与任意阈值定义的线之间的交点。尝试这样的事情:Intersection of two graphs in Python, find the x value或者您可以使用 prominence_data 参数,如下所示:python scipy.signal.peak_widths --> absolute heigth? (fft -3dB damping)

https://stackoverflow.com/questions/58886564/

相关文章:

apache-spark - 使用来自 s3 存储桶的数据在 AWS EMR 上使用 pyspark

google-cloud-platform - 使用 --allow-unauthenticated

javascript - 如何使用 ngx-export-as 中的选项

docker - 让 docker build --memory-swap=20g 使用可用的交换空

mysql - 在 macOS Catalina 10.15.1 下安装 DBD::mysql 时遇

amazon-web-services - 您应该使用客户端凭据授权类型来验证服务器到服务器吗?

linux - Podman (libpod) 在使用 SELinux 上下文挂载 shm 时无法运

apache-zookeeper - Chubby Sequencer 的目的是什么

leaflet - 校正 Rayshader 的卫星图像覆盖

node.js - 使用 fetch API 时如何记录实际的请求 header