Задача идентификации пиков возникает в различных приложениях, начиная от поиска пиков в Фурье преобразования (БПФ) для извлечения пиков из 2D-массивов. Распространенной задачей является отличить истинные пики от флуктуаций, вызванных шумом.
Вместо реализации алгоритма поиска пиков с нуля рассмотрите возможность использования scipy Функция .signal.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()
Как видно из результатов, использование выступающего положения (синяя линия на втором подграфике) эффективно изолирует истинные пики, в то время как расстояние, ширина и порог обеспечивают низкую производительность в присутствии шума.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3