Skip to content

Latest commit

 

History

History
106 lines (69 loc) · 4.1 KB

README-ptbr.md

File metadata and controls

106 lines (69 loc) · 4.1 KB

PeakDetection

PeakDetection é uma biblioteca Arduino para detecção de pico em tempo real em dados de sensores.

Read in english.

Algoritmo

Baseia-se no princípio de dispersão: se um novo data point é um número x de desvios-padrão de uma média móvel, o algoritmo sinaliza (também chamado de z-score).

O algoritmo tem 3 entradas:

  • lag: é o atraso da janela em movimento (tamanho da média móvel). Esse parâmetro determina o quanto seus dados serão suavizados e o quanto o algoritmo é adaptável a mudanças na média de longo prazo dos dados. Quanto mais estacionário for o seu dado, mais atrasos você deve incluir. Se os seus dados contiverem tendências que variam com o tempo, considere a rapidez com que você deseja que o algoritmo se adapte a essas tendências.

  • threshold: este parâmetro é o número de desvios-padrão da média móvel acima da qual o algoritmo classificará um novo data point como sendo um sinal. Este parâmetro deve ser definido com base em quantos sinais você espera. O threshold, portanto, influencia diretamente a sensibilidade do algoritmo e, portanto, a frequência com que o algoritmo sinaliza.

  • influence: é o z-score no qual o algoritmo sinaliza. Este parâmetro determina a influência dos sinais no threshold de detecção do algoritmo. Se colocar em 0, os sinais não terão influência sobre o threshold, de forma que os sinais futuros serão detectados com base em um threshold que é calculado com uma média e um desvio-padrão que não é influenciado por sinais anteriores. Você deve colocar esse parâmetro entre 0 e 1, dependendo da medida em que os sinais podem influenciar sistematicamente a tendência de variação de tempo dos dados.

Funções

  • begin()
  • add()
  • getPeak()
  • getFilt()

begin()

Inicializa o objeto PeakDetection e as configurações para os parâmetros de ajustes. Se nenhum parâmetro for definido, o padrão permanece.

peakdetection.begin(lag,threshold,influence);

Alternadamente:

peakdetection.begin(); //lag=32, threshold=2, influence=0.5

add()

Adiciona um novo data point ao algoritmo, calcula o desvio-padrão e a média móvel.

peakdetection.add(datapoint);

getPeak()

Retorna o status do pico do último data point adicionado. {-1, 0, 1}, representando abaixo, dentro ou acima do threshold do desvio padrão, respectivamente.

double peak = peakdetection.getPeak();

getFilt()

Retorna o último data point filtrado pela média móvel.

double filtered = peakdetection.getFilt();

Instalação

Para usar essa biblioteca:

  1. Baixe o zip e descompacte o arquivo baixado.
  2. Copie a pasta para a pasta de bibliotecas do Arduino (C:/Users/username/Documents/Arduino/libraries).
  3. Renomeie para PeakDetection.

Exemplo

Código

#include <PeakDetection.h> // importa a biblioteca

PeakDetection peakDetection; // cria um objeto PeakDetection

void setup() {
  Serial.begin(9600); // define a taxa de dados para a comunicação serial
  pinMode(A0, INPUT); // pino analógico usado para conectar o sensor
  peakDetection.begin(48, 3, 0.6); // define o lag, threshold e influence
}

void loop() {
    double data = (double)analogRead(A0)/512-1; // lê o valor do sensor e converte em um intervalo entre -1 e 1
    peakDetection.add(data); // adiciona um novo data point
    int peak = peakDetection.getPeak(); // retorna 0, 1 ou -1
    double filtered = peakDetection.getFilt(); // média móvel
    Serial.print(data); // imprime o data point
    Serial.print(",");
    Serial.print(peak); // imprime o status do pico
    Serial.print(",");
    Serial.println(filtered); // imprime a média móvel
}

Saída

Example output

Agradecimentos