«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно использовать функцию find_peaks для точной идентификации пиков в Python/SciPy?

Как эффективно использовать функцию find_peaks для точной идентификации пиков в Python/SciPy?

Опубликовано 9 ноября 2024 г.
Просматривать:548

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

Алгоритм поиска пиков для Python/SciPy

Постановка задачи

Задача идентификации пиков возникает в различных приложениях, начиная от поиска пиков в Фурье преобразования (БПФ) для извлечения пиков из 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], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3