Detecção de Picos

Detecção de PicosVersão "1": Método "Simples"Versão "2": Usando DerivadasConsiderando Derivadas ConsecutivasBenefícios da Abordagem de Derivadas:


Versão "1": Método "Simples"

Para detectar a distância entre dois picos máximos de um sinal no Arduino, considerando um "vale de descida" entre os picos, é possível utilizar o seguinte algoritmo:

  1. Captura do Sinal: Leia os dados do sinal usando o conversor A/D do Arduino.
  2. Detecção de Máximos: Detecte os picos máximos, levando em conta o width_min para desconsiderar picos muito próximos.
  3. Verificação de Vale de Descida: Certifique-se de que há um "vale" entre os picos, ou seja, que o sinal caiu abaixo de um certo limiar antes de encontrar um novo pico.

O código abaixo implementa essa lógica:

Explicação do Código:

  1. Definições:

    • NUM_SAMPLES: O número de amostras a capturar.
    • THRESHOLD: O limiar acima do qual um valor é considerado um pico máximo.
    • WIDTH_MIN: O número mínimo de amostras entre dois picos.
    • ANALOG_PIN: O pino A0 do Arduino para ler o sinal.
  2. Setup:

    • Inicia a comunicação serial.
  3. Loop Principal:

    • Captura as amostras do sinal em um array.
    • Chama a função detectPicos para verificar os picos.
  4. Função detectPicos:

    • Percorre as amostras e verifica se o valor atual é um pico máximo, comparando com seus vizinhos.
    • Verifica se o último pico detectado está suficientemente distante, utilizando width_min.
    • Se um novo pico for encontrado, ele é impresso no console serial e o índice do pico é atualizado.

Note que o código anterior não calcula a distância entre 2 picos máximos.

Versão "2": Usando Derivadas

Note que:

Para determinar a distância em número de amostras entre dois picos máximos de um sinal, você pode modificar o código anterior. Em vez de imprimir o valor de cada pico, você irá armazenar a distância entre o último pico encontrado e o atual. O código atualizado ficaria assim:

Detalhes do código:

  1. Detecção de Picos:

    • A função detectPicos agora retorna a distância em número de amostras entre dois picos.
    • Se um novo pico for detectado e estiver a uma distância maior ou igual a WIDTH_MIN do último pico, a distância entre eles é calculada e retornada.
  2. Loop Principal:

    • Após a chamada de detectPicos, se uma distância válida for retornada, ela é impressa no console serial.
  3. Retorno de Distância:

    • Se um pico é encontrado, a distância entre o último pico e o atual é calculada. Caso contrário, a função retorna -1.

Observações:

Considerando Derivadas Consecutivas

Para incluir a abordagem de derivadas no código de detecção de picos, você pode calcular a primeira derivada (ou diferença entre amostras consecutivas) para identificar quando o sinal está subindo ou descendo. Isso pode ajudar a garantir que um pico seja detectado apenas após uma subida e uma descida, confirmando a formação de um pico verdadeiro.

Aqui está uma versão do código que implementa essa abordagem:

Detalhes do Código:

  1. Cálculo das Derivadas Consecutivas:

    • A primeira derivada é calculada como a diferença entre amostras consecutivas (derivativeCurr).
    • A variável derivativePrev armazena o valor da derivada da iteração anterior.
  2. Detecção de Pico:

    • Um pico é detectado quando a derivada anterior é positiva (indicando que o sinal estava subindo) e a derivada atual é negativa (indicando que o sinal começou a descer), juntamente com a condição de que o valor do sinal é maior que o THRESHOLD.
  3. Cálculo da Distância:

    • Se um novo pico é detectado e está suficientemente distante do último pico (WIDTH_MIN), a distância é calculada e retornada.

Benefícios da Abordagem de Derivadas:

 


🌊 Fernando Passold 📬 ,