Uma das principais aplicações para a placa Arduino é leitura e registro dos dados do sensor Por exemplo, um monitora a pressão a cada segundo do dia Como altas taxas de amostragem geralmente gera picos nos gráficos também se deseja ter uma média das medidas Como as medições são Não estática no tempo o que muitas vezes precisamos é de uma média de corrida Esta é a média de um determinado período e muito valioso ao fazer a análise de tendência. Forma mais simples de uma média em execução pode ser feito por código que se baseia na média anterior running. If um doesn T quer usar matemática ponto flutuante - como isso leva a memória e diminui a velocidade - pode-se fazer o mesmo completamente no domínio inteiro A divisão por 256 no código de exemplo é um turno-direito 8, que é mais rápido do que dizer divisão por, por exemplo 100 Isso é verdade para cada poder de 2 como divisor e um só deve ter cuidado a soma dos pesos é igual ao poder de 2 E, claro, deve-se tomar cuidado não há transbordamento intermediário considerar o uso de unsigned long. If y Ou precisa de uma média de execução mais precisa, in concreto das últimas 10 medições, você precisa de uma matriz ou lista vinculada para mantê-los Esta matriz age como um buffer circular e com cada nova medição o mais antigo é removido A média é calculada como a média 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 como this. Drawback deste código é que a matriz para armazenar todos os valores pode se tornar muito grande Se você tem uma medição por segundo e você Quer uma média de execução por minuto que você precisa de uma matriz de 60 uma média por hora precisaria de uma matriz de 3600 Isso couldn t ser feito desta maneira em um Arduino como ele só tem 2K de RAM No entanto, construindo uma média de 2 estágios pode ser abordado Muito bem renúncia não para todas as medições 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 biblioteca class. RunningAverage. A biblioteca runningAverage faz uma classe Da função acima para que ele possa ser usado várias vezes em um esboço Desacopla o add ea função avg para ser um pouco mais flexível por exemplo, pode-se chamar a média várias vezes sem adicionar uma coisa Observe que cada instância da classe adiciona a sua Própria matriz para realizar medições e que isso acrescenta-se ao uso de memória A interface da classe é mantida tão pequena quanto possível. Nota com versão 0 2 os nomes dos métodos são todos feitos mais descritivo. Um pequeno esboço mostra como ele pode Ser usado Um gerador aleatório é usado para imitar um sensor. In configuração myRA é desmarcada para que possamos começar a adicionar novos dados. No primeiro loop um número aleatório é gerado e convertido em um flutuador a ser adicionado ao myRA Então o runningAverage é impresso para A porta serial Um também poderia exibi-lo em algum LCD ou enviar por ethernet etc Quando 300 itens são adicionados myRA é limpo para recomeçar novamente. Para usar a biblioteca, faça uma pasta em suas libraries SKETCHBOOKPATH com o nome RunningAverage e coloque o h e Há optar Ionally fazer um subdiretório de exemplos para colocar a amostra app.2017-01-30 inicial version.2017-02-28 fixo destrutor em falta em h file.2017-02-28 removido padrão constructor.2017- - trimValue Yuval Naveh adicionado trimValue encontrado em Web.2017-11-21 refactored.2017-12-30 added fillValue refactored for publishing.2017-07-03 código de proteção de memória adicionado - se matriz interna não pode ser alocada tamanho torna-se 0 Isso é para resolver o problema descrito here. Test extensivamente. Modelo class. RunningAverage h. RunningAverage. I estou trabalhando em um robô móvel controlado através de um wireless 2 receptor de 4 GHz é conectado ao Arduino Uno que serve a bordo como o controlador principal O mais crítico e canal de entrada principal proveniente do receptor produz um muito Noisy, o que leva a muitas pequenas mudanças na saída dos atuadores, mesmo que estes não são needed. I Estou à procura de bibliotecas que podem executar alisamento eficiente Há qualquer sinal suavização bibliotecas disponíveis para o Arduino Uno. asked 16 de fevereiro 14 em 13 57.I acho que vejo um monte de picos de ruído de amostra única em seu sinal ruidoso. O filtro mediano faz melhor em se livrar de picos de ruído de amostra única do que qualquer filtro linear É melhor do que qualquer filtro de baixa passagem, em movimento Média média ponderada, etc, em termos de seu tempo de resposta e sua capacidade de ignorar essa amostra única pico outliers. There são, de fato, muitas bibliotecas de suavização de sinal para o Arduino, muitos dos quais incluem uma mediana filter. signal - alimentação bibliotecas at. signal-suavização bibliotecas em github. Would algo como este trabalho em seu robô A mediana-de-3 requer muito pouco poder da CPU e, portanto, fast. You poderia filtrar isso digitalmente usando um filtro passa baixo. Change o 0 99 para mudar a freqüência de corte mais próxima de 1 0 é a freqüência mais baixa A expressão real para esse valor é exp -2 pi f fs onde f é a freqüência de corte que você quer e fs é a freqüência a qual os dados são amostrados. Outro tipo de digital Filtro é um filtro de evento Funciona bem em dados que Tem outliers por exemplo 9,9,8,10,9,25,9 Um filtro de evento retorna o valor mais freqüente Estatisticamente este é o modo. Médias estatísticas, como Mean, Mode etc. podem ser calculadas usando o Arduino Average Library. Um exemplo tomado A partir da página da Biblioteca Arduino referido. Esta é uma coleção de rotinas para a realização de análise matemática de arrays de suporte de função numbers. Current. Todas as funções estão totalmente sobrecarregados para suportar os seguintes tipos de dados. Com a exceção de stddev todos eles retornam o mesmo Tipo de dados como a matriz Uma matriz de valores int retorna um único int stddev sempre retorna um float. All as funções, exceto rollingAverage ter dois argumentos A primeira é a matriz para trabalhar O segundo é o número de entradas na matriz rollingAverage leva um terceiro Argumento - a nova entrada para adicionar à matriz. Rolling average. Format médio rollingAverage historyarray, slicecount, valor. Adiciona valor à matriz historyarray deslocando todos os valores para baixo um lugar A média é t Hen returned. Format médio médio array, slicecount. Calculates a média média dos valores em array slicecount é o número de entradas na array. Format matriz de modo médio, slicecount. Finds o número mais comum na matriz array. Format max máximo, Slicecount. Finds o maior valor na matriz mínima array. Format min, slicecount. Finds o menor valor na array. Standard Deviation. Format desvio stddev matriz, slicecount. O desvio padrão é a raiz quadrada da média da soma da Quadrados da diferença entre cada ponto de dados ea média da 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.
No comments:
Post a Comment