Votre expression "comportement le plus similaire" rend cette question difficile à répondre. Pouvez-vous décrire ce que "le comportement le plus similaire" signifie pour vous?
Richard Lyons
1
La question devrait être générale. Un moyen qui préserve le module de la transformée FIR et / ou un moyen de mieux préserver la phase que le module
Andrea
Réponses:
7
Je dirais que la réponse à votre question - si elle est prise à la lettre - est «non», il n'y a pas de moyen général de simplement convertir un filtre FIR en filtre IIR.
Je suis d'accord avec RBJ qu'une façon d'aborder le problème est d'examiner la réponse impulsionnelle du filtre FIR et d'utiliser une méthode de domaine temporel (telle que la méthode de Prony) pour approximer cette réponse impulsionnelle par un filtre IIR.
Si vous partez de la réponse en fréquence, vous disposez de nombreuses méthodes pour concevoir des filtres IIR. Même si elle a été publiée il y a environ 25 ans, je pense que la méthode de Chen et Parks est toujours l'une des meilleures façons d'aborder le problème de conception. Une autre méthode très simple pour la conception de domaine de fréquence des filtres IIR est la méthode d'erreur d'équation, qui est décrite dans le livre Digital Filter Design de Parks and Burrus. Je l'ai expliqué dans cette réponse .
Si la réponse de phase est importante pour vous, alors un problème auquel vous serez confronté lors de la conception de filtres IIR dans le domaine fréquentiel est le choix exact de la réponse de phase souhaitée. Si la forme globale de la phase souhaitée est donnée, vous avez encore un degré de liberté, qui est le retard. Par exemple, si la phase souhaitée estϕré( ω )et l'amplitude souhaitée est Mré( ω ) alors votre réponse en fréquence souhaitée peut être choisie comme
Hré( ω ) =Mré( ω )ej ( ϕ ( ω ) - ω τ)(1)
où τest un paramètre de retard inconnu. Bien sûr, vous pouvez dire que siϕré( ω )est donné alors vous ne voulez pas le modifier avec un délai supplémentaire (positif ou négatif). Mais il s'avère que dans la pratique, le retard moyen n'est pas toujours important, et - plus important encore - pour certaines valeurs deτvotre approximation sera bien meilleure pour un ordre de filtrage donné que pour d'autres. Donc le retardτ peut devenir un paramètre de conception supplémentaire et doit être choisi de manière optimale ou au moins raisonnable.
J'ai écrit une thèse sur la conception de filtres numériques avec des réponses d'amplitude et de phase prescrites. Un chapitre traite de la conception du domaine fréquentiel des filtres IIR. Cette méthode peut être utilisée pour concevoir des filtres IIR avec une phase approximativement linéaire dans les bandes passantes, ou pour approximer toute autre réponse de phase (et d’amplitude) souhaitée. Les filtres sont non seulement garantis stables, mais vous pouvez également prescrire un rayon de pôle maximum, c'est-à-dire que vous pouvez définir une certaine marge de stabilité. Vous pouvez également trouver cette méthode dans un article publié dans IEEE Transactions on Signal Processing.
La réponse de Matt L est la meilleure du point de vue DSP.
Il existe toute une gamme de techniques issues de la littérature sur le contrôle qui pourraient également faire ce que vous demandez. Bien que cela ne transforme pas explicitement un filtre FIR en IIR, les techniques trouveront généralement une solution IIR à moins que d'autres contraintes ne soient appliquées.
Encore une autre méthode qui pourrait être en mesure d'approximer (pas exactement correspondre) une réponse de fréquence arbitraire donnée (comme celle décrite par un filtre FIR donné) par un filtre IIR, est l'évolution différentielle. L'évolution différentielle est un type d'algorithme génétique qui, pour cette utilisation, sélectionne et adapte de manière itérative un ensemble de pôles et de zéros afin de minimiser une erreur de différence calculée. Il semble y avoir quelques articles de l'IEEE sur le sujet, ainsi qu'un chapitre dans l'un des livres de Rick Lyons ("Streamlining DSP").
Si vous essayez de faire correspondre la réponse impulsionnelle de l'IIF à une réponse impulsionnelle donnée, quelle que soit sa définition mathématique (je suppose que la FIR est aussi bonne qu'une définition), j'ai toujours pensé que la méthode Prony était la première poignarder le problème.
Si vous essayez de faire correspondre la réponse en fréquence de l'IIF à une réponse en fréquence donnée, quelle que soit sa définition mathématique (je suppose que la réponse en fréquence de la FIR est aussi bonne qu'une définition), j'ai récemment pensé que Greg Berchin FDLS pourrait être la voie à suivre. Richard Lyons (qui a commenté votre question) a publié une monographie où Greg avait un chapitre décrivant la méthode. Matt L a également fait des recherches et publié sur le problème.
Le code de ce lien particulier est modifié à partir de ma version d'origine par quelqu'un d'autre que moi. L'original est disponible auprès de moi personnellement, si je peux un jour savoir comment recevoir des e-mails personnels via SE.
Greg Berchin
1
eh bien oui, puisque vous n'aviez pas besoin d'un équivalent exact mais non sans chagrin
Un filtre FIR équivaut à un polynôme
On peut dériver une approximation de Pade.
Il ne sera pas nécessairement stable, il est très sensible à la mise à l'échelle et le résultat n'est pas passionnant.
Utiliser une fenêtre de suspension comme exemple FIR et la routine Pade dans la boîte à outils symbolique (ce que la plupart des gens n'ont pas mais que gnu Maxima fait)
Mon autre idée que je n'ai pas poursuivie serait de générer un processus MA pseudo-aléatoire, puis d'utiliser un estimateur ARMA pour récupérer la fonction de transfert rationnel.
p = poly2sym (sym (round (100 * hanning (16))))% échelle mise à l'échelle
p = 3 * x ^ 15 + 13 * x ^ 14 + 28 * x ^ 13 + 45 * x ^ 12 + 64 * x ^ 11 + 80 * x ^ 10 + 93 * x ^ 9 + 99 * x ^ 8 + 99 * x ^ 7 + 93 * x ^ 6 + 80 * x ^ 5 + 64 * x ^ 4 + 45 * x ^ 3 + 28 * x ^ 2 + 13 * x + 3
h = pade (p, 'Ordre', [3 3])
h = - (2534 * x ^ 3 + 11071 * x ^ 2 + 10368 * x + 2961) / (- 2213 * x ^ 3 + 1964 * x ^ 2 + 821 * x - 987)
[n, d] = numden (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
sapin = sym2poly (p);
rn = racines (num)
rn = -3,2067 + 0,0000i
-0,5812 + 0,1633i
-0,5812 - 0,1633i
rd = racines (den)
rd = -0,6679 + 0,0000i
0,7777 + 0,2510i
0,7777 - 0,2510i
num = num / somme (abs (num)); % coefficients de normalisation
Il est tentant de spéculer que si une réponse impulsionnelle fenêtrée, h de longueur L peut être "bien modélisée" par un filtre iir d'ordre inférieur (par rapport à L), alors ce dernier peut être utilisé pour extrapoler le filtre FIR au-delà de sa longueur d'origine.
Quels sont les avantages et les inconvénients pratiques de l'utilisation de Prony (domaine temporel) par rapport à l'utilisation d'Invfreqz (domaine fréquentiel)?
Réponses:
Je dirais que la réponse à votre question - si elle est prise à la lettre - est «non», il n'y a pas de moyen général de simplement convertir un filtre FIR en filtre IIR.
Je suis d'accord avec RBJ qu'une façon d'aborder le problème est d'examiner la réponse impulsionnelle du filtre FIR et d'utiliser une méthode de domaine temporel (telle que la méthode de Prony) pour approximer cette réponse impulsionnelle par un filtre IIR.
Si vous partez de la réponse en fréquence, vous disposez de nombreuses méthodes pour concevoir des filtres IIR. Même si elle a été publiée il y a environ 25 ans, je pense que la méthode de Chen et Parks est toujours l'une des meilleures façons d'aborder le problème de conception. Une autre méthode très simple pour la conception de domaine de fréquence des filtres IIR est la méthode d'erreur d'équation, qui est décrite dans le livre Digital Filter Design de Parks and Burrus. Je l'ai expliqué dans cette réponse .
Si la réponse de phase est importante pour vous, alors un problème auquel vous serez confronté lors de la conception de filtres IIR dans le domaine fréquentiel est le choix exact de la réponse de phase souhaitée. Si la forme globale de la phase souhaitée est donnée, vous avez encore un degré de liberté, qui est le retard. Par exemple, si la phase souhaitée estϕré( ω ) et l'amplitude souhaitée est Mré( ω ) alors votre réponse en fréquence souhaitée peut être choisie comme
oùτ est un paramètre de retard inconnu. Bien sûr, vous pouvez dire que siϕré( ω ) est donné alors vous ne voulez pas le modifier avec un délai supplémentaire (positif ou négatif). Mais il s'avère que dans la pratique, le retard moyen n'est pas toujours important, et - plus important encore - pour certaines valeurs deτ votre approximation sera bien meilleure pour un ordre de filtrage donné que pour d'autres. Donc le retardτ peut devenir un paramètre de conception supplémentaire et doit être choisi de manière optimale ou au moins raisonnable.
J'ai écrit une thèse sur la conception de filtres numériques avec des réponses d'amplitude et de phase prescrites. Un chapitre traite de la conception du domaine fréquentiel des filtres IIR. Cette méthode peut être utilisée pour concevoir des filtres IIR avec une phase approximativement linéaire dans les bandes passantes, ou pour approximer toute autre réponse de phase (et d’amplitude) souhaitée. Les filtres sont non seulement garantis stables, mais vous pouvez également prescrire un rayon de pôle maximum, c'est-à-dire que vous pouvez définir une certaine marge de stabilité. Vous pouvez également trouver cette méthode dans un article publié dans IEEE Transactions on Signal Processing.
la source
La réponse de Matt L est la meilleure du point de vue DSP.
Il existe toute une gamme de techniques issues de la littérature sur le contrôle qui pourraient également faire ce que vous demandez. Bien que cela ne transforme pas explicitement un filtre FIR en IIR, les techniques trouveront généralement une solution IIR à moins que d'autres contraintes ne soient appliquées.
Certaines des techniques sont:
La troncature équilibrée est, en effet, une approche d'analyse en composantes principales pour réduire l'ordre d'un filtre. Il existe une implémentation matlab dans la Robust Control Toolbox.
L'optimisation de la norme de Hankel optimale utilise la norme de Hankel de type infini pour approximer un système d'ordre élevé avec l'un d'un ordre inférieur. Il existe une implémentation matlab dans la Robust Control Toolbox.
la source
Encore une autre méthode qui pourrait être en mesure d'approximer (pas exactement correspondre) une réponse de fréquence arbitraire donnée (comme celle décrite par un filtre FIR donné) par un filtre IIR, est l'évolution différentielle. L'évolution différentielle est un type d'algorithme génétique qui, pour cette utilisation, sélectionne et adapte de manière itérative un ensemble de pôles et de zéros afin de minimiser une erreur de différence calculée. Il semble y avoir quelques articles de l'IEEE sur le sujet, ainsi qu'un chapitre dans l'un des livres de Rick Lyons ("Streamlining DSP").
la source
Si vous essayez de faire correspondre la réponse impulsionnelle de l'IIF à une réponse impulsionnelle donnée, quelle que soit sa définition mathématique (je suppose que la FIR est aussi bonne qu'une définition), j'ai toujours pensé que la méthode Prony était la première poignarder le problème.
Si vous essayez de faire correspondre la réponse en fréquence de l'IIF à une réponse en fréquence donnée, quelle que soit sa définition mathématique (je suppose que la réponse en fréquence de la FIR est aussi bonne qu'une définition), j'ai récemment pensé que Greg Berchin FDLS pourrait être la voie à suivre. Richard Lyons (qui a commenté votre question) a publié une monographie où Greg avait un chapitre décrivant la méthode. Matt L a également fait des recherches et publié sur le problème.
la source
eh bien oui, puisque vous n'aviez pas besoin d'un équivalent exact mais non sans chagrin
Un filtre FIR équivaut à un polynôme
On peut dériver une approximation de Pade.
Il ne sera pas nécessairement stable, il est très sensible à la mise à l'échelle et le résultat n'est pas passionnant.
https://en.wikipedia.org/wiki/Pad%C3%A9_approximant
Utiliser une fenêtre de suspension comme exemple FIR et la routine Pade dans la boîte à outils symbolique (ce que la plupart des gens n'ont pas mais que gnu Maxima fait)
Mon autre idée que je n'ai pas poursuivie serait de générer un processus MA pseudo-aléatoire, puis d'utiliser un estimateur ARMA pour récupérer la fonction de transfert rationnel.
p = poly2sym (sym (round (100 * hanning (16))))% échelle mise à l'échelle
p = 3 * x ^ 15 + 13 * x ^ 14 + 28 * x ^ 13 + 45 * x ^ 12 + 64 * x ^ 11 + 80 * x ^ 10 + 93 * x ^ 9 + 99 * x ^ 8 + 99 * x ^ 7 + 93 * x ^ 6 + 80 * x ^ 5 + 64 * x ^ 4 + 45 * x ^ 3 + 28 * x ^ 2 + 13 * x + 3
h = pade (p, 'Ordre', [3 3])
h = - (2534 * x ^ 3 + 11071 * x ^ 2 + 10368 * x + 2961) / (- 2213 * x ^ 3 + 1964 * x ^ 2 + 821 * x - 987)
[n, d] = numden (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
sapin = sym2poly (p);
rn = racines (num)
rn = -3,2067 + 0,0000i
-0,5812 + 0,1633i
-0,5812 - 0,1633i
rd = racines (den)
rd = -0,6679 + 0,0000i
0,7777 + 0,2510i
0,7777 - 0,2510i
num = num / somme (abs (num)); % coefficients de normalisation
den = den / sum (abs (den));
sapin = sapin / somme (abs (sapin));
[h, z] = freqz (num, den, 1024);
graphique (1) graphique (z, log10 (abs (h))); ylabel ('dB') figure (2) [h, z] = freqz (sapin, 1,1024); graphique (z, log10 (abs (h))); ylabel ('dB')
Écho off
la source
Il est tentant de spéculer que si une réponse impulsionnelle fenêtrée, h de longueur L peut être "bien modélisée" par un filtre iir d'ordre inférieur (par rapport à L), alors ce dernier peut être utilisé pour extrapoler le filtre FIR au-delà de sa longueur d'origine.
Quels sont les avantages et les inconvénients pratiques de l'utilisation de Prony (domaine temporel) par rapport à l'utilisation d'Invfreqz (domaine fréquentiel)?
-k
la source