Exponencial moving average iir filter


Assuma o filtro IIR de primeira ordem: yn alfa xn (1 - alfa) yn - 1 Como posso escolher o parâmetro alpha s. t. O IIR aproxima o melhor possível o FIR, que é a média aritmética das últimas k amostras: Onde n em k, infty), o que significa que a entrada para o IIR pode ser maior do que k e ainda Id gostaria de ter a melhor aproximação da Significa as últimas entradas k. Eu sei que o IIR tem uma resposta de impulso infinita, daí estou procurando a melhor aproximação. Eu estou feliz por uma solução analítica, seja para ou. Como esses problemas de otimização podem ser solucionados, dado o único IIR de 1ª ordem. Perguntou 6 de outubro 11 às 13:15 Precisa seguir yn alfa xn (1 - alfa) yn - 1 precisamente ndash Phonon 6 de outubro 11 às 13:32 Isso é obrigado a se tornar uma aproximação muito pobre. Você pode pagar qualquer coisa mais do que um número de ordem IIR ndash leftaroundabout 6 de outubro 11 às 13:42 Você pode querer editar sua pergunta para que você não use yn para significar duas coisas diferentes, p. A segunda equação exibida poderia ler zn frac xn cdots frac xn-k1, e você pode querer dizer qual é exatamente o seu critério de cotas quanto possível, por exemplo, Você quer que o yn-znvert seja o mais pequeno possível para todos os n, ou vert yn-znvert2 para ser o menor possível para todos os n. Ndash Dilip Sarwate 6 de outubro 11 às 13:45 niaren Eu sei que este é um post antigo, então se você se lembrar: como sua função 39f39 derivou eu codificou uma coisa semelhante, mas usando as funções de transferência complexas para FIR (H1) e IIR (H2 ) E depois fazendo soma (abs (H1 - H2) 2). Eu comparei isso com sua soma (fj), mas obtive diferentes resultados resultantes. Pensei em perguntar antes de arar através da matemática. Ndash Dom Jun 7 13 às 13:47 OK, vamos tentar derivar o melhor: começar yn ampamp alpha xn (1 - alpha) yn - 1 ampamp alfa xn (1 - alfa) alfa xn-1 (1 - alfa) 2 yn - 2 ampamp alpha xn (1 - alfa) alfa xn-1 (1-alfa) 2 alfa xn-2 (1-alfa) 3 yn-3 fim para que o coeficiente de xn-m seja alfa (1-alfa) m . O próximo passo é tomar derivativos e equivaler a zero. Olhando para um enredo do derivado J para K 1000 e alfa de 0 para 1, parece que o problema (como eu configurei) é mal posado, porque a melhor resposta é alfa 0. Eu acho que há um erro aqui. A maneira como deve ser de acordo com os meus cálculos é: usar o código a seguir em MATLAB produz algo equivalente embora diferente: de qualquer forma, essas funções têm mínimo. Então, vamos assumir que realmente nos preocupamos com a aproximação sobre o suporte (comprimento) do filtro FIR. Nesse caso, o problema de otimização é apenas: Soma J2 (alfa) (alfa (1-alfa) m-frac) 2 Traçar J2 (alfa) para vários valores de K versus resultados alfa na data nas parcelas e tabela abaixo. Para K 8. alfa 0.1533333 Para K 16. alfa 0.08 Para K 24. alfa 0.0533333 Para K 32. alfa 0.04 Para K 40. alfa 0.0333333 Para K 48. alfa 0.0266667 Para K 56. alfa 0.0233333 Para K 64. alfa 0.02 Para K 72. alpha 0.0166667 As linhas tracejadas vermelhas são 1K e as linhas verdes são alfa, o valor de alfa que minimiza J2 (alfa) (escolhido de tt alfa 0: .01: 13). Há uma boa discussão sobre este problema no processamento de sinal incorporado com a arquitetura de micro-sinal. Aproximadamente entre as páginas 63 e 69. Na página 63, inclui uma derivação do filtro de média móvel recursiva exata (que Niaren deu em sua resposta), por conveniência em relação à seguinte discussão, corresponde à seguinte equação de diferença: A aproximação Que coloca o filtro na forma que você especificou exige assumindo que x aproximadamente y, porque (e cito a partir da página 68) y é a média das amostras xn. Essa aproximação nos permite simplificar a equação de diferença anterior da seguinte maneira: Configurando alfa, chegamos à sua forma original, y alfa xn (1-alfa) y, que mostra que o coeficiente que você deseja (em relação a essa aproximação) é exatamente 1 (Onde N é o número de amostras). Essa aproximação é a melhor em algum aspecto. É certamente elegante. Heres como a resposta de magnitude se compara a 44,1 kHz para N 3 e como N aumenta para 10 (aproximação em azul): Como a resposta de Peters sugere, aproximar um filtro FIR com um filtro recursivo pode ser problemático sob uma norma de mínimos quadrados. Uma ampla discussão sobre como resolver este problema em geral pode ser encontrada na tese JOSs, Técnicas para Design de Filtro Digital e Identificação do Sistema com Aplicação ao Violino. Ele defende o uso da Norma de Hankel, mas nos casos em que a resposta de fase não importa, ele também cobre o Método Kopecs, que pode funcionar bem neste caso (e usa uma norma L2). Uma ampla visão geral das técnicas na tese pode ser encontrada aqui. Eles podem produzir outras aproximações interessantes. A média móvel exponencial é um tipo de filtro IIR que é fácil de implementar em C e usa recursos mínimos. Ao contrário de uma média móvel simples, não requer uma memória RAM para armazenar amostras anteriores. Apenas tem que armazenar um valor (a média anterior). Uma média móvel exponencial é expressa como a seguinte equação: avgn (em alfa) avgn-1 (1-alfa). Implementar esta equação usando matemática de ponto flutuante é direto, mas usar variáveis ​​de ponto fixo é um pouco complicado. O trecho de código aqui usa inteiros assinados de 32 bits para a média e os valores de entrada. Os valores intermediários precisam usar matemática de 64 bits para evitar erros de transbordamento. Os valores alfa próximos a zero representam uma média pesada, enquanto um valor alfa de um não possui uma média. Na linha em que o temp0 é calculado, acredito que o fim da linha deve ser lido (65535 - alfa) Caso contrário, um alfa de 1 incluiria incorretamente a média anterior e o novo valor. Infelizmente, o código mostrado tem dois principais erros, devido à forma como a média é armazenada como um número inteiro. Para ver isso, escolha o alfa para ser 1024. Começamos com o adcvalor 0 e, em seguida, dspemai32 retornará 0 conforme o esperado. Em seguida, aumente o adcvalue para 1. tmp0 em dspemai32 será: tmp0 (int64t) 1 (1024) (int64t) 0 (65536 - 1024) 1024 0 64512 1024, então o valor retornado é: (int32t) ((tmp0 32768) 65536) ( 1024 32768) 65536 33792 65536 0 Então dspemai32 continuará retornando 0, enquanto deveria (após um tempo de filtragem suficiente) no final do retorno 1. O código efetivamente implementa um filtro com uma zona morta, não mudando até que a entrada seja diferente da Média por 32768alfa ou mais, ou difere por - (32768alfa) ou menos. Seguindo o exemplo acima, aumente o valor de adc em 31 (que é inferior a 32768alpha). Tmp0 em dspemai32 será: tmp0 (int64t) 31 (1024) (int64t) 0 (65536 - 1024) 31744 0 64512 31744 então o valor retornado é: (int32t) ((tmp0 32768) 65536) (31744 32768) 65536 64512 65536 0 Então dspemai32 continuará retornando 0. Ao aumentar o valor do adc em 32, o tmp0 no dspemai32 será: tmp0 (int64t) 32 (1024) (int64t) 0 (65536 - 1024) 32768 0 64512 32768 então o valor retornado é: ( Int32t) ((tmp0 32768) 65536) (32768 32768) 65536 65536 65536 1 Então, pelo menos, a média está se movendo em direção ao valor de entrada em 1. Isso é bom. Mas então: tmp0 (int64t) 32 (1024) (int64t) 1 (65536 - 1024) 32768 1 64512 97280 então o valor retornado é: (int32t) ((tmp0 97280) 65536) (97280 32768) 65536 130048 65536 1 Então dspemai32 Continuará retornando 1, nunca atingindo o valor de entrada de 32. Não é bom. O segundo erro é a divisão inteira (tmp0 32768) 65536. Em C C, a divisão inteira irá rodar em direção a 0, então, nessa situação, a zona morta é ainda maior. Muito melhor (e muito mais simples) é o algoritmo mostrado por david. prentice em avrfreaks. netcomment824765comment-824765: total longo 0 int médio 0 int N 0 número de trabalho de amostras. ADCW total adicionar ao total de execução se (N gt MAXSAMPLES) amostras suficientes total - média remover outra N N total médio N inteiro Diferencia exponencial média Filtro IIR Filtragem de variáveis ​​medidas circuitos baseados em microcontroladores embutidos são necessários para rastrear o valor médio dos sinais e para Reduzir a sua variabilidade. Como os sinais variam em seu valor médio ao longo do tempo, o filtro precisa ter um meio para descartar medições antigas enquanto incorpora novas amostras. O filtro exponencial de resposta infinita infinita (IIR) foi bem compreendido durante muitas décadas e é amplamente utilizado na análise estatística. Ele fornece um meio computacionalmente simples de determinar o valor médio de uma variável quando o modelo subjacente da variável é desconhecido. Se v n é a variável que está sendo filtrada, então, um n é estimador para o valor médio é: onde é um coeficiente de peso cujo valor determina a quantidade de alisamento. Quanto mais perto é 0, maior a quantidade de suavização. Em alguns casos, o algoritmo desta forma produz resultados intermediários que podem se tornar grandes. Para implementar isso usando uma aritmética inteira de precisão finita, ele é reformulado em uma forma ligeiramente diferente em que os resultados intermediários são delimitados por um valor conhecido. O coeficiente de peso é representado como um 1-1 c. Onde c é uma potência de 2. O poder k pode ser aumentado para aumentar a quantidade de suavização, enquanto a restrição a uma potência de 2 permitirá que multiplicações e divisões sejam implementadas usando operações de mudança direta e esquerda muito rápidas em um microprocessador. A quantidade cv av (n) é rastreada para manter a precisão: se, por exemplo, as amostras são quantidades de 8 bits (como usado em muitos dos algoritmos descritos para os circuitos SMPS descritos aqui), e k é escolhido para ser 8, então a quantidade Cv av (n) pode ser representado como um valor de 16 bits sem perda de informação (precisamente: bits de 8k, veja abaixo). Uma vez que este foi determinado, a quantidade v av (n) é obtida por um simples deslocamento direito por k lugares. Neste ponto, há uma perda de informação de uma magnitude inferior a 1 lsb que pode ser absorvida nas incertezas de v n (note, no entanto, que pode haver correlações nesta informação perdida que podem causar erros sistemáticos). Supondo que as variáveis ​​v i sejam estatisticamente independentes, a análise de variância mostra que é reduzida pelo fator 1 (2c). Para mudanças de passo em v n a constante de tempo é c intervalos de computação. O rastreamento do valor médio torna-se menos preciso à medida que a constante de tempo aumenta para se tornar comparável à menor freqüência no modelo de sinal subjacente. Limite superior para o valor médio O filtro começa com v av (0) 0. Todas as medidas v n estão entre 0 e menos do que B (onde B é normalmente 256 em nossos exemplos). Assim, trabalhando de volta ao início da seqüência (que na prática é sempre finito), que é apenas B. Portanto, o valor máximo da média amplificada av (n) cB é dentro de um número de 16 bits no exemplo acima. No caso em que as amostras têm uma importância estatística diferente, ou seja, algumas têm uma maior probabilidade de erro do que outras, os pesos podem ser aplicados para criar uma forma mais geral do filtro. Esses pesos seriam escolhidos para ter uma relação inversa com a probabilidade de erro. Se w n são os pesos a serem aplicados, o seguinte filtro pode ser usado: a segunda equação produz uma estimativa IIR da média dos pesos, que é usada na primeira equação. Isso pode mostrar-se que produz uma estimativa sem erros da média de v n com um fator de esquecimento de (1-a). Como antes, as médias modificadas cw av (n) e cw av (n) v av (n) fornecidas no lado esquerdo seriam rastreadas e as quantidades desejadas extraídas por divisão simples.

Comments

Popular posts from this blog

Bk negociação de sinais no Brasil

Depósito gratuito de forex

Opções de compra e negociação no Brasil