」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在Python/SciPy中有效利用find_peaks函數進行準確的峰值辨識?

如何在Python/SciPy中有效利用find_peaks函數進行準確的峰值辨識?

發佈於2024-11-09
瀏覽:928

How to Effectively Utilize the find_peaks Function for Accurate Peak Identification in Python/SciPy?

Python/SciPy 的尋峰演算法

問題陳述

識別峰值的任務出現在各種應用中,從在傅立葉中尋找峰值變換(FFT)以從2D 陣列中提取峰值。一個常見的挑戰是區分真正的峰值和雜訊引起的波動。

Python/SciPy 中現有的峰值查找函數

與其從頭開始實現峰值查找演算法,不如考慮利用 scipy .signal.find_peaks 函數。此函數提供了根據特定條件過濾和識別峰值的選項。

了解find_peaks 參數

要有效利用find_peaks 的強大功能,了解其參數至關重要:

  • 寬度:峰的最小寬度。
  • 閾值:峰與其相鄰峰之間的最小差異。
  • 距離:連續山峰之間的最小距離。
  • 突出度:從山峰下降到更高地形所需的最小高度。

強調突出度

在所有參數中,突出度在區分真實峰值和噪音方面最為有效。它的定義涉及達到更高峰值所需的最小垂直下降。

範例應用:變頻正弦曲線

為了說明其實用性,請考慮受雜訊污染的變頻正弦曲線。理想的解決方案是準確識別峰值,而不會屈服於虛假噪音峰值。

程式碼示範

以下程式碼示範如何使用具有各種參數組合的 find_peaks 函數:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

# Generate signal
x = np.sin(2*np.pi*(2**np.linspace(2,10,1000))*np.arange(1000)/48000)   np.random.normal(0, 1, 1000) * 0.15

# Find peaks using different parameters
peaks, _ = find_peaks(x, distance=20)
peaks2, _ = find_peaks(x, prominence=1)
peaks3, _ = find_peaks(x, width=20)
peaks4, _ = find_peaks(x, threshold=0.4)

# Plot results
plt.subplot(2, 2, 1)
plt.plot(peaks, x[peaks], "xr"); plt.plot(x); plt.legend(['distance'])
plt.subplot(2, 2, 2)
plt.plot(peaks2, x[peaks2], "ob"); plt.plot(x); plt.legend(['prominence'])
plt.subplot(2, 2, 3)
plt.plot(peaks3, x[peaks3], "vg"); plt.plot(x); plt.legend(['width'])
plt.subplot(2, 2, 4)
plt.plot(peaks4, x[peaks4], "xk"); plt.plot(x); plt.legend(['threshold'])
plt.show()

從結果中觀察到,使用突出度(第二個子圖中的藍線)有效地隔離了真正的峰值,而距離、寬度和閾值在存在噪聲的情況下提供了低於標準的性能。

