A média móvel como um filtro A média móvel é frequentemente utilizada para suavização de dados na presença de ruído. A média móvel simples nem sempre é reconhecida como o filtro de Resposta de Impulso Finito (FIR) que é, enquanto é realmente um dos filtros mais comuns no processamento de sinal. Tratá-lo como um filtro permite compará-lo com, por exemplo, windowed-sinc filtros (ver os artigos sobre low-pass, high-pass, band-pass e band-reject filtros para exemplos desses). A principal diferença com esses filtros é que a média móvel é adequada para sinais para os quais a informação útil está contida no domínio do tempo. Das quais as medidas de alisamento por média são um excelente exemplo. Filtros windowed-sinc, por outro lado, são fortes performers no domínio da freqüência. Com equalização no processamento de áudio como um exemplo típico. Há uma comparação mais detalhada de ambos os tipos de filtros no domínio do tempo versus desempenho de domínio de freqüência de filtros. Se você tiver dados para os quais o tempo e o domínio de freqüência são importantes, então você pode querer dar uma olhada em Variações na Média Móvel. Que apresenta um número de versões ponderadas da média móvel que são melhores nisso. A média móvel de comprimento (N) pode ser definida como escrita como é tipicamente implementada, com a amostra de saída corrente como a média das amostras (N) anteriores. Visto como um filtro, a média móvel executa uma convolução da seqüência de entrada (xn) com um pulso retangular de comprimento (N) e altura (1N) (para fazer a área do pulso e, portanto, o ganho do filtro , 1 ). Na prática, é melhor tomar (N) ímpar. Embora uma média móvel possa também ser calculada usando um número par de amostras, usar um valor ímpar para (N) tem a vantagem de que o atraso do filtro será um número inteiro de amostras, uma vez que o atraso de um filtro com (N) Amostras é exactamente ((N-1) 2). A média móvel pode então ser alinhada exatamente com os dados originais deslocando-o por um número inteiro de amostras. Domínio Dado que a média móvel é uma convolução com um pulso retangular, a sua resposta de frequência é uma função sinc. Isso torna algo como o dual do filtro windowed-sinc, uma vez que é uma convolução com um pulso sinc que resulta em uma resposta de freqüência retangular. É esta resposta de freqüência de sinc que faz com que a média móvel seja um desempenho fraco no domínio da freqüência. No entanto, ele funciona muito bem no domínio do tempo. Portanto, é perfeito para suavizar os dados para remover o ruído, enquanto ao mesmo tempo ainda mantém uma rápida resposta passo (Figura 1). Para o típico Ruído Gaussiano Branco Aditivo (AWGN) que é freqüentemente assumido, a média (N) de amostras tem o efeito de aumentar a SNR por um fator de (sqrt N). Como o ruído para as amostras individuais não está correlacionado, não há razão para tratar cada amostra de forma diferente. Assim, a média móvel, que dá a cada amostra o mesmo peso, vai se livrar da quantidade máxima de ruído para uma dada nitidez resposta passo. Implementação Porque é um filtro FIR, a média móvel pode ser implementada através de convolução. Ele terá então a mesma eficiência (ou falta dela) como qualquer outro filtro FIR. No entanto, também pode ser implementado recursivamente, de uma forma muito eficiente. Segue-se diretamente a partir da definição de que esta fórmula é o resultado das expressões para (yn) e (yn1), ou seja, onde observamos que a mudança entre (yn1) e (yn) é que um termo extra (xn1N) aparece em O final, enquanto o termo (xn-N1N) é removido desde o início. Nas aplicações práticas, muitas vezes é possível deixar de fora a divisão por (N) para cada termo, compensando o ganho resultante de (N) em outro lugar. Esta implementação recursiva será muito mais rápida que a convolução. Cada novo valor de (y) pode ser calculado com apenas duas adições, em vez das (N) adições que seriam necessárias para uma implementação direta da definição. Uma coisa a olhar para fora com uma implementação recursiva é que os erros de arredondamento irá acumular. Isso pode ou não pode ser um problema para o aplicativo, mas também implica que essa implementação recursiva realmente funcionará melhor com uma implementação inteira do que com números de ponto flutuante. Isso é bastante incomum, uma vez que uma implementação de ponto flutuante é geralmente mais simples. A conclusão de tudo isso deve ser que você nunca deve subestimar a utilidade do simples filtro de média móvel em aplicações de processamento de sinal. Filter Design Tool Este artigo é complementado com uma ferramenta Filter Design. Experimente com diferentes valores para (N) e visualize os filtros resultantes. A resposta de freqüência de um sistema LTI é a DTFT da resposta de impulso. A resposta de impulso de uma média móvel de L é uma média móvel. Uma vez que o filtro de média móvel é FIR, a resposta de freqüência é reduzida para o finito Sum Podemos usar a identidade muito útil para escrever a resposta de freqüência como onde temos deixar ae menos jomega. N 0 e M L menos 1. Podemos estar interessados na magnitude desta função para determinar quais freqüências passam pelo filtro sem atenuação e quais são atenuadas. Abaixo está um gráfico da magnitude desta função para L 4 (vermelho), 8 (verde) e 16 (azul). O eixo horizontal varia de zero a pi radianos por amostra. Observe que, em todos os três casos, a resposta de freqüência tem uma característica de passagem baixa. Uma componente constante (frequência zero) na entrada passa através do filtro sem ser atenuada. Determinadas frequências mais elevadas, tais como pi 2, são completamente eliminadas pelo filtro. No entanto, se a intenção era projetar um filtro lowpass, então não temos feito muito bem. Algumas das freqüências mais altas são atenuadas apenas por um fator de cerca de 110 (para a média móvel de 16 pontos) ou 13 (para a média móvel de quatro pontos). Podemos fazer muito melhor do que isso. O gráfico acima foi criado pelo seguinte código Matlab: omega 0: pi400: pi H4 (14) (1-exp (-iomega4)) (1-exp (-iomega)) H8 (18) (1-exp (- (1-exp (-iomega)) (1-exp (-iomega)) traço (omega, abs (H4) abs (H8) abs ( H16)) eixo (0, pi, 0, 1) Cópia de direitos autorais 2000 - Universidade de Califórnia, BerkeleyIm que codifica algo no momento onde Im que faz exame de um grupo dos valores sobre o tempo de uma bússola da ferragem. Esta bússola é muito precisa e atualiza com muita freqüência, com o resultado de que se ele jiggles ligeiramente, eu acabar com o valor estranho que é descontroladamente inconsistente com seus vizinhos. Quero suavizar esses valores. Tendo feito alguma leitura ao redor, parece que o que eu quero é um filtro passa-alta, um filtro passa-baixa ou uma média móvel. Movendo a média que eu posso começar com, basta manter um histórico dos últimos 5 valores ou o que quer que, e usar a média desses valores a jusante no meu código onde eu estava uma vez apenas usando o valor mais recente. Isso deve, eu acho, suavizar esses jiggles muito bem, mas parece-me que o seu provavelmente bastante ineficiente, e este é provavelmente um daqueles Problemas Conhecidos aos Programadores Adequados para que theres uma solução de matemática inteligente realmente limpo. Eu sou, entretanto, um daqueles programadores self-taught terríveis sem um shred da instrução formal em qualquer coisa vagamente relacionado a CompSci ou à matemática. Ler em torno de um pouco sugere que este pode ser um filtro de alta ou baixa passagem, mas eu não consigo encontrar nada que explique em termos compreensíveis para um hack como eu o que o efeito desses algoritmos seria sobre uma matriz de valores, muito menos como a matemática trabalho. A resposta dada aqui. Por exemplo, tecnicamente responde à minha pergunta, mas apenas em termos compreensíveis para aqueles que provavelmente já sabem como resolver o problema. Seria uma pessoa muito bonita e inteligente quem poderia explicar o tipo de problema que isso é, e como as soluções funcionam, em termos compreensíveis para um graduado em Artes. Se a sua média móvel tem que ser longa, a fim de alcançar o alisamento necessário, e você realmente não precisa de qualquer forma especial de kernel, então você está melhor se você usar uma média móvel exponencial decadência: onde você Escolha tiny para ser uma constante apropriada (por exemplo, se você escolher minúsculo 1 - 1N, ele terá a mesma quantidade de média como uma janela de tamanho N, mas distribuídos de forma diferente sobre pontos mais antigos). Enfim, uma vez que o próximo valor da média móvel depende apenas do anterior e seus dados, você não tem que manter uma fila ou qualquer coisa. E você pode pensar nisso como fazendo algo como, Bem, eu tenho um novo ponto, mas eu realmente não confio, então eu vou manter 80 da minha antiga estimativa da medição, e só confiar neste novo ponto de dados 20. Isso é Praticamente o mesmo que dizer, Bem, eu só confiar neste novo ponto 20, e eu uso 4 outros pontos que eu confio na mesma quantidade, exceto que em vez de tomar explicitamente os 4 outros pontos, você está supondo que a média que você fez na última vez Foi sensato para que você possa usar seu trabalho anterior. Respondeu Sep 21 10 at 14:27 Ei, eu sei que isso é 5 anos de atraso, mas obrigado por uma resposta incrível. I39m trabalhando em um jogo onde o som muda com base na sua velocidade, mas devido à execução do jogo em um computador lento ass, a velocidade flutuaria descontroladamente, o que era bom para a direção, mas super irritante em termos de som. Esta foi uma solução realmente simples e barata para algo que eu pensei que seria um problema muito complexo. Ndash Adam Mar 16 15 at 20:20 Se você estiver tentando remover o valor ímpar ocasional, um filtro passa-baixa é a melhor das três opções que você identificou. Os filtros de passagem baixa permitem mudanças de baixa velocidade, como as causadas pela rotação de uma bússola à mão, ao mesmo tempo em que rejeitam mudanças de alta velocidade, como as causadas por solavancos na estrada, por exemplo. Uma média móvel provavelmente não será suficiente, uma vez que os efeitos de um único blip em seus dados afetarão vários valores subseqüentes, dependendo do tamanho de sua janela de média móvel. Se os valores ímpares são facilmente detectados, você pode até ser melhor com um algoritmo de remoção de falhas que ignora completamente eles: Aqui está um gráfico guick para ilustrar: O primeiro gráfico é o sinal de entrada, com uma falha desagradável. O segundo gráfico mostra o efeito de uma média móvel de 10 amostras. O gráfico final é uma combinação da média de 10 amostras e do algoritmo de detecção de falhas simples mostrado acima. Quando a falha é detectada, a média de 10 amostras é usada em vez do valor real. Respondeu Sep 21 10 at 13:38 Bem explicado, e pontos de bônus para o gráfico) ndash Henry Cooke Sep 22 10 em 0:50 Uau. Seldomly viu uma resposta tão agradável ndash Muis Jun 4 13 at 9:14 A média móvel é um filtro passa-baixa. Ndash nomen Oct 21 13 at 19:36 Experimente uma medalha runningstreaming vez. Ndash kert Apr 25 14 at 22:09 Movendo média, eu posso descer com. Mas parece-me que o seu provavelmente bastante ineficaz. Não há realmente nenhuma razão uma média móvel deve ser ineficiente. Você mantém o número de pontos de dados desejados em algum buffer (como uma fila circular). Em cada novo ponto de dados, você pop o valor mais antigo e subtraí-lo de uma soma, e empurrar o mais novo e adicioná-lo à soma. Assim, cada novo ponto de dados realmente só implica um poppush, uma adição e uma subtração. Sua média móvel é sempre esta soma deslocada dividida pelo número de valores em seu buffer. Ele fica um pouco mais complicado se você está recebendo dados simultaneamente a partir de vários segmentos, mas desde que seus dados vem de um dispositivo de hardware que parece altamente duvidoso para mim. Oh e também: programadores auto-didáticos horríveis se unem) A média móvel parecia ineficiente para mim, porque você tem que armazenar um buffer de valores - melhor apenas fazer algumas Matemática Inteligente com seu valor de entrada e valor de trabalho atual Eu acho que é como média móvel exponencial trabalho. Uma otimização que eu tenho visto para esse tipo de média móvel envolve o uso de um amplificador de fila de comprimento fixo, um ponteiro para onde você está nessa fila, e apenas envolver o ponteiro ao redor (com ou um if). Voila Nenhum pushpop caro. Poder para os amadores, irmão ndash Henry: Para uma média móvel em linha reta você precisa do buffer simplesmente para que você saiba o valor obtém estourou quando o próximo valor ser empurrado. Dito isto, o amplificador de fila de comprimento fixo, um ponteiro que você está descrevendo, é exatamente o que eu quis dizer com fila quotcircular. Por isso eu estava dizendo que ele não é eficiente. O que você acha que eu quis dizer E se sua resposta é quotan array que muda seus valores de volta em cada remoção indexada (como std :: vector em C). Bem, eu não sei sobre AS3, mas um programador Java tem coleções como CircularQueue em sua disposição (I39m não é um Desenvolvedor Java para I39m certeza há melhores exemplos lá fora that39s apenas o que eu encontrei a partir de uma pesquisa rápida do Google), que implementa precisamente a funcionalidade we39re falando. I39m bastante confiante a maioria das linguagens de médio e baixo nível com bibliotecas padrão têm algo semelhante (por exemplo, no QueueltTgt lá). Enfim, eu era filosofia, então. tudo é perdoado. Ndash Dan Tao Sep 22 10 at 12:44 Uma média móvel decrescente exponencialmente pode ser calculada manualmente com apenas a tendência se você usar os valores adequados. Veja fourmilab. chhackdiete4 para uma idéia sobre como fazer isso rapidamente com uma caneta e papel, se você está procurando exponencialmente suavizada média móvel com 10 suavização. Mas desde que você tem um computador, você provavelmente quer fazer deslocamento binário ao contrário de deslocamento decimal) Desta forma, tudo que você precisa é uma variável para o seu valor atual e um para a média. A média seguinte pode então ser calculada a partir daí. Há uma técnica chamada uma porta de intervalo que funciona bem com amostras espúrias de baixa ocorrência. Assumindo o uso de uma das técnicas de filtro mencionadas acima (média móvel, exponencial), uma vez que você tenha histórico suficiente (uma Constante de Tempo), você pode testar a nova amostra de dados para a razoabilidade, antes de ser adicionada à computação. É necessário algum conhecimento da taxa máxima de mudança razoável do sinal. A amostra bruta é comparada com o valor mais recente suavizado e se o valor absoluto dessa diferença for maior do que o intervalo permitido, essa amostra é descartada (ou substituída por alguma heurística, por exemplo, uma previsão baseada no diferencial de inclinação ou na tendência Valor de predição do duplo suavização exponencial) respondido Abr. 30 16 às 6: 56 Um filtro IIR simples, de um pólo, passa baixo, recursivo é rápido e fácil de implementar, por exemplo Onde x, y são os sinais do acelerômetro XY bruto (não filtrados), xf, yf são os sinais de saída filtrados, ek determina a constante de tempo dos filtros (tipicamente um valor entre 0,9 e 0,9999, onde k maior significa uma maior constante de tempo ). Você pode determinar k empiricamente, ou se você sabe a freqüência de corte necessária, Fc. Então você pode usar a fórmula: onde Fs é a taxa de amostragem. Observe que xf, yf são os valores anteriores do sinal de saída no RHS, e os novos valores de saída no LHS da expressão acima. Observe também que estamos assumindo aqui que você estará amostrando os sinais do acelerômetro em intervalos de tempo regulares, e. Cada 10 ms. A constante de tempo será uma função de k e deste intervalo de amostragem.
No comments:
Post a Comment