"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية الاستفادة بشكل فعال من وظيفة find_peaks لتحديد الذروة بدقة في Python/SciPy؟

كيفية الاستفادة بشكل فعال من وظيفة find_peaks لتحديد الذروة بدقة في Python/SciPy؟

تم النشر بتاريخ 2024-11-09
تصفح:143

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

خوارزمية العثور على الذروة لـ Python/SciPy

بيان المشكلة

تنشأ مهمة تحديد القمم في تطبيقات مختلفة، بدءًا من العثور على القمم في فورييه التحويلات (FFTs) لاستخراج القمم من صفائف ثنائية الأبعاد. يتمثل التحدي الشائع في التمييز بين القمم الحقيقية والتقلبات الناجمة عن الضوضاء.

وظائف العثور على الذروة الموجودة في 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] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3