版本聲明 本文轉載於:1729588640如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何在不修改 http.ResponseWriter 的情況下記錄 HTTP 回應?
    如何在不修改 http.ResponseWriter 的情況下記錄 HTTP 回應?
    在http.HandleFunc 中記錄HTTP 回應本文討論了一種獲取HTTP 回應以進行日誌記錄的替代方法,而無需訴諸偽造請求或修改http.ResponseWriter。我們引入了中間件連結的概念,提供了函數式實作。 中介軟體連結中介軟體連結涉及將控制權傳遞給處理程序鏈,這些處理程序在主請求執...
    程式設計 發佈於2024-11-09
  • 如何處理跨平台 Go 庫中特定於作業系統的程式碼?
    如何處理跨平台 Go 庫中特定於作業系統的程式碼?
    如何利用特定於作業系統的程式碼的建構約束開發依賴於特定於作業系統的依賴項的跨平台Go 函式庫時,有必要區分建構不同作業系統的流程。解決方法如下:例如,讓我們考慮建立一個使用 Windows 的「encoding/osheb」套件和 Linux 的「encoding/olson」套件的函式庫。為了有效...
    程式設計 發佈於2024-11-09
  • 如何在 PHP 中有效使用回呼?
    如何在 PHP 中有效使用回呼?
    在 PHP 中實作回調PHP 中的術語「回呼」包括作為函數指標操作的字串和陣列。在PHP 4 中,出現了以下語法:$cb1 = 'someGlobalFunction';$cb2 = ['ClassName', 'someStaticMethod'];...
    程式設計 發佈於2024-11-09
  • 如何檢查 Chrome 和 Firefox 中的元素?
    如何檢查 Chrome 和 Firefox 中的元素?
    您有没有想过一个制作精美的网站背后有哪些元素?了解如何检查 Chrome 和 Firefox 中的元素。  每个视觉上令人惊叹的网页都有复杂的 HTML、CSS 和 JavaScript 代码在后端运行。使用名为 Inspect Element 的便捷开发工具,您可以在流行的网络浏览器上检查 HTM...
    程式設計 發佈於2024-11-09
  • 為什麼在 C++ 中設定靜態欄位時出現「無法解析的外部符號」錯誤?
    為什麼在 C++ 中設定靜態欄位時出現「無法解析的外部符號」錯誤?
    靜態物件欄位的無法解析的外部符號本文調查了嘗試設定時遇到的錯誤訊息「error LNK2001:無法解析的外部符號”主方法中的類別中的靜態字段。 在提供的程式碼片段中,類別中靜態欄位「a」的宣告「B」出現在類別定義本身內。但是,根據 C 標準,此類聲明不被視為定義。對於靜態資料成員,正確的定義必須出...
    程式設計 發佈於2024-11-09
  • 如何在 PHP 中高效去除小數中的尾隨零​​?
    如何在 PHP 中高效去除小數中的尾隨零​​?
    在 PHP 中刪除小數中的尾隨零​​在 PHP 中,從小數中刪除尾隨零是一項常見任務。考慮以下場景:您有一組數字,例如 125.00、966.70 和 844.011,您希望顯示這些數字,但不包含不必要的零數字。 快速且優化的解決方案為了有效地完成此任務,您可以採用簡單而有效的解決方案,將數字添加到...
    程式設計 發佈於2024-11-09
  • 如何在 Internet Explorer 8 中使用 nth-child() 在表中實作斑馬條紋?
    如何在 Internet Explorer 8 中使用 nth-child() 在表中實作斑馬條紋?
    Internet Explorer 8 中對nth-child() 的CSS 支援在現代瀏覽器中,CSS nth-child() 元素通常是用於在表格中實現斑馬條紋效果。然而,Internet Explorer 8 中明顯缺少此功能。以下是解決此限制的方法:Polyfill 方法:Selectivi...
    程式設計 發佈於2024-11-09
  • 在 JavaScript 中使用「setTimeout」時如何使用「this」保留上下文?
    在 JavaScript 中使用「setTimeout」時如何使用「this」保留上下文?
    在JavaScript 中使用setTimeout 並透過this 保存上下文在JavaScript 中使用setTimeout 函數時,必須了解它如何處理這的背景。當在超時回調中呼叫不同上下文中定義的方法時,這一點變得特別重要。 在提供的程式碼片段中,方法函數呼叫 method2,該方法根據傳遞的...
    程式設計 發佈於2024-11-09
  • 如何在 C++ 中安全地啟動執行檔:為什麼 CreateProcess() 是您的最佳選擇?
    如何在 C++ 中安全地啟動執行檔:為什麼 CreateProcess() 是您的最佳選擇?
    利用CreateProcess() 啟動可執行檔在本指南中,我們將探討如何從另一個C 執行檔中開啟執行檔(.exe )。 使用 system() 的陷阱在深入研究解決方案之前,強調使用 system() 函數的危險至關重要。 System() 有幾個缺點:它很糟糕,可能會減慢程式速度。 它會破壞安全...
    程式設計 發佈於2024-11-09
  • 使用這些運算符增強您的打字稿遊戲
    使用這些運算符增強您的打字稿遊戲
    空值合併運算子 (??) ?? 運算子用於在處理 null 或未定義時提供預設值。它檢查左側是否為 null 或未定義,如果是,則傳回右側值。 let value = null; let defaultValue = "DefaultValue"; let result = value ?? d...
    程式設計 發佈於2024-11-09
  • 最佳 jsGames 遊戲投票開始了!
    最佳 jsGames 遊戲投票開始了!
    今年的 js13kGames 競賽帶來了 189 款新的小型受限遊戲 - 恭喜每一位成功提交參賽作品的人!現在是時候投票並選出第13屆週年紀念版的獲勝者。 線上投票從9月15日到10月4日進行,獲獎者名單於10月5日公佈。如果您參與並提交了參賽作品,現在您可以評判其他人的遊戲並為他們提供投票。這意...
    程式設計 發佈於2024-11-09
  • 如何在 PHP 中按日期對物件數組進行排序?
    如何在 PHP 中按日期對物件數組進行排序?
    按日期對物件陣列進行排序在PHP 中,我們經常遇到需要按特定屬性對物件陣列進行排序的情況,例如日期欄位。這使我們能夠按時間順序顯示或操作資料。 按日期重新排列物件考慮以下物件數組,其中每個物件代表一條帶有日期屬性:$array = [ 495 => (object)['date' =&...
    程式設計 發佈於2024-11-09
  • 如何使用 document.querySelectorAll 正確循環選定的元素?
    如何使用 document.querySelectorAll 正確循環選定的元素?
    使用 document.querySelectorAll 循環選定的元素在 Web 開發中,循環選定的元素通常是必要的。 document.querySelectorAll 提供了一個表示所選元素的類似陣列的物件。但是,如果直接在 NodeList 上執行迭代,可能會出現問題,導致輸出中出現其他項目...
    程式設計 發佈於2024-11-09
  • 如何使用 jQuery 偵測鍵盤 Enter 按下:綜合指南
    如何使用 jQuery 偵測鍵盤 Enter 按下:綜合指南
    使用 jQuery 檢測鍵盤 Enter 按下:綜合指南檢測使用者輸入對於建立互動式 Web 應用程式至關重要。一項常見任務是捕捉 Enter 按鍵。本文探討如何使用 jQuery 無縫地實現這一點,並解決了瀏覽器相容性的問題。 jQuery 解決方案jQuery 提供了一個名為 keypress(...
    程式設計 發佈於2024-11-09
  • 提高 Spring Boot 應用程式的效能 - 第二部分
    提高 Spring Boot 應用程式的效能 - 第二部分
    在本文的第一部分中,我们学习了如何提高应用程序的性能,将 Tomcat 替换为 Undertow,即高性能 Web 服务器,除了启用和配置数据压缩之外,还可以减少通过网络传输的 HTTP 响应的大小。 现在,我们将讨论如何在持久化部分提高Spring Boot应用程序的性能,但首先我们需要了解什么是...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3