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
HD( ω ) =MD( ω )ej ( ϕ ( ω ) - ω τ)(1)
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.
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.
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").
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.
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.
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')
É 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)?
Respostas:
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
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.
fonte
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:
O truncamento balanceado é, com efeito, uma abordagem de análise de componentes principais para reduzir a ordem de um filtro. Existe uma implementação do matlab na Robust Control Toolbox.
A Aproximação Ótima da Norma Hankel usa a norma Hankel semelhante ao infinito para aproximar um sistema de ordem superior com um de ordem inferior. Existe uma implementação do matlab na Robust Control Toolbox.
fonte
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").
fonte
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.
fonte
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
fonte
É 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
fonte