"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como utilizar efetivamente a função find_peaks para identificação precisa de pico em Python/SciPy?

Como utilizar efetivamente a função find_peaks para identificação precisa de pico em Python/SciPy?

Publicado em 2024-11-09
Navegar:137

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

Algoritmo de localização de picos para Python/SciPy

Declaração do problema

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.

Funções existentes de localização de pico em Python/SciPy

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.

Compreendendo os parâmetros find_peaks

Para aproveitar o poder de find_peaks de forma eficaz, é crucial entender seus parâmetros:

  • largura: largura mínima de um pico.
  • limiar: diferença mínima entre pico e seus vizinhos.
  • distância: distância mínima entre picos consecutivos.
  • proeminência: Altura mínima necessária para descer de um pico e alcançar um terreno mais alto.

Ênfase em Proeminência

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.

Exemplo de aplicação: sinusóide variável em frequência

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.

Demonstração de código

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.

Declaração de lançamento Este artigo foi reimpresso em: 1729588640 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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