Os filtros IIR podem ser implementados como forma direta 1 ou 2 . Mas como você decide qual formulário usar? Quais são os prós e os contras de cada um?
Os filtros IIR podem ser implementados como forma direta 1 ou 2 . Mas como você decide qual formulário usar? Quais são os prós e os contras de cada um?
Respostas:
Primeiro de tudo, um pouco da wikipedia sobre a implementação direta dos formulários I e II .
O formulário direto I requer mais memória, mas é uma estratégia um pouco mais simples e é menos provável que tenha problemas de arredondamento e ressonância.
O formulário direto II requer menos memória, mas tem o potencial de interações incomuns, números maiores e mais erros de arredondamento. Muito disso pode ser reduzido com filtros menores em cascata, especialmente filtros de segunda ordem.
Um pouco datado, mas pode merecer uma resposta mais abrangente, especialmente porque o Direct Form II pode causar muitos problemas. Antes de tudo, não existe "tamanho único" e a melhor opção depende da sua aplicação e restrições específicas. O que você pode considerar é
Assim, em resumo, o Transposed Form II é mais frequentemente do que não é a melhor escolha. Em alguns cenários de ponto fixo, especialmente se houver problemas significativos de ruído, o Direct Form I é melhor, pois pode ser aumentado mais facilmente com coisas como modelagem de espectro de erros, etc.
A menos que você trabalhe com um sistema muito escasso de recursos ou tenha requisitos extremos, isso realmente não importa na prática, se você escolhe a forma direta I ou II. Por exemplo, se você estiver fazendo coisas em um PC ou smartphone, isso realmente não importa. Pessoalmente, prefiro o Formulário I.
O problema real é normalmente o MIPS e, se você planeja fazer uma implementação de ponto fixo, as coisas ficam mais complicadas. Por exemplo, no ARM, seu filtro IIR consumirá muito mais MIPS se os coeficientes e os estados do filtro forem de 32 bits. 32 bits em estados e coeficientes é um requisito se você precisar implementar, por exemplo, um filtro passa-baixo com frequência de corte muito baixa. Nesses casos, você pode usar um tipo diferente de filtro, como, por exemplo, um filtro de variável de estado.
Além das diferenças técnicas, como precisão numérica, também há a questão da estabilidade. Quando os filtros digitais têm pares pólo / zero próximos um do outro, a resposta de frequência pode se tornar instável em vários locais (geralmente se aproximando de Nyquist ou se aproximando de zero).
Quando os filtros IIR são usados para aplicações musicais, a escolha da realização pode ter um efeito profundo na estabilidade do filtro quando os parâmetros do filtro são modulados em tempo real (por exemplo, variando a frequência de corte em um filtro passa-baixo).
Eu tenho um aplicativo de código aberto que permite ouvir as diferenças, enquanto parâmetros variáveis no tempo, como frequência de corte ou ganho de pico, de cada uma das seguintes realizações:
O projeto está aqui:
Além dos comentários acima sobre memória, MIPS, ruído e estabilidade; há outro fator que é geralmente esquecido. Esse fator é a capacidade de redefinição; o que é muito importante na maioria das minhas situações.
Com uma implementação do Direct Form II, não há estados para as saídas atrasadas; portanto, se você "redefinir" um filtro do Direct Form II para dizer "5", sua saída inicial não será 5. Acho que isso é bastante contraditório -intuitivo que causou sérias frustrações ao usar o Simulink. Por esse motivo, quase sempre uso uma implementação do Direct Form I. Infelizmente, o Simulink suporta apenas o Direct Form I se você tiver a caixa de ferramentas DSP e, mesmo assim, ainda não permite definir as condições iniciais de um sinal de entrada.