Estou trabalhando em um robô móvel controlado por um link sem fio de 2,4 GHz. O receptor está conectado ao Arduino Uno, que serve a bordo como controlador principal. O canal de entrada mais crítico (e principal) proveniente do receptor produz um sinal muito barulhento, o que leva a muitas pequenas alterações na saída dos atuadores, mesmo que não sejam necessárias.
Traçar a entrada do Arduino em um intervalo de 30 segundos.
Estou procurando bibliotecas que possam executar uma suavização eficiente. Existem bibliotecas de suavização de sinal disponíveis para o Arduino (Uno)?
library
signal-processing
asheeshr
fonte
fonte
Respostas:
Microsmooth é uma biblioteca de suavização de sinais de baixo peso atualmente sendo desenvolvida por mim.
Ele ainda está sendo trabalhado e o objetivo é torná-lo leve em termos de memória e rápido. A biblioteca fornece vários filtros para suavização:
Para usar a biblioteca, faça o download e adicione-o ao diretório de origem. Além disso, adicione a seguinte linha ao seu arquivo de origem:
fonte
Acho que vejo muitos picos de ruído de amostra única no seu sinal barulhento.
O filtro mediano se sai melhor em eliminar picos de ruído de amostra única do que qualquer filtro linear. (É melhor do que qualquer filtro passa-baixo, média móvel, média móvel ponderada, etc. em termos de tempo de resposta e capacidade de ignorar esses outliers de picos de ruído de amostra única).
De fato, existem muitas bibliotecas de suavização de sinal para o Arduino, muitas das quais incluem um filtro mediano.
bibliotecas de suavização de sinal em arduino.cc:
bibliotecas de suavização de sinal no github:
Algo assim funcionaria no seu robô? (A mediana de 3 requer muito pouca energia da CPU e, portanto, rápida):
fonte
Você já tentou um filtro passa-baixo? Encontrei um exemplo aqui e outro aqui .
Ambas as bibliotecas têm uma lista de dados lidos do sensor analógico de sua escolha, que é calculado em média. Cada novo valor de sensor é adicionado à lista e o último é descartado, assim:
fonte
Você pode filtrar isso digitalmente usando um filtro passa-baixo:
Altere 0,99 para alterar a frequência de corte (mais próximo de 1,0 é a frequência mais baixa). A expressão real para esse valor é exp (-2 * pi * f / fs), em que f é a frequência de corte desejada e fs é a frequência em que os dados são amostrados.
Outro tipo de "filtro digital" é um filtro de eventos. Funciona bem em dados com outliers; por exemplo 9,9,8,10,9,25,9. Um filtro de eventos retorna o valor mais frequente. Estatisticamente, este é o modo.
As médias estatísticas, como Média, Modo etc. podem ser calculadas usando a Biblioteca Média do Arduino .
Um exemplo retirado da página da Biblioteca do Arduino se refere a:
fonte