Wednesday 5 July 2017

Arduino Médio Móvel Simples


Arduino-signal-filtering-library Este projeto é uma iniciativa gratuita para criar uma biblioteca Arduino para filtragem de sinal. Filtros disponíveis: filtro de passagem baixa (1ª e 2ª ordem, Chebychev e Bessel) filtro médio Uso da biblioteca Baixe a fonte Coloque a pasta Filtro na sua pasta de bibliotecas Arduino1.0 Abra o esboço de exemplo: arquivo, Exemplos, SignalFilter, Bessel (ou qualquer outro exemplo ) Conecte um sensor analógico (ruidoso) à porta A0 Compile o código de upload do amplificador Os dados dos sensores originais e filtrados devem estar chegando pela porta serial Alterando filtros: Esta biblioteca é parcialmente baseada em filtros que são gerados automaticamente no site filtuino. O Filtuino é um Suite de Filtro que gera código fonte para diferentes filtros digitais (Passagem Baixa IIR, Passagem Elevada, Bandpass, Bandstop, Filtro Resonanz IIR, Filtro Integral Proporcional). Se você quer suas próprias propriedades de filtro, sugiro: use minha biblioteca como um modelo (para ter algum código de trabalho para começar) Gerar o código de filtragem exato que você precisa no site do filtuino (tipo de filtro, ondulação, freqüências). Substitua um Dos filtros na minha biblioteca com seu próprio filtro personalizado. Histórico de versões: Versão 0.1: Passagem baixa Filtros Chebychev e Bessel Versão 0.2: Filtro mediano Versão 0.3: Mais filtros (passagem de banda, média de corrida, Kalman.) Arduino-filtragem de sinal-biblioteca mantida por jeroendoggen Esta é uma coleção de rotinas para a realização de matemática Análise de arrays de números. Suporte de função atual: todas as funções estão totalmente sobrecarregadas para suportar os seguintes tipos de dados: com a exceção de stddev () eles retornam o mesmo tipo de dados que a matriz. Uma matriz de valores int retorna um único int. Stddev () sempre retorna um flutuador. Todas as funções, exceto rollingAverage (), levam dois argumentos. O primeiro é a matriz para trabalhar. O segundo é o número de entradas na matriz. RollingAverage () toma um terceiro argumento - a nova entrada para adicionar à matriz. Formato médio do rolamento: média de rodagemAtração (historyarray, slicecount, valor) Adiciona valor ao array historyarray deslocando todos os valores para baixo em um lugar. A média média é retornada. Formato: média média (array, sicecount) Calcula a média média dos valores na matriz. Slicecount é o número de entradas na matriz. Formato: modo médio (array, sicecount) Localiza o número mais comum na matriz. Formato: max máximo (array, slicecount) Localiza o maior valor na matriz. Formato: min mínimo (array, sicecount) Localiza o menor valor na matriz. Formato do desvio padrão: desvio stddev (array, sicecount) O desvio padrão é a raiz quadrada da média da soma dos quadrados da diferença entre cada ponto de dados e a média média da matriz. Esta é a única função que não retorna o mesmo tipo de dados que a matriz. O desvio padrão é sempre retornado como um flutuador. Uma das principais aplicações para a placa Arduino é a leitura e registro dos dados do sensor. Por exemplo, um monitora a pressão a cada segundo do dia. Como altas taxas de amostragem muitas vezes geram picos nos gráficos, um também quer ter uma média das medidas. Como as medidas não são estáticas no tempo, o que muitas vezes precisamos é uma média em execução. Esta é a média de um determinado período e muito valioso quando se faz análise de tendências. A forma mais simples de uma média em execução pode ser feita por código que se baseia na média anterior: se não quiser usar matemática de ponto flutuante - como isso ocupa memória e diminui a velocidade - pode-se fazer o mesmo completamente no domínio inteiro. A divisão por 256 no código da amostra é um shift-right 8, que é mais rápido do que dizer divisão por e. 100. Isso é verdade para cada poder de 2 como divisor e um só deve cuidar a soma dos pesos é igual à potência de 2. E é claro que se deve cuidar que não haja transbordamento intermediário (considere usar sem assinatura longa) Se você precisar Uma média de corrida mais precisa, in concreto das últimas 10 medidas, você precisa de uma matriz (ou lista vinculada) para mantê-las. Esta matriz funciona como um buffer circular e com cada nova medida, a mais antiga é removida. A média de corrida é calculada como a soma de todos os elementos divididos pelo número de elementos na matriz. O código para a média em execução será algo assim: Desvantagem deste código é que a matriz para manter todos os valores pode se tornar bastante grande. Se você tem uma medida por segundo e quer uma média corrente por minuto, você precisa de uma série de 60, uma média por hora precisaria de uma matriz de 3600. Isso não poderia ser feito dessa maneira em um Arduino, pois ele só possui 2K de RAM. No entanto, ao construir uma média de 2 estágios, pode ser abordado bastante bem (aviso: não para todas as medidas). No código psuedo: Como uma nova matriz estática interna é necessária para cada função runningAverage, isso grita para ser implementado como uma classe. Biblioteca RunningAverage A biblioteca runningAverage faz uma classe da função acima para que ela possa ser usada várias vezes em um esboço. Desacopla a função add () e avg () para ser um pouco mais flexível, e. Pode-se chamar a média várias vezes sem adicionar nada. Observe que todas as instâncias da classe adicionam sua própria matriz para armazenar medidas, e isso aumenta o uso da memória. A interface da classe é mantida tão pequena quanto possível. Nota: com a versão 0.2 os nomes dos métodos são todos mais descritivos. Um pequeno esboço mostra como ele pode ser usado. Um gerador aleatório é usado para imitar um sensor. Na configuração (), o myRA é limpo para que possamos começar a adicionar novos dados. Em loop () primeiro, um número aleatório é gerado e convertido em um flutuador para ser adicionado ao myRA. Em seguida, o runningAverage é impresso na porta serial. Pode-se também exibi-lo em algum LCD ou enviar por ethernet, etc. Quando são adicionados 300 itens, o myRA está limpo para começar de novo. Para usar a biblioteca, faça uma pasta nas suas LISTAS SKETCHBOOKPATH com o nome RunningAverage e coloque o. h e. cpp lá. Opcionalmente, faça um subdiretório de exemplos para colocar o aplicativo de exemplo. 2011-01-30: versão inicial 2011-02-28: destrutor faltando fixo no arquivo. h 2011-02-28: construtor padrão removido 2012--. TrimValue () Yuval Naveh adicionou trimValue (encontrado na web) 2012-11-21: refatorado 2012-12-30: adicionado fillValue () refatorado para publicação 2014-07-03: código de proteção de memória adicionado - se a matriz interna não puder ser alocada tamanho Torna-se 0. Isso é para resolver o problema descrito aqui - forum. arduino. ccindex. phptopic50473.msg1790086msg1790086 - Teste extensivamente. Classe Template RunningAverage. h RunningAverage. cpp

No comments:

Post a Comment