Saturday 16 December 2017

Modificado em movimento média mma


Médias móveis modificadas As médias móveis modificadas são semelhantes às médias móveis simples. O primeiro ponto da média móvel modificada é calculado do mesmo modo que o primeiro ponto da média móvel simples é calculado. No entanto, todos os pontos subsequentes são calculados primeiro adicionando o novo preço e subtraindo a última média da soma resultante. A diferença é o novo ponto, ou a média móvel modificada. N número de barras MAt valor médio móvel atual MAt-1 valor médio móvel anterior preço atual Pt Este método é conveniente porque não é necessário acompanhar todos os componentes passados ​​da média. Somente o último valor médio móvel e o novo preço são necessários para o cálculo (tenha em mente que os cálculos do estudo costumavam ser feitos à mão). Devido à simplicidade desse cálculo, a média móvel modificada é amplamente utilizada para cálculos internos em outras análises. Ver P. J. Kaufman, The New Commodity Trading Systems and Methods, New York: John Wiley amp Sons, 1978, pp. 58-64. Médias móveis modificadas Functionakb455 outubro de 2017 Oi, eu gostaria de usar os resultados da Eureqa em Matlab. Em particular, eu preciso do código ou algoritmo que Eureqa usa para a média móvel modificada (MMA). Procurei na internet, mas há várias definições diferentes para o MMA e, depois de tentar algumas delas, não consegui duplicar a função Eureqa. Então, se alguém sabe o cálculo exato usado pela Eureqa, seria muito útil. Em outubro de 2017 O MMA implementado em Eureqa é uma média móvel exponencial com um coeficiente alfa específico. Retardo alfa (1-alfa) de mma (x, N) (x, 1) alfa (1-alfa) 2delay (x, 2). Retardo alfa (1-alfa) (N-1) (x, N) alfa 1.0 - exp (log (0.001) abs (n)) Uma explicação mais detalhada (escrita por Alison) está abaixo do qual descreve o raciocínio para este alfa e Suas propriedades Espero que ajude, Definição geral média móvel modificada para EMA MMA A média móvel modificada é um tipo de média móvel exponencial (EMA), onde o peso dado aos registros mais antigos diminui exponencialmente. De Wikipedia, a definição recursivamente (onde S é EMA e Y é uma série) é: S1 Y1 para tgt1, St alpha Yt-1 (1-alfa) St-1 Não recursivamente, isto é: St alpha (Yt-1 (1-alfa) Yt-2 (1-alfa) 2 Yt-3 (1-alfa) 4 Yt-4) Em outras palavras, o peso para o termo mais novo é alfa eo peso para cada termo anterior tem um adicional Fator de (1 - alfa), de modo que o peso nos momentos mais recentes são: Peso para Yt-1: peso alfa para Yt-2: alfa (1-alfa) Peso para Yt-2: alfa (1-alfa) 2 Peso para Yt-2: alfa (1-alfa) 3 Referência: en. wikipedia. orgwikiMovingaverageExponentialmovingaverage Observe que a Wikipédia diz que a média móvel modificada (MMA) é um caso especial de EMA onde para uma série de N termos, alfa 1N. Não estamos usando essa definição. MMA em Eureqa O bloco de construção de mma em Eureqa parece mma (x, n), projetado para dar a mma das últimas n linhas. O desafio é que, ao parar o cálculo do MMA após apenas algumas fileiras, usar um alfa de 1N significaria que a soma dos pesos pode não ser 1, levando a resultados não intuitivos. Por exemplo, com um alfa de 1N, mma (x, 2) para o seguinte poderia dar: x mma (x, 2) 1 NA - peso de 1 0,75 - peso de Porque os pesos não somam para 1, mma ( X, 2) daria um resultado de 0,75, o que não parece certo dado que ambos os valores que entraram na média móvel foram 1. Para evitar esse soluço, selecionamos alfa especificamente para que a soma de todos os pesos após as n linhas incluídas no A média móvel é exatamente 0.999 (ou seja, perto de 1). A equação utilizada para calcular alfa para um dado n é: 1.0 - exp (log (0.001) abs (n)) (Isso também pode ser derivado da equação dada na Wikipedia: n log (0.001) log (1 - alpha)) Isto, para o exemplo anterior, significa que Eureqa mma (x, 2) dará: x mma (x, 2) 1 NA 1 0.999 A intuição é que, com o nosso cálculo de alfa, garantimos que a soma dos pesos seja sempre 0,999. Isso também significa que a taxa de decomposição exponencial dos pesos dependerá de N para valores pequenos de N, o alfa será maior (o que significa que os valores mais recentes serão ponderados muito e os pesos para valores mais antigos cairem abruptamente) e para maiores Os valores de N, alfa serão menores (o que significa que os valores mais recentes serão ponderados menos fortemente e haverá uma taxa mais lenta ou diminuição do peso para valores mais antigos). Em outubro de outubro Desculpe pela má formatação - o original parece muito melhor e planejamos incluir esse artigo em nossa documentação à medida que o retrabalhamos. Medição PWM Corrente com uma média móvel modificada Como você mede um sinal que continua mudando por James Lewis A modulação de largura (PWM) possibilita escurecer as luzes, controlar a velocidade dos motores e (com a ajuda de filtros) gerar tensões de referência analógicas. Ao medir a tensão ou a corrente de um sinal PWM, existem desafios únicos. Você pode usar este tutorial para medir o PWM atual com uma média móvel modificada (MMA). Como I8217ve mencionado em algumas postagens, I8217m trabalhando em um controlador RGB LED IoT. Em breve, irei publicar algumas informações detalhadas sobre isso. Entretanto, uma escolha que fiz foi incluir um sensor de corrente INA219 na fonte de alimentação LED. Para prototipagem, I8217m usando o Adafruit Breakout Board. Mas meu projeto final usa as mesmas peças integradas em uma PCB personalizada. Ao usar este sensor atual, encontrei um problema inesperado. It8217s é rápido e é preciso. (Não é uma coisa boa) A maneira como ele funciona é medindo a queda de tensão em um resistor de derivação de precisão que a corrente de carga flui. Usando a lei Ohm8217s, ele vem com uma medida atual. No entanto, é muito mais rápido do que eu esperava e estava fornecendo respostas (quase) instantâneas. Então, cada vez que chequei o sensor, obtive um valor aparentemente aleatório. O problema é o valor dependente quando amostriquei a forma de onda PWM, como ilustrado abaixo. I8217d obter 8220high8221 atual, 8220low8221 atual (nenhum), ou uma transição. A corrente 8220high8221 foi útil, mas nenhum dos outros valores. Usando um algoritmo de média simples, às vezes eu tenho valores estáveis, mas não muito. Além disso, estava ocupando centenas de bytes de RAM apenas para ter uma idéia da corrente do RMS usada no meu projeto. Eu precisava disso para que eu pudesse calcular mais facilmente o uso de energia. Naquela época, quando eu aprendi sobre Modified Moving Average ou MMA. Este algoritmo simples usa apenas alguns bytes de RAM e é mais preciso do que um algoritmo de média simples. Além disso, se você estiver usando um processador mais lento, como o Uno8217s ATmega328p, este método usa muito menos ponto flutuante. (Este artigo explica outros tipos de médias móveis.) Algoritmo para medir o PWM atual Ao usar o MMA, você só precisa armazenar três valores: 8220Moving Average Sum, 8221 8220Moving Average, 8221 e o número de amostras. Obviamente, o número de amostras pode ser uma constante, economizando um byte ou dois de memória. Soma média móvel Em vez de coletar amostras N e manter um histórico de amostras, ou medir N amostras ao mesmo tempo (uma idéia horrível, btw), a Soma média móvel é exatamente isso. As medidas anteriores somaram-se, com uma ligeira duas vezes. Média móvel Depois que uma nova amostra é adicionada à média móvel modificada, um novo valor médio é calculado. Esta matemática é o passo mais demorado desde que a divisão está envolvida. (Se você não soubesse, a maioria dos processadores don8217t sabe como dividir.) Como o MMA funciona O algoritmo funciona assim: Subtraia a média anterior da soma. Obtenha uma nova amostra e adicione isso à soma, substituindo o 8220average8221 que você acabou de remover. Então, recalcule a média. A idéia é que, uma vez que você está removendo, efetivamente, 1 amostra e, em seguida, adicionando uma nova amostra, permite que a média mude no tempo. Essa média suaviza as flutuações ao fornecer uma média precisa, tudo enquanto usa apenas 4-6 bytes de RAM. A melhor parte é que se você aumentar o número de amostras utilizadas para a soma, nem a RAM nem o tempo de cálculo mudam. Durante cada iteração do loop principal, meu controlador RGB LED IoT analisa um novo valor e atualiza a média móvel. Antes de me mudar para o ESP8266, este código levou cerca de 56us para executar em um Uno. Essa velocidade é rápida e tem pouco impacto no desempenho dos programas. Comparando a média simples com o MMA, preparei dois projetos da Arduino para comparar uma média simples com a média móvel modificada. Você pode baixar o Exemplo Normal Simples aqui e pegue o exemplo MMA de ambos. Para o hardware, você pode usar quase qualquer Arduino. Você só precisa de PWM e Analog In pinos. (Tenha cuidado no ESP8266s, uma vez que o máximo analógico é apenas 1 volt.) No meu teste, usei um Uno e inseri um fio do pino digital 5 para o pino analógico A0. Aqui está uma amostra da saída do MMA. Esta tabela ilustra por que eu gosto desse método. Primeiro, é 20 vezes mais rápido. Em segundo lugar, ele usa menos RAM. E vejo muitas flutuações no valor médio. O trade-off, é claro, pode ser que, se você estiver procurando por falhas aleatórias ou instantâneas, elas devem ser suavizadas. No entanto, qualquer algoritmo de média irá eliminá-los. Conclusão Se você está medindo PWM Current ou PWM Voltage, usando um MMA pode dar-lhe o valor médio de saída. Ao calcular o poder, isso é útil porque você não precisa incluir tempo em sua matemática. Ao olhar para uma tensão, você pode ter uma idéia da tensão efetiva para uma carga como LED ou Motor. Indústria Notas Verifique esta nota de aplicação da Intersil em 8220Sensing Elements for Current Measurements .8221 Visão geral legal de diferentes tecnologias para medições atuais. (No meu exemplo aqui, estou usando um Resistor Shunt.) Pergunta: Os únicos exemplos que encontrei para este algoritmo foram financeiros. O que outras matemáticas podem ser úteis em projetos cotidianos de microcontroladores Você pode deixar um comentário clicando aqui. Postado na quarta-feira, 28 de setembro de 2017 Divulgação de conexão de material: alguns dos links na publicação acima são links de afiliados. Isso significa que se você clicar no link e comprar o item, recebo uma comissão de afiliados. Independentemente disso, eu só recomendo produtos ou serviços que uso pessoalmente e acredito que irá agregar valor aos meus leitores. Estou divulgando isso de acordo com as Comissões Comerciais Federais 16 CFR, Parte 255. Guias sobre o uso de endossos e depoimentos na publicidade. Postar navegação Suas perguntas, comentários e até correções são encorajadas e muito apreciadas. No entanto. Tenho tolerância zero para comentários inadequados ou hostis. Eu tento responder a todos. - James Deixe um comentário Cancelar resposta 3 pensamentos sobre ldquo Medir PWM Corrente com um Rdquo Médico Mover Modificado Rahul Choudhary diz: Um filtro Kalman converge mais rápido, especialmente para um sinal em mudança com ruído. Cavalo de batalha de aviónica. Faz com que eu queira codificar também amplificador colocá-lo como simplesmente. Enquanto isso, esta ajuda do 8217ll. Prepare-se para algumas outras línguas e algum ruído, enquanto segue todas as folhas da página aqui. Keith Hungerford diz: Oi James, um bom artigo e muito oportuno para mim, já que atualmente estou lidando com um sinal ruidoso de um sensor de corrente ACS712. Talvez o INA219 seja melhor para mim. No entanto, eu tenho algumas sugestões para você considerar. A) não é necessário usar variáveis ​​de ponto flutuante. O uso de números inteiros reduziria a carga de computação no processador do microcontrolador. B) se o comprimento de média 8220N8221 for escolhido como uma potência de 2 (por exemplo, 4 ou 8, etc.), o processo de divisão torna-se uma simples mudança que também é muito fácil para o processador do microcontrolador. Esses são os pontos principais, que eu expandi em baixo, com o risco de tornar-se tedioso. Eu acho mais fácil entender o MMA se a equação for escrita assim: MAt MAt-1 (n-1) n Em n onde MAt é a média móvel no tempo t, MAt-1 é a média móvel no tempo t-1 (Ou seja, a medição anterior) e At é o resultado medido no tempo t. N é o comprimento médio. Ou seja, a nova média móvel é constituída por (1n) do novo valor, e (n-1) n do valor anterior. Seu cálculo faz esta equação em duas etapas: MASt n MAt MASt-1 8211 MAt-1 No 8212 passo 1 mantenha o MASt para a próxima vez MAt MASt n 8212 etapa 2, resultado final Este cálculo pode ser feito usando números inteiros em vez de ponto flutuante. O INA219 gera seus resultados tanto para a corrente como para a tensão como inteiros de 16 bits (com máxima precisão de 12 bits devido às limitações de ADC). O cálculo pode ser feito com números inteiros sem perda de precisão desde que o MAS (MovingAveragSum) seja armazenado como um inteiro longo (32 bits). As linhas de código são idênticas às da sua foto sob 8220MMA code8221 em seu artigo, exceto que na linha 2 a variável currentCurrentValue pode ser int em vez de flutuar. Anteriormente moveAverageSum precisa ser declarado longo em vez de flutuar. Quanto ao desempenho, é fácil fazer uma planilha rápida que demonstre como este algoritmo responde a várias entradas. Por exemplo, em uma nova guia, configurei o seguinte: Coluna A: linhas 2 a 20 todas 0, linhas 21 a 60 todas 1. Coluna B: linha 1 8 (n comprimento médio) linha 2 célula A2 (valor inicial) linhas 3 B2 (B1-1) B1A3B1 (esta é a primeira equação que eu dei acima) linhas da coluna B 4 a 60 8211 propagadas por cópia da linha 3. Então selecione A2 para B60 e faça um gráfico 8211 um gráfico de linhas simples parece funcionar bem . Você pode colocar uma amostra de seus dados do mundo real na coluna 1 para ver quais valores de comprimento de média diferentes conseguem. Com um comprimento médio de 8 e uma função de 0 a 1, a média móvel chega a 90 do novo valor na linha 38, que é após 18 iterações e a 99 na linha 55, que está após 35 iterações. Mantenha o bom trabalho. Saudações, Keith, oi Jim, como engenheiro, eu realmente aprecio os seus vídeos 8211 que informam e são apenas a velocidade certa para reter o interesse, obrigado Mantenha o conteúdo de qualidade. Eu recentemente encontrei um problema semelhante com a tentativa de medir a amplitude AC que sai de um chip de sensor atual para um projeto de automação de imagem. O código que usei está abaixo. Outros algoritmos úteis para picduinos seriam RNG eficientes. Se você tem algum pensamento sobre um RNG decente de um único dígito que é de tamanho pequeno e não requer libs grandes, por favor, avise-me que eu realmente poderia usar para um pequeno projeto de foto de 10 séries. Assinantes totais Obtenha um e-livro gratuito Obtenha uma cópia GRATUITA do meu eBook do meu banco quando você se inscrever para receber minhas postagens semanais por e-mail. (O seu endereço de e-mail não será compartilhado com ninguém). Siga James

No comments:

Post a Comment