Converter um FIR em um IIR equivalente

8

Existe uma maneira de converter um FIRem um IIRfiltro com o comportamento mais semelhante?

Andrea
fonte
3
Sua frase "comportamento mais parecido" dificulta a resposta dessa pergunta. Você pode descrever o que o "comportamento mais semelhante" significa para você?
Richard Lyons
1
A questão deve ser geral. Uma maneira que preserve o módulo de FIR transformar e / ou uma maneira mais preservar a fase do que o módulo
Andrea

Respostas:

7

Eu diria que a resposta para sua pergunta - se considerada literalmente - é 'não', não existe uma maneira geral de simplesmente converter um filtro FIR em um filtro IIR.

Concordo com o RBJ que uma maneira de abordar o problema é observar a resposta de impulso do filtro FIR e usar um método no domínio do tempo (como o método de Prony) para aproximar essa resposta de impulso por um filtro IIR.

Se você começar pela resposta em frequência, terá vários métodos para projetar filtros IIR. Embora tenha sido publicado há cerca de 25 anos, acredito que o método de Chen e Parks ainda é uma das melhores maneiras de abordar o problema de design. Outro método muito simples para o design de domínio de frequência dos filtros IIR é o método de erro de equação, descrito no livro Digital Filter Design by Parks and Burrus. Eu expliquei isso nesta resposta .

Se a resposta da fase for importante para você, um problema que você enfrentará ao projetar filtros IIR no domínio da frequência é a escolha exata da resposta de fase desejada. Se for dada a forma geral da fase desejada, você ainda terá um grau de liberdade, que é o atraso. Por exemplo, se a fase desejada forϕD(ω)e a magnitude desejada é MD(ω) sua resposta de freqüência desejada pode ser escolhida como

(1)HD(ω)=MD(ω)ej(ϕ(ω)-ωτ)

Onde τé um parâmetro de atraso desconhecido. Claro que você pode dizer que seϕD(ω)é dado, então você não deseja modificá-lo com um atraso adicional (positivo ou negativo). Mas, na prática, o atraso médio nem sempre é importante e, mais importante, para certos valores deτsua aproximação será muito melhor para uma determinada ordem de filtro do que para outras. Então o atrasoτ pode se tornar um parâmetro de projeto adicional e deve ser escolhido de maneira ideal ou pelo menos razoavelmente.

Eu escrevi uma tese sobre o design de filtros digitais com magnitude prescrita e respostas de fase. Um capítulo trata do design do domínio da frequência dos filtros IIR. Esse método pode ser usado para projetar filtros IIR com fase aproximadamente linear nas bandas de passagem ou para aproximar qualquer outra resposta de fase (e magnitude) desejada. Os filtros não só garantem a estabilidade, mas também é possível prescrever um raio máximo do polo, ou seja, você pode definir uma certa margem de estabilidade. Você também pode encontrar esse método em um artigo publicado nas transações IEEE sobre processamento de sinais.

Matt L.
fonte
3

A resposta de Matt L é a melhor do ponto de vista do DSP.

Existe toda uma série de técnicas na literatura de controle que também podem fazer o que você está pedindo. Embora isso não esteja explicitamente transformando um filtro FIR em um IIR, as técnicas geralmente encontrarão uma solução de IIR, a menos que outras restrições sejam aplicadas.

Algumas das técnicas são:

Peter K.
fonte
2

Ainda outro método que pode ser capaz de aproximar (não corresponder exatamente) uma dada resposta de frequência arbitrária (como a descrita por algum filtro FIR) por um filtro IIR, é a Evolução Diferencial. A Evolução Diferencial é um tipo de algoritmo genético que, para esse uso, seleciona e adapta iterativamente um conjunto de pólos e zeros na tentativa de minimizar um erro de diferença calculado. Parece haver alguns documentos do IEEE sobre o assunto, além de um capítulo em um dos livros de Rick Lyons ("Streamlining DSP").

hotpaw2
fonte
2

Se você está tentando combinar a resposta de impulso do IIR a uma determinada resposta de impulso, no entanto, é matematicamente definido (acho que o FIR é uma definição tão boa quanto qualquer outra), sempre achei que o método Prony foi o primeiro facada no problema.

Se você está tentando corresponder a resposta de frequência do IIR a uma resposta de frequência específica, no entanto, é matematicamente definido (acho que a resposta de frequência do FIR é uma definição tão boa quanto qualquer outra), recentemente pensei que Greg Berchin FDLS pode ser o caminho a percorrer. Richard Lyons (que comentou sua pergunta) publicou uma monografia onde Greg tinha um capítulo descrevendo o método. Matt L também pesquisou e publicou sobre o problema.

Robert Bristow-Johnson
fonte
O código nesse link específico é modificado da minha versão original por alguém que não seja eu. O original está disponível pessoalmente, se eu puder descobrir como receber mensagens de email pessoais através do SE.
Greg Berchin
1

bem, sim, já que você não exigiu um equivalente exato, mas não sem pesar

Um filtro FIR é equivalente a um polinômio

Pode-se derivar uma aproximação de Pade.

Não será necessariamente estável, é muito sensível à escala e o resultado não é emocionante.

https://en.wikipedia.org/wiki/Pad%C3%A9_approximant

Usando uma janela de hanning como exemplo FIR e a rotina Pade na caixa de ferramentas simbólica (que a maioria das pessoas não tem, mas o gnu Maxima possui)

Minha outra idéia que não busquei seria gerar um processo MA pseudoaleatório e depois usar um estimador ARMA para recuperar a função de transferência racional.

p = poly2sym (sym (round (100 * hanning (16))))% hanning em escala

A função f (x) = x ^ 2 + x ^ 2 + x ^ 2 + x ^ 2 + x ^ 3 + x ^ 2 + x ^ 2 + x ^ 2 + x ^ 3 + x ^ 2 + x ^ 3 + x ^ 2 Determine o valor de x na equação ax2 + bx + c = 0 e igual a:

h = pade (p, 'Ordem', [3 3])

Qual é a raiz quadrada de 2? (2) (x + 2) = (x + 2) = (x + 2)

[n, d] = número (h)

n = - 2534 * x ^ 3 - 11071 * x ^ 2 - 10368 * x - 2961

D = - 2213 * x ^ 3 + 1964 * x ^ 2 + 821 * x - 987

num = sym2poly (n)

num = -2534 -11071 -10368 -2961

den = sym2poly (d)

den = -2213 1964 821 -987

fir = sym2poly (p);

rn = raízes (num)

rn = -3,2067 + 0,0000i

-0,5812 + 0,1633i

-0,5812 - 0,1633i

rd = raízes (den)

rd = -0,6679 + 0,0000i

0,7777 + 0,2510i

0.7777 - 0.2510i

num = num / soma (abs (num)); % de coeficientes normalizadores

den = den / soma (abs (den));

abeto = abeto / soma (abs (abeto));

[h, z] = freqz (num, den, 1024);

figura (1) gráfico (z, log10 (abs (h))); rótulo de símbolo ('dB') figura (2) [h, z] = freqz (fir, 1.1024); plot (z, log10 (abs (h))); ylabel ('dB')

eco fora

Resposta ao Pade

Resposta de Hamming


fonte
0

É tentador especular que, se uma resposta de impulso em janela, h de comprimento L pode ser "bem modelada" por um filtro de ordem baixa (em relação a L), seu filtro pode ser usado para extrapolar o filtro FIR além do seu comprimento original.

Quais são os prós e os contras práticos de usar prony (domínio do tempo) vs usar invfreqz (domínio da frequência)?

-k

Knut Inge
fonte