Tuesday 31 October 2017

Filtro Médio Recursivo Móvel


O Guia de cientistas e engenheiros para processamento de sinal digital Por Steven W. Smith, Ph. D. Uma tremenda vantagem do filtro de média móvel é que ele pode ser implementado com um algoritmo que é muito rápido. Para entender esse algoritmo, imagine passar um sinal de entrada, x, através de um filtro de média móvel de sete pontos para formar um sinal de saída, y. Agora, veja como dois pontos de saída adjacentes, y 50 e y 51, são calculados: são quase os mesmos pontos de cálculo x 48 a x 53 devem ser adicionados para y 50 e novamente para y 51. Se y 50 já foi calculado , A maneira mais eficiente de calcular y 51 é: Uma vez que y 51 foi encontrado usando y 50, então y 52 pode ser calculado a partir da amostra y 51, e assim por diante. Depois que o primeiro ponto é calculado em y, todos os outros pontos podem ser encontrados com apenas uma única adição e subtração por ponto. Isso pode ser expresso na equação: Observe que esta equação usa duas fontes de dados para calcular cada ponto na saída: pontos da entrada e pontos previamente calculados da saída. Isso é chamado de equação recursiva, o que significa que o resultado de um cálculo é usado em cálculos futuros. (O termo recursivo também tem outros significados, especialmente em ciência da computação). O Capítulo 19 discute uma variedade de filtros recursivos com mais detalhes. Esteja ciente de que o filtro recursivo médio móvel é muito diferente dos filtros recursivos típicos. Em particular, a maioria dos filtros recursivos tem uma resposta de impulso infinitamente longa (IIR), composta de sinusoides e exponenciais. A resposta de impulso da média móvel é um pulso retangular (resposta de impulso finito, ou FIR). Este algoritmo é mais rápido que outros filtros digitais por vários motivos. Primeiro, existem apenas dois cálculos por ponto, independentemente do comprimento do kernel do filtro. Em segundo lugar, a adição e a subtração são as únicas operações matemáticas necessárias, enquanto a maioria dos filtros digitais requer uma multiplicação demorada. Em terceiro lugar, o esquema de indexação é muito simples. Cada índice na Eq. 15-3 é encontrado adicionando ou subtraindo constantes inteiras que podem ser calculadas antes do início da filtragem (ou seja, p e q). Por enquanto, todo o algoritmo pode ser realizado com representação inteira. Dependendo do hardware utilizado, os números inteiros podem ser mais que uma ordem de grandeza mais rápida que o ponto flutuante. Surpreendentemente, a representação de números inteiros funciona melhor do que o ponto flutuante com esse algoritmo, além de ser mais rápido. O erro de arredondamento da aritmética de ponto flutuante pode produzir resultados inesperados se você não for cuidadoso. Por exemplo, imagine um sinal de amostra de 10 000 que está sendo filtrado com este método. A última amostra no sinal filtrado contém o erro acumulado de 10.000 adições e 10.000 subtrações. Isso aparece no sinal de saída como um deslocamento. Inteiros não têm esse problema porque não há erro de arredondamento na aritmética. Se você deve usar ponto flutuante com este algoritmo, o programa na Tabela 15-2 mostra como usar um acumulador de dupla precisão para eliminar este drift. Recursive Moving Average Filterbullquot quot (0) 0 bull 2 ​​160160160160 O filtro de média móvel é um filtro FIR De comprimento N com todas as torneiras ajustadas iguais a (1N) .160 É conhecida pela péssima separação de frequência, mas excelente resposta no tempo - nesse sentido, é um filtro Bessel-Bessels.60 Você pode implementá-lo com o bloco SigmaStudios FIR como descrito Aqui: quanto mais o filtro, mais alisamento - mas o algoritmo de filtro FIR padrão usa muitas instruções para filtros enormes, porque ele tem que multiplicar coeficientes para cada toque.160 Este é um desperdício quando todos os coeficientes são iguais.160 Como o Capítulo 15 do livro de Steven W. Smiths apontar, você pode fazer um filtro de média móvel com uma técnica recursiva que tenha um toque antes e depois de um atraso de tamanho (N-1). Esse filtro aparece abaixo como parte de um teste Circuito com fonte de sinal e um Bess El filtro para comparação: 160160160160 Os coeficientes são retirados para o único bloco de ganho na entrada.160 A amostra atual adiciona à saída à medida que entra no atraso, a amostra atrasada subtrai da saída à medida que sai.160 O sumador com o feedback Acumula essas adições e subtrações para formar a saída - isso faz algo que é trivial em C, mas é uma dor na GUI.160 Embora seja utilizada uma técnica recursiva, o filtro continua sendo um verdadeiro filtro FIR - o comprimento de sua resposta de impulso É definido apenas pela sua demora. 160160160160 A minha entrada de teste é uma onda quadrada com ruído adicionado.160 Os resultados filtrados aparecem como o traçado superior em ambas as fotos - Primeiro o filtro médio móvel: o filtro Bessel: 160160160160 O filtro médio móvel permite mais ruído, mas preserva melhor As ondas quadradas formam - não circunda os cantos e as encostas para cima e para baixo são simétricas (sua fase linear) .160 Ouvir as duas formas de onda com fones de ouvido mostra um resultado similar - mais ruído com o filtro médio móvel, mas a característica O som de uma onda quadrada vem através. Não estou certo da solução correta, porém, uma vez que a soma da média de cada amostra introduziria uma quantidade razoável de erro de arredondamento. Hmm. Eu me pergunto se separar a parte fracionária de toda a parte ajudaria. Divida toda a parte de cada número pela contagem. Mantenha três somas correntes: 1) A média das partes inteiras, 2) O restante de cada divisão, e 3) A parte fracionada de cada número. Cada vez que a parte inteira de um número é dividida, o resultado da peça inteira é adicionado à soma de execução média e o restante é adicionado ao restante da soma de execução. Quando a soma de execução restante obtém um valor maior ou igual à contagem, é dividido pela contagem com o resultado da parte inteira adicionado à soma de execução média e o restante adicionado à soma de execução restante. Além disso, em cada cálculo, a parte fracionada é adicionada à soma de rotura fracionada. Quando a média é concluída, a soma de execução restante é dividida pela contagem e o resultado é adicionado à soma de execução média como um número flutuante. Por exemplo: agora o que fazer com a soma de execução fracionada. O perigo de transbordar é muito menos provável aqui, embora ainda seja possível, de modo que uma maneira de lidar com isso seria dividir a soma de execução fracionada pela contagem no final e adicioná-la ao nosso resultado: uma alternativa seria verificar a operação fracionada Somar em cada cálculo para ver se é maior ou igual a contar. Quando isso acontece, faça o mesmo que fazemos com a soma de execução restante. Excelente Jomit Vaghela 6-Mar-07 21:00 Eu gostei do que você disse que os pequenos empregos rapidamente se transformam em grandes empregos. Pensar na otimização enquanto a codificação é uma boa prática. Grande esforço e explicação,

No comments:

Post a Comment