Wednesday 16 August 2017

Moving Average Cic Filter


Como outros já mencionaram, você deve considerar um filtro IIR (resposta de impulso infinito) em vez do filtro FIR (filtro de resposta finito) que você está usando agora. Há mais, mas à primeira vista os filtros FIR são implementados como convoluções explícitas e filtros IIR com equações. O filtro IIR particular que eu uso muito em microcontroladores é um filtro passa-baixa de um único pólo. Este é o equivalente digital de um simples filtro analógico R-C. Para a maioria dos aplicativos, estes terão melhores características do que o filtro de caixa que você está usando. A maioria dos usos de um filtro de caixa que eu encontrei são resultado de alguém que não presta atenção na classe de processamento de sinal digital, não como resultado de precisar de suas características particulares. Se você quiser apenas atenuar as altas freqüências que você conhece são ruim, um filtro passa-baixa de um único pólo é melhor. A melhor maneira de implementar um digitalmente em um microcontrolador é geralmente: FILT lt-- FILT FF (NEW-FILT) FILT é um pedaço de estado persistente. Esta é a única variável persistente que você precisa para calcular esse filtro. NOVO é o novo valor que o filtro está sendo atualizado com esta iteração. FF é a fração do filtro. Que ajusta o peso do filtro. Olhe para este algoritmo e veja que para FF 0 o filtro é infinitamente pesado, já que a saída nunca muda. Para FF 1, realmente não há nenhum filtro, já que a saída apenas segue a entrada. Os valores úteis estão no meio. Em sistemas pequenos, você escolhe o FF para ser 1 2 N, de modo que o multiplicar pelo FF pode ser realizado como uma mudança direta de N bits. Por exemplo, FF pode ser 1 16 e multiplicar por FF, portanto, uma mudança direta de 4 bits. Caso contrário, este filtro precisa apenas de uma subtração e de um som, embora os números geralmente precisem ser maiores do que o valor de entrada (mais na precisão numérica em uma seção separada abaixo). Normalmente, levo as leituras A D significativamente mais rápidas do que elas são necessárias e apliquem dois desses filtros em cascata. Este é o equivalente digital de dois filtros R-C em série, e atenua-se por 12 dB de oitava acima da frequência de rolagem. No entanto, para as leituras A D é geralmente mais relevante para olhar o filtro no domínio do tempo, considerando sua resposta passo a passo. Isso indica o quão rápido o sistema verá uma mudança quando a coisa que você está medindo muda. Para facilitar a concepção desses filtros (o que significa apenas escolher FF e decidir quantos deles entrar em cascata), uso meu programa FILTBITS. Você especifica o número de bits de mudança para cada FF na série de filtros em cascata, e ele calcula a resposta de passo e outros valores. Na verdade, eu costumo executar isso através do meu script wrapper PLOTFILT. Isso executa FILTBITS, que faz um arquivo CSV, e enche o arquivo CSV. Por exemplo, aqui é o resultado do PLOTFILT 4 4: Os dois parâmetros para PLOTFILT significam que haverá dois filtros em cascata do tipo descrito acima. Os valores de 4 indicam o número de bits de mudança para realizar o multiplicar pelo FF. Os dois valores FF são, portanto, 1 16 neste caso. O traço vermelho é a resposta do passo da unidade, e é o principal aspecto a ser observado. Por exemplo, isso indica que, se a entrada muda instantaneamente, a saída do filtro combinado será fixada em 90 do novo valor em 60 iterações. Se você se preocupa com 95 horas de colonização, então você precisa esperar cerca de 73 iterações e por 50 horas de assentamento apenas 26 iterações. O traço verde mostra a saída de um único pico de amplitude total. Isso dá uma idéia da supressão de ruído aleatória. Parece que nenhuma amostra única causará mais do que uma mudança de 2.5 na saída. O traço azul é dar uma sensação subjetiva do que este filtro faz com o ruído branco. Este não é um teste rigoroso, uma vez que não há garantia de que exatamente o conteúdo era dos números aleatórios escolhidos como a entrada de ruído branco para esta corrida de PLOTFILT. É só dar-lhe uma sensação áspera de quanto será esmagado e quão suave é. PLOTFILT, talvez FILTBITS, e muitas outras coisas úteis, especialmente para o desenvolvimento de firmware PIC, estão disponíveis na versão do software PIC Development Tools na minha página de downloads de software. Adicionado sobre a precisão numérica que vejo a partir dos comentários e agora uma nova resposta que tem interesse em discutir o número de bits necessários para implementar este filtro. Observe que o multiplicar pelo FF criará novos bits do Log 2 (FF) abaixo do ponto binário. Em sistemas pequenos, FF é geralmente escolhido para ser 1 2 N, de modo que esse multiplicação seja efetivamente realizado por uma mudança direta de N bits. FILT é, portanto, geralmente um número inteiro de ponto fixo. Observe que isso não altera nenhuma das matemáticas do ponto de vista dos processadores. Por exemplo, se você estiver filtrando 10 bit A D e N 4 (FF 1 16), então você precisa de 4 bits de fração abaixo das leituras A D inteiras de 10 bits. A maioria dos processadores, você estará fazendo operações inteiras de 16 bits devido às leituras A 10 bit A. Neste caso, você ainda pode fazer exatamente as mesmas operações de inteiro de 16 bits, mas comece com as leituras A D desviadas em 4 bits. O processador não conhece a diferença e não precisa. Fazer matemática em inteiros inteiros de 16 bits funciona se você considera que eles são 12.4 pontos fixos ou verdadeiros inteiros de 16 bits (16.0 ponto fixo). Em geral, você precisa adicionar N bits a cada pólo de filtro se você não deseja adicionar ruído devido à representação numérica. No exemplo acima, o segundo filtro de dois teria que ter 1044 18 bits para não perder informações. Na prática, em uma máquina de 8 bits que significa que você use valores de 24 bits. Tecnicamente, apenas o segundo pólo de dois precisaria do valor mais amplo, mas, para a simplicidade do firmware, costumo usar a mesma representação e, assim, o mesmo código, para todos os pólos de um filtro. Normalmente, eu escrevo uma sub-rotina ou macro para executar uma operação de pólo de filtro e, em seguida, aplique isso para cada pólo. Se uma sub-rotina ou macro depende se os ciclos ou a memória do programa são mais importantes nesse projeto particular. De qualquer forma, eu uso algum estado de rascunho para passar NOVO para a macro de sub-rotina, que atualiza o FILT, mas também carrega isso no mesmo estado de rascunho NOVO. Isso facilita a aplicação de vários pólos desde que o FILT atualizado de um pólo é o NOVO do próximo. Quando uma sub-rotina, é útil ter um ponteiro apontar para FILT no caminho, que é atualizado logo após FILT no caminho de saída. Dessa forma, a sub-rotina atua automaticamente em filtros consecutivos na memória se for chamado várias vezes. Com uma macro, você não precisa de um ponteiro, pois você passa no endereço para operar em cada iteração. Exemplos de código Aqui está um exemplo de uma macro como descrito acima para um PIC 18: E aqui está uma macro semelhante para um PIC 24 ou dsPIC 30 ou 33: Ambos os exemplos são implementados como macros usando o meu pré-processador PIC assembler. Que é mais capaz do que qualquer uma das instalações de macro incorporadas. Clabacchio: Outro problema que eu deveria ter mencionado é a implementação do firmware. Você pode escrever uma sub-rotina de filtro passa-baixa de um único pó uma vez, e depois aplicá-la várias vezes. Na verdade, costumo escrever uma sub-rotina para levar um ponteiro na memória para o estado do filtro, então faça avançar o ponteiro para que possa ser chamado sucessivamente de forma fácil para realizar filtros multipolar. Ndash Olin Lathrop 20 de abril 12 às 15:03 1. Muito obrigado por suas respostas - todos eles. Eu decidi usar este Filtro IIR, mas este Filtro não é usado como um Filtro LowPass Padrão, pois eu preciso usar os Valores de Contador médios e compará-los para detectar Mudanças em um determinado intervalo. Uma vez que estes valores são de dimensões muito diferentes dependendo do hardware que eu queria tomar uma média para poder reagir automaticamente a essas mudanças específicas de hardware. Ndash sensslen 21 de maio 12 às 12:06 Se você pode viver com a restrição de um poder de dois itens a média (ou seja, 2,4,8,16,32 etc.), então a divisão pode ser feita com facilidade e eficiência em um Micro de baixo desempenho sem nenhuma divisão dedicada porque pode ser feito como uma mudança de bit. Cada turno para a direita é um poder de dois, por exemplo: O OP pensou que ele tinha dois problemas, dividindo-se em um PIC16 e memória para o buffer de anel. Esta resposta mostra que a divisão não é difícil. É certo que não aborda o problema de memória, mas o sistema SE permite respostas parciais, e os usuários podem tirar algo de cada resposta por si mesmos, ou mesmo editar e combinar as respostas de outros. Uma vez que algumas das outras respostas exigem uma operação de divisão, elas são igualmente incompletas, uma vez que não mostram como conseguir isso eficientemente em um PIC16. Ndash Martin 20 de abril 12 às 13:01 Há uma resposta para um verdadeiro filtro de média móvel (aka filtro de caixa) com menos requisitos de memória, se você não se importa com o downsampling. É chamado de filtro integrador-pente em cascata (CIC). A idéia é que você tenha um integrador que você tome diferenças em um período de tempo, e o dispositivo chave de economia de memória é que, por downsampling, você não precisa armazenar todos os valores do integrador. Ele pode ser implementado usando o seguinte pseudocódigo: Seu comprimento efetivo da média móvel é decimationFactorstatesize, mas você só precisa manter em torno de amostras estadisticas. Obviamente, você pode obter um melhor desempenho se o seu Stateization e decimationFactor forem poderes de 2, de modo que os operadores de divisão e restante sejam substituídos por turnos e máscaras-ands. Postscript: eu concordo com a Olin que você sempre deve considerar filtros IIR simples antes de um filtro de média móvel. Se você não precisa da freqüência-nulo de um filtro de caixa, um filtro passa-baixa de 1 pólo ou 2 pólos provavelmente funcionará bem. Por outro lado, se você estiver filtrando para fins de decimação (tomando uma entrada de alta taxa de amostragem e avaliando-a para uso por um processo de baixa taxa), então um filtro CIC pode ser exatamente o que você está procurando. (Especialmente se você puder usar statesize1 e evitar a compatibilidade do ringbuffer com apenas um único valor de integrador anterior) Há uma análise aprofundada da matemática por trás do uso do filtro IIR de primeira ordem que Olin Lathrop já descreveu na troca de pilha de processamento de sinal digital (Inclui muitas imagens bonitas.) A equação para este filtro IIR é: Isto pode ser implementado usando apenas números inteiros e sem divisão usando o seguinte código (pode precisar de alguma depuração como eu estava digitando de memória.) Este filtro se aproxima de uma média móvel de As últimas K amostras, definindo o valor de alfa para 1 K. Faça isso no código anterior, definindo BITS para LOG2 (K), ou seja, para K 16, defina BITS para 4, para K4, defina BITS para 2, etc. ( Vou verificar o código listado aqui assim que recebo uma alteração e editar esta resposta, se necessário.) Respondeu 23 de junho 12 às 4:04 Heres um filtro passa-baixa de um único polo (média móvel, com freqüência de corte CutoffFrequency). Muito simples, muito rápido, funciona muito bem, e quase sem memória extra. Nota: Todas as variáveis ​​têm um alcance além da função de filtro, exceto o passado em newInput Note: Este é um filtro de estágio único. Múltiplos estágios podem ser conectados em cascata para aumentar a nitidez do filtro. Se você usar mais de um estágio, você terá que ajustar DecayFactor (como se relaciona com a frequência de corte) para compensar. E, obviamente, tudo que você precisa é aquelas duas linhas colocadas em qualquer lugar, elas não precisam de sua própria função. Este filtro possui um tempo de aceleração antes que a média móvel represente a do sinal de entrada. Se você precisar ignorar esse tempo de aceleração, você pode inicializar MovingAverage para o primeiro valor de newInput em vez de 0 e espero que o primeiro newInput não seja um outlier. (CutoffFrequency SampleRate) tem uma faixa entre 0 e 0,5. DecayFactor é um valor entre 0 e 1, geralmente perto de 1. Os carros de precisão única são bons o suficiente para a maioria das coisas, eu apenas prefiro duplas. Se você precisa ficar com números inteiros, você pode converter DecayFactor e Factor de amplitude em números inteiros fracionários, nos quais o numerador é armazenado como o inteiro e o denominador é um poder inteiro de 2 (para que você possa mudar de bit para a direita como o Denominador em vez de ter que dividir durante o loop do filtro). Por exemplo, se DecayFactor 0.99 e você deseja usar números inteiros, você pode definir o DecayFactor 0.99 65536 64881. E então, quando você se multiplicar pelo DecayFactor no loop do filtro, basta mudar o resultado 16. Para obter mais informações sobre isso, um excelente livro é esse Online, capítulo 19 em filtros recursivos: dspguide ch19.htm PS Para o paradigma da Média em Movimento, uma abordagem diferente para definir DecayFactor e AmplitudeFactor que pode ser mais relevante para suas necessidades, digamos que você quer o anterior, cerca de 6 itens em média, fazendo isso discretamente, você adicionará 6 itens e dividirá por 6, então Você pode configurar o AmplitudeFactor para 1 6 e DecayFactor para (1.0 - AmplitudeFactor). Respondeu 12 de maio 12 às 22:55 Todos os outros comentaram completamente sobre a utilidade do IIR vs. FIR e sobre a divisão de poder de dois. Eu gostaria de dar alguns detalhes de implementação. O abaixo funciona bem em pequenos microcontroladores sem FPU. Não há multiplicação, e se você mantém N um poder de dois, toda a divisão é de mudança de bit de ciclo único. Tampão de anel FIR básico: mantenha um buffer de execução dos últimos valores de N e uma SOM em execução de todos os valores no buffer. Cada vez que uma nova amostra vem, subtrair o valor mais antigo no buffer de SUM, substituí-lo pela nova amostra, adicionar a nova amostra a SUM e SOM DE SAÚDE. Toque de anel IIR modificado: mantenha uma SOM executória do último N Valores. Cada vez que uma nova amostra vem, SUM - SUM N, adicione a nova amostra, e a saída SUM N. respondeu 28 de agosto às 13:45 Se I39m lendo você direito, você descreve um filtro IIR de primeiro ordem o valor que você está subtraindo Não é o valor mais antigo que está caindo, mas sim a média dos valores anteriores. Os filtros IIR de primeiro ordem certamente podem ser úteis, mas eu não tenho certeza do que você quer dizer quando você sugere que a saída seja a mesma para todos os sinais periódicos. A uma taxa de amostragem de 10KHz, a alimentação de uma onda quadrada de 100Hz em um filtro de caixa de 20 estágios produzirá um sinal que sobe uniformemente para 20 amostras, fica alto para 30, cai uniformemente para 20 amostras e fica com baixo para 30. Uma ordem de primeira ordem Filtro IIR. Ndash supercat 28 de agosto 13 às 15:31 renderá uma onda que começa a subir bruscamente e gradualmente se nivela perto (mas não em) o máximo de entrada, então começa a cai e gradualmente nivela perto (mas não em) o mínimo de entrada. Comportamento muito diferente. Ndash supercat 28 de agosto 13 às 15:32 Uma questão é que uma média móvel simples pode ou não ser útil. Com um filtro IIR, você pode obter um bom filtro com relativamente poucos calcs. O FIR que você descreve só pode dar-lhe um retângulo no tempo - um sinc na freq - e você pode gerenciar os lobos laterais. Pode valer a pena lançar alguns números inteiros para tornar uma boa FIR sintonizada simétrica se você pode poupar os tiques do relógio. Ndash Scott Seidman 29 de agosto 13 às 13:50 ScottSeidman: Não há necessidade de se multiplicar se alguém simplesmente tiver cada estágio da FIR, quer a saída da média da entrada para esse estágio e seu valor armazenado anterior, e depois armazene a entrada (se tiver O intervalo numérico, pode-se usar a soma em vez da média). Se isso é melhor do que um filtro de caixa depende da aplicação (a resposta de passo de um filtro de caixa com um atraso total de 1 ms, por exemplo, terá um pico d2 dt desagradável quando a entrada for alterada, e novamente 1 ms depois, mas terá a Mínimo d dt possível para um filtro com um atraso total de 1ms). Ndash supercat 29 de agosto 13 às 15:25 Como mikeselectricstuff disse, se você realmente precisa reduzir suas necessidades de memória e você não se importa que sua resposta de impulso seja exponencial (em vez de um pulso retangular), eu iria por um filtro exponencial de média móvel . Eu os uso extensivamente. Com esse tipo de filtro, você não precisa de nenhum buffer. Você não precisa armazenar N amostras passadas. Apenas um. Então, seus requisitos de memória são reduzidos por um fator de N. Além disso, você não precisa de nenhuma divisão para isso. Somente multiplicações. Se você tiver acesso à aritmética de ponto flutuante, use as multiplicações de ponto flutuante. Caso contrário, faça multiplicações inteiras e mude para a direita. No entanto, estamos em 2012, e eu recomendaria que você usasse compiladores (e MCUs) que permitem que você trabalhe com números de ponto flutuante. Além de ser mais eficiente e mais rápido (você não precisa atualizar itens em qualquer buffer circular), eu diria que também é mais natural. Porque uma resposta exponencial de impulso corresponde melhor à maneira como a natureza se comporta, na maioria dos casos. Respondeu 20 de abril 12 às 9:59 Um problema com o filtro IIR como quase tocado por olin e supercat, mas aparentemente desconsiderado por outros é que o arredondamento apresenta alguma imprecisão (e potencialmente trunção de polarização). Assumindo que N é um poder de dois, e apenas uma aritmética inteira é usada, a direita de mudança elimina sistematicamente os LSBs da nova amostra. Isso significa que, quanto tempo a série possa ser, a média nunca levará em consideração isso. Por exemplo, suponha uma série que diminua lentamente (8,8,8. 8,7,7,7. 7,6,6) e assume que a média é de fato 8 no início. A amostra do punho 7 trará a média para 7, independentemente da força do filtro. Apenas para uma amostra. A mesma história para 6, etc. Agora pense no contrário. A série sobe. A média permanecerá em 7 para sempre, até que a amostra seja grande o suficiente para fazê-la mudar. Claro, você pode corrigir o viés, adicionando 1 2N 2, mas isso realmente não resolverá o problema de precisão. Nesse caso, a série decrescente permanecerá para sempre em 8 até a amostra ser 8-1 2 (N 2). Para N4, por exemplo, qualquer amostra acima de zero manterá a média inalterada. Eu acredito que uma solução para isso implicaria manter um acumulador de LSBs perdidos. Mas eu não conseguiria o suficiente para ter código pronto, e não tenho certeza de que isso não prejudicaria o poder IIR em alguns outros casos de séries (por exemplo, se 7,9,7,9 seria de 8). Olin, sua cascata de dois estágios também precisaria de alguma explicação. Você quer dizer segurar dois valores médios com o resultado do primeiro alimentado no segundo em cada iteração. Qual é o benefício deste Compreensão em cascata de filtros integrador-pente Por Richard Lyons, Cortesia da Programação de Sistemas Incorporados 31 de março de 2005 (14:49 PM) O filtro CIC anteriormente obscuro agora é vital para muitas tarefas e equipamentos de comunicações sem fio de alto volume. O uso de filtros CIC pode reduzir os custos, melhorar a confiabilidade e ajudar o desempenho. Heres um guia para você começar. Os filtros digitais em cascata integrator-comb (CIC) são implementações computacionalmente eficientes de filtros de passagem baixa de banda estreita e muitas vezes são incorporados em implementações de hardware de decimação e interpolação em sistemas de comunicação modernos. Os filtros CIC foram introduzidos na comunidade de processamento de sinal, por Eugene Hogenauer, há mais de duas décadas, mas as suas possibilidades de aplicação cresceram nos últimos anos. 1 As melhorias na tecnologia de chips, o aumento do uso de técnicas de filtragem de polifases, os avanços nas implementações do conversor delta-sigma e o crescimento significativo nas comunicações sem fio têm suscitado muito interesse nos filtros CIC. Embora o comportamento ea implementação desses filtros não sejam complicados, sua cobertura tem sido escassa na literatura de sistemas embarcados. Este artigo tenta aumentar o corpo de literatura para engenheiros de sistemas embarcados. Depois de descrever alguns aplicativos para filtros CIC, introduzir sua estrutura e comportamento, apresentar o desempenho do domínio de frequência dos filtros CIC e discutir várias questões práticas importantes na construção desses filtros. Aplicações de filtro CIC Os filtros CIC são adequados para filtragem de antialiasing antes da decimação (redução da taxa de amostra), como mostrado na Figura 1a e para filtragem anti-imagem para sinais interpolados (aumento da taxa de amostra) como na Figura 1b. Ambas as aplicações estão associadas a filtragem de taxa de dados muito altax2014, como modulação em quadratura de hardware e desmodulação em sistemas sem fio modernos e conversores delta-sigma A D e D A. Como os envelopes de resposta de magnitude de frequência são sin (x) semelhantes a x, os filtros CIC são tipicamente seguidos ou precedidos por filtros FIR de linha de atraso tapped-step lowpass de fase linear de desempenho superior cujas tarefas são para compensar os filtros CIC não - Banda passadeira plana. Essa arquitetura de filtro em cascata tem benefícios valiosos. Por exemplo, com a decimação, você pode reduzir significativamente a complexidade computacional da filtragem de passagem baixa em banda estreita em comparação com se você usou um único filtro de resposta de impulso finito de passagem baixa (FIR). Além disso, o filtro FIR de seguimento opera com taxas de clock reduzidas, minimizando o consumo de energia em aplicações de hardware de alta velocidade. Um bônus crucial no uso de filtros CIC e uma característica que os torna populares em dispositivos de hardware, é que eles não precisam de multiplicação. A aritmética necessária para implementar esses filtros digitais é apenas adições e subtrações. Com isso dito, vejamos como os filtros CIC operam. Filtro de soma de corrida recursiva Os filtros de CIC originam-se da noção de um filtro de soma de corrida recursiva. Que é em si uma forma eficiente de uma média média móvel não recursiva. Lembre-se do processo padrão padrão em D-ponto na Figura 2a. Lá, vemos que D -1 summations (mais um multiplicado por 1 D) são necessários para calcular a saída de média y (n). A saída de filtros de média em movimento D-time no tempo é expressa como: onde n é o nosso índice de domínio do tempo. A expressão de domínio z para esta média móvel é: enquanto a função de transferência de H (z) de domínio z é: eu forneço essas equações para não complicar as coisas, mas porque elas são úteis. A Equação 1 nos informa como construir uma média média móvel e a Equação 3 é na forma usada pelo software comercial de processamento de sinal para modelar o comportamento de domínio de freqüência da média média. O próximo passo em nossa jornada para entender os filtros da CIC é considerar uma forma equivalente da média média móvel, o filtro da soma de corrida recursiva descrito na Figura 2b. Lá verificamos que a amostra de entrada atual x (n) é adicionada e a amostra de entrada x mais antiga (n - D) é subtraída da média de saída anterior y (n -1). É chamado de recursivo porque tem feedback. Cada amostra de saída de filtro é mantida e usada para calcular o próximo valor de saída. A equação de diferença dos filtros recursivos da soma de execução é: ter função de transferência H - dominio H (z) de: Usamos a mesma variável H (z) para as funções de transferência do filtro de média móvel e do filtro de soma recorrente recursiva porque As funções de transferência são iguais. É verdade. A Equação 3 é a expressão não recursiva e a Equação 5 é a expressão recursiva para uma média de pontos D. A prova matemática disso pode ser encontrada em meu livro sobre processamento de sinal digital, mas em breve eu demonstre essa equivalência com um exemplo. 2 É por isso que nos preocupamos com os filtros recursivos da soma de corrida: a média padrão móvel na Figura 2a deve realizar adições D -1 por amostra de saída. O filtro de soma de corrida recursiva tem a vantagem doce de que apenas uma adição e uma subtração são necessárias por amostra de saída, independentemente do comprimento de atraso D. Esta eficiência computacional torna o filtro de soma recorrente recursiva atrativo em muitas aplicações que procuram redução de ruído através da média. Em seguida, veja como um filtro CIC é, ele próprio, um filtro de soma de corrida recursiva. Estruturas de filtro CIC Se condensamos a representação da linha de atraso e ignoramos a escala 1 D na Figura 2b, obtemos a forma clássica de um filtro CIC de 1ª ordem, cuja estrutura em cascata é mostrada na Figura 2c. A parte feedforward do filtro CIC é chamada de seção de pente, cujo diferencial é D. Enquanto a seção de feedback normalmente é chamada de integrador. A fase de pente subtrai uma amostra de entrada atrasada da amostra de entrada atual, e o integrador é simplesmente um acumulador. A equação de diferença de filtros de CIC é: e sua função de transferência de domínio z é: Para ver por que o filtro CIC é de interesse, primeiro examinamos seu comportamento no domínio do tempo, para D 5, mostrado na Figura 3. Se um impulso unitário, Sequência, uma amostra de valor unitário seguida de muitas amostras de valor zero, foi aplicada na fase de pente, que a saída dos estágios é como mostrado na Figura 3a. Agora pense, qual seria a saída do integrador se a sua entrada fosse a resposta impulsiva dos estágios de pente. O impulso positivo inicial do filtro de pente inicia a saída dos integradores todos, como na Figura 3b. Então, D amostras mais tarde, o impulso negativo da fase de pente chega ao integrador para zero todas as amostras de saída de filtro CIC adicionais. A questão principal é que a resposta de impulso unitário combinada do filtro CIC, sendo uma seqüência retangular, é idêntica às respostas de impulso unitário de um filtro de média móvel e do filtro de soma de corrida recursiva. (As médias de conversão, os filtros de soma de corrida recursiva e os filtros de CIC são parentes próximos. Eles têm os mesmos locais de zero do zero do pólo, suas respostas de magnitude de freqüência têm formas idênticas, suas respostas de fase são idênticas e suas funções de transferência diferem apenas por uma Fator de escala constante.) Se você entender o comportamento do domínio do tempo de uma média média móvel, então você agora entende o comportamento do domínio do tempo do filtro CIC na Figura 2c. A freqüência de freqüência e a resposta de fase linear de um filtro D 5 CIC são mostradas na Figura 4a em que a freqüência x192 s é a taxa de amostragem do sinal de entrada em Hz. Podemos obter uma expressão para a resposta de freqüência dos filtros CIC, avaliando a função de transferência da Equação 7s H cic (z) no círculo da unidade z-planes, definindo z e j 2 x3C0x192. Cedendo: usando a identidade Eulers 2 j sen (x3B1) e jx3B1 - e jx3B1. Podemos escrever: se ignorarmos o fator de fase na Equação 9, essa proporção de termos de pecado () pode ser aproximada por uma função de pecado (x) x. Isso significa que o CIC filtra a resposta de magnitude da frequência aproximadamente igual a uma função sin (x) x centrada em 0Hz como vemos na Figura 4a. (É por isso que os filtros CIC são às vezes chamados de filtros de sinc.) Os criadores de filtros digitais gostam de ver parcelas de zero pólo em ponte de z, por isso fornecemos as características de plano-z de um filtro D 5 CIC na Figura 4c, onde o filtro de pente produz D zeros, igualmente espaçados em torno do círculo unitário, e o integrador produz um único pólo cancelando o zero em z 1. Cada um dos zeros dos pentes, sendo uma D raiz de 1, está localizado em z (m) ej 2 x3C0m D . Onde m 0, 1, 2. D -1, correspondendo a uma magnitude nula na Figura 4a. A situação normalmente arriscada de ter um pólo de filtro diretamente no círculo da unidade não precisa nos incomodar aqui porque não há erro de quantização de coeficiente em nossa função de transferência H cic (z). Os coeficientes de filtro de CIC são aqueles e podem ser representados com precisão perfeita com formatos de número de ponto fixo. Embora recursivos, os filtros CIC felizes são garantidos estáveis, a fase linear mostrada na Figura 4b, e tem respostas de impulso de comprimento finito. A 0Hz (DC), o ganho de um filtro CIC é igual ao atraso D do filtro de pente. Este fato, cuja derivação está disponível, será importante para nós quando implementarmos um filtro CIC no hardware. 2 Figura 5: Filtros CIC de estágio único usados ​​na decimação e na interpolação Veja a imagem de tamanho completo Novamente, os filtros CIC são usados ​​principalmente para filtragem de antialiasing antes da decimação e para filtragem anti-imagem para sinais interpolados. Com essas noções em mente, nós trocamos a ordem da figura 2cs pente e integradorx2014 foram autorizados a fazê-lo porque essas operações são linearx2014 e incluem decimação por um fator de mudança de taxa de amostragem R na Figura 5a. (Você pode provar que a resposta de impulso unitário da combinação do pente do integrador, antes da alteração da taxa de amostragem, na Figura 5a é igual à da Figura 3c.) Na maioria dos aplicativos de filtro CIC, a variação de taxa R é igual à Pentear atraso diferencial D. Mas também mantenha-os como parâmetros de design separados por enquanto. Figura 6: Resposta de magnitude de um filtro CIC de 1ª ordem, D 8, dizimando: antes da decimação após a decimação de R 8 Ver imagem de tamanho completo A operação de decimação x2193 R significa descartar todos, exceto todos os R, amostra, resultando em uma taxa de amostra de saída De x192 s, x192 s, em R. Para investigar um comportamento de domínio de frequência de filtros de CIC em mais detalhes, a Figura 6a mostra a resposta de magnitude de frequência de um filtro CIC D 8 antes da decimação. A banda espectral, de largura B. Centrado a 0Hz é a banda passante desejada do filtro. Um aspecto-chave dos filtros CIC é a dobração espectral que ocorre devido à diminuição. Essas bandas espectrais sombreadas em B centradas sobre múltiplos de x192 s, em R na Figura 6a irão diretamente em nossa banda passada desejada após a decimação por R 8 como mostrado na Figura 6b. Observe como o maior componente espectral alias, neste exemplo, é aproximadamente 16dB abaixo do pico da faixa de interesse. É claro que os níveis de potência alias dependem da largura de banda B x2014, quanto menor for B, menor será a energia aliada depois da dizimação. Figura 7: 1ª ordem, DR 8, interpolando espectros de filtro CIC: imagens espectrais de saída de espectro de entrada Ver imagem de tamanho completo A Figura 5b mostra um filtro CIC usado para interpolação onde o símbolo R x2191 significa inserir R -1 zeros entre cada x (n ) Amostra, produzindo ay (n) taxa de amostra de saída de x192 s, Rx192 s, em. (Nesta discussão do filtro CIC, a interpolação é definida como inserção de zero seguida de filtragem.) A Figura 7a mostra um espectro de banda base arbitrário, com suas replicações espectrales, de um sinal aplicado ao filtro CIC interpolando D R 8 da Figura 5b. O espectro de saída dos filtros na Figura 7b mostra como a filtragem imperfeita dá origem às imagens espectrales não desejadas. Após a interpolação, as imagens indesejadas do espectro de banda base de largura B residem nos centros nulos, localizados em múltiplos inteiros de x192 s, fora R. Se seguimos o filtro CIC com um filtro FIR tradicional de passagem baixa tappedx2014delay-line, cuja faixa de interrupção inclui a primeira banda de imagem, a rejeição de imagem bastante alta pode ser alcançada. Figura 8: estrutura de filtro de decimação de CIC de 3ª ordem e resposta de magnitude antes da decimação quando DR 8 Ver imagem em tamanho real Melhorar a atenuação de CIC O método mais comum para melhorar o anti-aliasing do filtro CIC e a atenuação da imagem-rejeição é aumentando a ordem M de O filtro CIC usando vários estágios. A Figura 8 mostra a estrutura e a resposta de magnitude de frequência de um filtro de decimação CIC de 3ª ordem (M 3). Observe a atenuação aumentada em x192 s, fora R na Figura 8b em comparação com o filtro CIC de 1ª ordem na Figura 6a. Como os estágios do M 3 CIC estão em cascata, a resposta global da magnitude da freqüência será o produto de suas respostas individuais ou: O preço que pagamos pela atenuação anti-alias melhorada é o aderência de hardware adicional e o aumento da taxa de passabilidade do filtro CIC. Uma penalidade adicional de ordem de filtro aumentada vem do ganho do filtro, que é exponencial com a ordem. Como os filtros CIC geralmente devem funcionar com precisão total para permanecerem estáveis, o número de bits nos agregadores é M log 2 (D), o que significa uma grande penalidade de largura de palavra de dados para filtros de ordem superior. Mesmo assim, esta implementação de múltiplos estágios é comum em circuitos integrados comerciais, onde um filtro CIC de M-order é geralmente chamado de filtro sinc M. Figura 9: Implementações de filtro CIC de estágio único: para decimação para interpolação Exibir imagem em tamanho real Construir um filtro CIC Em filtros CIC, a seção de pente pode preceder ou seguir a seção integradora. No entanto, é sensato colocar a seção de pente no lado do filtro operando na taxa de amostragem mais baixa para reduzir os requisitos de armazenamento no atraso. Trocando os filtros de pente da Figura 5 com os resultados das operações de troca de taxa na implementação mais comum de filtros CIC, como mostrado na Figura 9. Observe que a seção de pente dos filtros de decimação agora tem um comprimento de atraso (atraso diferencial) de N D R. Isso porque um atraso de amostra de N após a decimação por R é equivalente a um atraso de amostra de D antes da decimação por R. Da mesma forma, para o filtro de interpolação, um atraso de amostra de N antes da interpolação por R é equivalente a um atraso de amostra D depois da interpolação por R. Essas configurações da Figura 9 produzem dois benefícios principais: primeiro, as novas seções de pente, o novo atraso diferencial diminui para N D R, reduzindo os requisitos de armazenamento de dados em segundo lugar, a seção de pente agora funciona com uma taxa de clock reduzida. Ambos os efeitos reduzem o consumo de energia do hardware. Figura 10: respostas de filtro de decimação de CIC: para vários valores de atraso diferencial N. Quando R 8 para dois fatores de decimação quando N 2 Ver imagem de tamanho completo O parâmetro de design de atraso diferencial de seções de pente N é tipicamente 1 ou 2 para altas taxas de taxa de amostragem, como é freqüentemente usado em conversores de down up. N efetivamente define o número de nulos na resposta de freqüência de um filtro de decimação, como mostrado na Figura 10a. Uma característica importante de um dizimador de CIC é que a forma da resposta do filtro muda muito pouco, como mostrado na Figura 10b, como uma função da proporção de decimação. Para valores de R maiores que aproximadamente 16, a alteração na forma do filtro é insignificante. Isso permite que o mesmo filtro FIR de compensação seja usado para sistemas de proporção de decomposição variável. O filtro CIC sofre de transbordamento de registro por causa do feedback da unidade em cada etapa do integrador. O transbordamento não tem nenhuma conseqüência enquanto as duas condições seguintes forem atendidas: o alcance do sistema numérico é maior ou igual ao valor máximo esperado na saída, e o filtro é implementado com a aritmética de dois complementos (não - aturizados). Uma vez que um filtro CIC de 1º pedido possui um ganho de D NR a 0Hz (DC), os filtros de decimação CIC em cascata têm um ganho líquido de (NR) M. Cada integrador adicional deve adicionar outra largura de bits NR para os estágios. Os filtros CIC interpolados possuem zeros inseridos entre as amostras de entrada, reduzindo seu ganho em um fator de 1 R para contabilizar amostras de valor zero, de modo que o ganho líquido de um filtro CIC interpolante é (NR) M R. Como o filtro deve usar a aritmética inteira, a largura das palavras em cada etapa do filtro deve ser ampla o suficiente para acomodar o sinal máximo (tempo de entrada em escala total do ganho) nesse estágio. Embora o ganho de um filtro de decimação CIC de ordem M (NR) M, os integradores individuais podem experimentar transbordamento. (O seu ganho é infinito em DC). Assim, o uso da aritmética do complemento duplo resolve essa situação de transbordamento, desde que a largura da palavra do integrador acomode a diferença máxima entre duas amostras sucessivas (em outras palavras, a diferença não causa mais do que Um único estouro). Usando o formato binário de complemento duplo, com sua propriedade modular envolvente, o filtro de pente em seguida calculará adequadamente a diferença correta entre duas amostras sucessivas de saída do integrador. Para a interpolação, o crescimento em tamanho de palavra é um bit por fase de filtro de pente e o transbordamento deve ser evitado para que os integradores se acumulem corretamente. Então, devemos acomodar um pouco mais de crescimento de palavras de dados em cada etapa de pente para interpolação. Existe alguma pequena flexibilidade ao descartar alguns dos bits menos significativos (LSBs) dentro dos estágios de um filtro CIC, à custa do ruído adicional na saída dos filtros. Os efeitos específicos desta remoção de LSB são, no entanto, um problema complicado, você pode aprender mais sobre o assunto lendo o papel de Hogenauers. 1 Enquanto a discussão anterior focada em filtros CIC com fio rígido, esses filtros também podem ser implementados com chips DSP de ponto fixo programáveis. Embora esses chips tenham caminhos de dados inflexíveis e larguras de palavras, a filtragem de CIC pode ser vantajosa para altas mudanças de taxa de amostragem. Grandes larguras de palavras podem ser acomodadas com adições de multiplicações à custa de instruções extras. Mesmo assim, para grandes fatores de mudança de taxa de amostragem, a carga de trabalho computacional por amostra de saída, em chips DSP de ponto fixo, pode ser pequena. Filtros de compensação Em aplicações típicas de filtragem de interpolação de decimação, desejamos uma velocidade de banda razoável razoavelmente e uma performance de filtro de região de transição estreita. Essas propriedades desejáveis ​​não são fornecidas apenas por filtros da CIC, com os ganhos de banda passiva caídos e as grandes regiões de transição. Nós aliviamos esse problema, em decimação, por exemplo, seguindo o filtro CIC com um filtro FIR não recursivo de compensação, como na Figura 1a, para reduzir a largura de banda de saída e aplanar o ganho de banda passante. Figura 11: Compensação das respostas do filtro FIR com um processo de decimation de 1ª ordem CIC com uma decimação de 3ª ordem Exibir imagem de tamanho completo A resposta de amplitude de freqüência dos filtros FIR da compensação é idealmente uma versão invertida da resposta de banda passante do filtro CIC semelhante à exibida pelo Curva tracejada na Figura 11a para um filtro FIR simples de três batidas cujos coeficientes são -1 16, 9 8, -1 16. Com a curva pontilhada que representa a inclinação da banda passada não compensada de um filtro R 8 CIC de 1ª ordem, a curva sólida representa A resposta compensada dos filtros em cascata. Se a largura de banda passadeira ou a ordem do filtro CIC aumentam, a correção torna-se maior, exigindo mais torneiras de filtro FIR de compensação. Um exemplo desta situação é mostrado na Figura 11b, onde a curva pontilhada representa a inclinação da banda de passagem de um filtro R 8 CIC de 3ª ordem e a curva tracejada, sob a forma de x sin (x) 3, é a resposta de um 15- Filtro FIR de compensação de batida com os coeficientes -1, 4, -16, 32, -64, 136, -352, 1312, -352, 136, -64, 32, -16, 4, -1. Uma correção de banda larga também significa sinais perto de x192 s, 2 são atenuados com o filtro CIC e, em seguida, devem ser amplificados no filtro de correção, adicionando ruído. Como tal, os praticantes geralmente limitam a largura da banda passante do filtro FIR de compensação para aproximadamente 1 4 a freqüência do primeiro nulo na resposta do filtro CIC. Essas curvas tracejadas na Figura 11 representam as respostas de magnitude de freqüência dos filtros FIR de compensação dentro dos quais não ocorrem mudanças na taxa de amostragem. (As taxas de amostra de entrada e saída dos filtros FIR são iguais ao x192 s, saída da taxa de saída do filtro CIC da tentativa). Se um filtro FIR compensador fosse projetado para fornecer uma dizimação adicional por dois, sua resposta de magnitude de freqüência seria semelhante àquela Na Figura 12, onde gts, in é a taxa de amostragem de entrada de filtros de compensação. Figura 12: Resposta de magnitude de frequência de uma compensação de dizimação por 2 Filtro de FIR Ver imagem de tamanho completo Técnicas avançadas Esta é a linha inferior da nossa discussão em filtro de CIC: um filtro CIC de dizimar é apenas uma implementação recursiva muito eficiente de uma média móvel Filtro, com torneiras NR, cuja saída é dizimada por R. Da mesma forma, o filtro CIC de interpolação é a inserção de amostras R -1 zero entre cada amostra de entrada, seguida de um filtro NR - tap de média móvel que funciona com a taxa de amostra de saída x192 s, para fora. As implementações em cascata na Figura 1 resultam em cargas de trabalho computacionais totais muito menores do que usando um único filtro FIR sozinho para alta decimação e interpolação de mudança de taxa de amostragem. As estruturas de filtro CIC são projetadas para maximizar a quantidade de processamento de baixa taxa de amostragem para minimizar o consumo de energia em aplicações de hardware de alta velocidade. Novamente, os filtros CIC não requerem multiplicação, sua aritmética é estritamente adição e subtração. O seu desempenho permite-nos afirmar que, tecnicamente falando, os filtros CIC são máquinas de filtragem pequenas e médias. Para finalizar, existem maneiras de construir filtros CIC não recursivos que aliviam o problema de crescimento da largura da palavra dos tradicionais filtros CIC recorrentes. Essas arquiteturas avançadas de filtro CIC são discutidas em meu livro Compreendendo processamento de sinal digital, 2E. 2 Richard Lyons é engenheiro de sistemas de consultoria e palestrante com Besser Associates em Mountain View, Ca. Ele é o autor de Understanding Digital Signal Processing 2 E e um editor associado para o IEEE Signal Processing Magazine onde ele criou e edita a coluna DSP Tips amp Tricks. Você pode alcançá-lo em r. lyonsieee. org. Hogenauer, Eugene. Uma Classe Econômica de Filtros Digitais para Decimação e Interpolação, Transações de IEEE em Acústica, Processo de Discurso e Sinal. Vol. ASSP-29, pp. 155-162, abril de 1981. Lyons, Richard, Compreensão do processamento de sinal digital, 2ª edição. Prentice Hall, Upper Saddle River, Nova Jersey, 2004, pp. 556-561.

No comments:

Post a Comment