A tarefa de identificar picos surge em diversas aplicações, desde encontrar picos em Fourier transformadas (FFTs) para extrair picos de matrizes 2D. Um desafio comum é distinguir picos verdadeiros de flutuações induzidas por ruído.
Em vez de implementar um algoritmo de localização de pico do zero, considere utilizar o scipy Função .signal.find_peaks. Esta função fornece opções para filtrar e identificar picos com base em critérios específicos.
Para aproveitar o poder de find_peaks de forma eficaz, é crucial entender seus parâmetros:
De todos os parâmetros, proeminência se destaca como o mais eficaz em distinguir picos verdadeiros de ruído. Sua definição envolve a descida vertical mínima necessária para atingir um pico mais alto.
Para ilustrar sua utilidade, considere uma sinusóide variável em frequência contaminada com ruído. A solução ideal seria identificar os picos com precisão, sem sucumbir a picos de ruído espúrios.
O código a seguir demonstra como usar a função find_peaks com várias combinações de parâmetros:
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()
Conforme observado nos resultados, o uso de destaque (a linha azul no segundo subtrama) isola efetivamente os picos verdadeiros, enquanto a distância, a largura e o limite oferecem desempenho abaixo da média na presença de ruído.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3