Quelle est la meilleure approximation IIR de premier ordre (filtre AR) d'un filtre à moyenne mobile (filtre FIR)?


24

Supposons le filtre IIR de premier ordre suivant:

y[n]=αx[n]+(1α)y[n1]

Comment choisir le paramètre α st l'IIR se rapproche le mieux possible du FIR qui est la moyenne arithmétique des derniers kéchantillons:

z[n]=1kx[n]+1kx[n1]++1kx[nk+1]

n[k,) , ce qui signifie que l'entrée pour l'IIF pourrait être plus longue que k et pourtant j'aimerais avoir la meilleure approximation de la moyenne des dernières kentrées.

Je sais que l'IIF a une réponse impulsionnelle infinie, donc je recherche la meilleure approximation. Je serais heureux pour la solution analytique que ce soit pour la fonction de coût L2 ou L1 .

Comment ces problèmes d'optimisation pourraient-ils être résolus avec un IIR de premier ordre uniquement?

Merci.


Doit-elle suivre précisément y[n]=αx[n]+(1α)y[n1] ]?
Phonon

1
Cela ne peut que devenir une très mauvaise approximation. Ne pouvez-vous pas vous permettre autre chose qu'un IIR de premier ordre?
leftaroundabout

Vous voudrez peut-être modifier votre question afin de ne pas utiliser y[n] pour signifier deux choses différentes, par exemple la deuxième équation affichée pourrait lire , et vous voudrez peut-être dire quel est exactement votre critère de "aussi bon que possible", par exemple voulez-vous| y[n]-z[n]| être aussi petit que possible pour toutn, ou| y[n]-z[n]| 2pour être aussi petit que possible pour toutn. z[n]=1kx[n]++1kx[nk+1]|y[n]z[n]|n|y[n]z[n]|2n
Dilip Sarwate

y[n]k| y [ n ] - z [ n ] | 2n[k,inf]|y[n]z[n]|2

Réponses:


10

Il n'y a pas de solution analytique pour que soit un scalaire (je pense). Voici un script qui vous donne pour un donné . Si vous en avez besoin en ligne, vous pouvez créer une LUT. Le script trouve la solution qui minimiseα KααK

0πdw|H1(jw)H2(jw)|2

où est la réponse en fréquence FIR et est la réponse en fréquence IIR.H 2H1H2

Vous n'avez spécifié aucune plage pour K. Mais je tiens simplement à préciser que le système suivant est équivalent à votre filtre moyen et a la même complexité de calcul et votre IIR de premier ordre!

H(z)=1K1zK1z1

function a = find_a(K)

w = 0.0001:0.001:pi;
as = [-1:0.001:-0.001  0.001:0.001:1];

E = zeros(size(as));
for idx=1:length(as)
    fJ = J(w,as(idx),K);
    E(idx) = sum(fJ);
end

[Emin, indx] = min(E)
a = as(indx)

function f = J(w,a,K)
    num = 2*(2-a)*(1-cos(w*K)) + 2*(cos(w*(K-1)) - cos(w)) - 2*(1-a)*(cos(w)-cos(w*(K+1)));
    den = (2-a)^2 + 1 + (1-a)^2 + 2*(1-a)*cos(2*w) - 2*(2-a)^2*cos(w);
    f = -(a/K)*num./den;
    f = f+(1/K^2)*(1-cos(w*K))./(1-cos(w))+a^2./(1+(1-a)^2-2*(1-a)*cos(w));
end

end

@Drazick C'est relativement simple. Les deux expressions pour l'IIF et le FIR sont connectées à l'intégrale. La clé pour trouver l'expression alternative pour le filtre FIR est de reconnaître la progression / série géométrique. Vous trouverez tous les détails ici: en.wikipedia.org/wiki/Geometric_progression#Geometric_series . Dans le script, la fonction J calcule l'expression sous le signe intégral.
niaren

@niaren Je sais que c'est un vieux post donc si vous vous souvenez: comment est dérivée votre fonction 'f'? J'ai codé une chose similaire, mais en utilisant les fonctions de transfert complexes pour FIR (H1) et IIR (H2), puis en faisant la somme (abs (H1 - H2) ** 2). J'ai comparé cela avec votre somme (fj), mais obtenez différentes sorties résultantes. Pensais que je demanderais avant de parcourir les mathématiques.
Dom

@Dom Cela fait longtemps et je ne m'en souviens vraiment pas. Je suppose que je viens de passer par le processus d'élaboration . Je ne me souviens pas comment j'ai vérifié l'expression. Cela ne me dérange pas de revoir les mathématiques ...[H1(jω)H2(jω)][H1(jω)H2(jω)]
niaren

@niaren Salut, j'ai essayé de dériver votre expression mais je suis resté coincé lors de l'addition des fractions complexes. J'ai fait une erreur dans mon code ... votre fonction semble donner des résultats proportionnels à la somme (abs (H1 - H2) ** 2), indiquant qu'elle est correcte.
Dom

16

Il y a une discussion intéressante sur ce problème dans le traitement de signal intégré avec l'architecture de micro-signal , à peu près entre les pages 63 et 69 . À la page 63 , il comprend une dérivation du filtre moyen récursif mobile exact (que niaren a donné dans sa réponse ),

H(z)=1N1zN1z1.

Par souci de commodité par rapport à la discussion suivante, elle correspond à l'équation de différence suivante:

yn=yn1+1N(xnxnN).

L'approximation qui met le filtre sous la forme que vous avez spécifiée nécessite de supposer que , car (et je cite la page 68 ) " est la moyenne de échantillons ". Cette approximation nous permet de simplifier l'équation de différence précédente comme suit: y n - 1 x nxnNyn1yn1xn

yn=yn1+1N(xnyn1)yn=yn11Nyn1+1Nxnyn=(11N)yn1+1Nxn.

En définissant , nous arrivons à votre forme originale, , qui montre que le coefficient que vous voulez ( par rapport à cette approximation) est exactement (où est le nombre d'échantillons). yn=αxn+(1-α)yn-11α=1Nyn=αxn+(1α)yn1 N1NN

Cette approximation est-elle la "meilleure" à certains égards? C'est certainement élégant. Voici comment la réponse en amplitude se compare [à 44,1 kHz] pour N = 3, et lorsque N augmente à 10 (approximation en bleu):

N = 3 N = [3,10]


Comme le suggère la réponse de Peter , l'approximation d'un filtre FIR avec un filtre récursif peut être problématique sous une norme des moindres carrés. Une discussion approfondie sur la façon de résoudre ce problème en général peut être trouvée dans la thèse de JOS, Techniques pour la conception de filtres numériques et l'identification de systèmes avec application au violon . Il préconise l'utilisation de la norme de Hankel, mais dans les cas où la réponse de phase n'a pas d'importance, il couvre également la méthode de Kopec, qui pourrait bien fonctionner dans ce cas (et utilise une norme ). Un large aperçu des techniques de la thèse peut être trouvé ici . Ils peuvent donner d'autres approximations intéressantes.L2


C'est une façon "élégante" de dire quelque chose sur la mémoire du filtre IIR de premier ordre. Sa mémoire est équivalente à . Je vais examiner les autres méthodes que vous avez mentionnées. Merci. 1α
Royi

Pourriez-vous expliquer intuitivement pourquoi sous la norme LS ( ) il n'y a pas de solution? L2
Royi

Je ne sais pas s'il existe une solution LS dans ce cas ou pas encore, je sais juste qu'elle a tendance à avoir des problèmes de convergence pour le problème général "approximation FIR basée sur IIR". Je mettrai à jour avec plus d'informations lorsque j'en aurai l'occasion.
datageist

Eh bien, si la fonction de coût suggérée par Peter (la première) est juste, il y a une solution. Au moins selon mes calculs.
Royi

Génial. Je suis curieux de voir comment l' approche "heuristique" se compare à quelque chose de plus canonique. 1/N
datageist

16

OK, essayons d'en tirer le meilleur: donc que le coefficient de est . x[n-m]α(1-α)m

y[n]=αx[n]+(1α)y[n1]=αx[n]+(1α)αx[n1]+(1α)2y[n2]=αx[n]+(1α)αx[n1]+(1α)2αx[n2]+(1α)3y[n3]
x[nm]α(1α)m

La meilleure approximation quadratique moyenne minimisera:

J(α)=m=0k1(α(1α)m1k)2+m=kα2(1α)2m=m=0k1(α2(1α)2m2kα(1α)m+1k2)+α2(1α)2km=0(1α)2m=α21(1α)2k1(1α)2+2αk1(1α)k1(1α)+α2(1α)2k1(1α)2+1k=α21(1α)2+2k(1(1α)k)+1k=α22αα2+2k(1(1α)k)+1k=α2α+2k(1(1α)k)+1k
car les coefficients FIR sont nuls pour .m>k1

La prochaine étape consiste à prendre des dérivés et à égaler à zéro.


En regardant un tracé du dérivé pour et de 0 à 1, il semble que le problème (tel que je l'ai défini) soit mal posé, car la meilleure réponse est .JK=1000αα=0

entrez la description de l'image ici


Je pense qu'il y a une erreur ici. La façon dont cela devrait être selon mes calculs est la suivante:

J(α)=m=0k1(α(1α)m1k)2+m=kα2(1α)2m=m=0k1(α2(1α)2m2kα(1α)m+1k2)+α2(1α)2km=0(1α)2m=α21(1α)2k1(1α)22αk1(1α)k1(1α)+1k+α2(1α)2k1(1α)2

La simplifier selon Mathematica donne:

J(α)=α2α+2(1α)k1k

L'utilisation du code suivant sur MATLAB donne quelque chose d'équivalent bien que différent:

syms a k;

expr1 = (a ^ 2) * ((1 - ((1 - a) ^ (2 * k))) / (1 - ((1 - a) ^ 2)));
expr2 = ((2 * a) / k) * ((1 - ((1 - a) ^ (k))) / (1 - (1 - a)));
expr3 = (1 / k);
expr4 = ((a ^ 2) * ((1 - a) ^ (2 * k))) / (1 - ((1 - a) ^ (2)));

simpExpr = simplify(expr1 - expr2 + expr3 + expr4);

J(α)=2α2k2(1α)k+1k

Quoi qu'il en soit, ces fonctions ont un minimum.


Supposons donc que nous ne nous soucions vraiment que de l'approximation sur le support (longueur) du filtre FIR. Dans ce cas, le problème d'optimisation est simplement:

J2(α)=m=0k1(α(1α)m1k)2

Le pour différentes valeurs de par rapport à donne la date dans les graphiques et le tableau ci-dessous.J2(α)Kα

Pour = 8. = 0,1533333 Pour = 16. = 0,08 Pour = 24. = 0,0533333 Pour = 32. = 0,04 pour = 40. = 0,0333333 pour = 48. = 0,0266667 pour = 56. = 0,0233333 pour = 64. Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin = 0,02
pour = 72. = 0,0166667 Kαmin

entrez la description de l'image ici

Les lignes pointillées rouges sont et les lignes vertes sont , la valeur de qui minimise (choisie parmi ).1/KαminαJ2(α)alpha=[0:.01:1]/3;


1
J'allais juste poster exactement la même chose =)
Phonon

@ Phonon: N'hésitez pas à continuer! Je l'ai marqué comme wiki communautaire à cet effet.
Peter K.

La dérivée wrt est une série avec un nombre infini de termes (c'est-à-dire pas un polynôme) que vous devez définir égal à , puis résoudre pour , et donc un certain soin (ou éventuellement une approximation) va être nécessaire. 0 αα0α
Dilip Sarwate

Quelqu'un peut-il vérifier et / ou corriger mon travail? :-)
Peter K.

@DilipSarwate, Quelle serait la meilleure approximation? Merci.
Royi


3

Je suis tombé sur cette vieille question et je voudrais partager ma solution. Comme mentionné dans d'autres réponses, il n'y a pas de solution analytique, mais la fonction à minimiser se comporte bien et la valeur optimale de peut être trouvée facilement avec quelques itérations de Newton. Il existe également une formule pour vérifier l'optimalité du résultat.α

La réponse impulsionnelle du filtre à moyenne mobile de longueur FIR est donnée parN

(1)hFIR[n]=1N(u[n]u[nN])

où est la fonction de pas d'unité. Le filtre IIR de premier ordreu[n]

(2)y[n]=αx[n]+(1α)y[n1]

a la réponse impulsionnelle

(3)hIIR[n]=α(1α)nu[n]

Le but est maintenant de minimiser l'erreur quadratique

(4)ϵ=n=0(hFIR[n]hIIR[n])2

En utilisant et , l'erreur peut être écrite comme(1)(3)

ϵ(α)=n=0N1(α(1α)n1N)2+n=Nα2(1α)2n=α2n=0(1α)2n2αNn=0N1(1α)n+n=0N11N2=α21(1α)22αN1(1α)N1(1α)+1N(5)=α2α2N(1(1α)N)+1N,0<α<2

Cette expression est très similaire à celle donnée dans cette réponse , mais elle n'est pas identique. La restriction sur dans s'assure que la somme infinie converge, et elle est identique à la condition de stabilité pour le filtre IIR donnée par .α(5)(2)

La mise à zéro de la dérivée de entraîne(5)

(6)(1α)N1(2α)2=1

Notez que le optimal doit être dans l'intervalle car des valeurs plus élevées de entraînent une réponse impulsionnelle alternée , qui ne peut pas approximer la répétition impulsionnelle constante du filtre à moyenne mobile FIR.α(0,1]α(3)

En prenant la racine carrée de et en introduisant , on obtient(6)β=1α

(7)β(N+1)/2+β(N1)/21=0

Cette équation ne peut pas être résolue analytiquement pour , mais elle peut être résolue pour :NβN

(8)N=2log(1+β)log(β),β0

L'équation peut être utilisée pour revérifier une solution numérique de ; il doit retourner à la valeur spécifiée de .( 7 ) N(8)(7)N

L'équation peut être résolue avec quelques lignes de code (Matlab / Octave):(7)

N = 50; % longueur de filtre souhaitée du filtre à moyenne mobile FIR

if (N == 1)% aucune itération pour le cas trivial
    b = 0;
autre
    % Itération de Newton
    b = 1; % valeur de départ
    Nit = 7;
    n = (N + 1) / 2;
    pour k = 1: Nit,
        f = b ^ n + b ^ (n-1) -1;
        fp = n * b ^ (n-1) + (n-1) * b ^ (n-2);
        b = b - f / fp;
    fin

    % résultat du contrôle
    N0 = -2 * log (1 + b) / log (b) + 1% doit être égal à N
fin

a = 1 - b;

Voici un tableau avec les valeurs optimales de pour une plage de longueurs de filtre :NαN

   N alpha

   1 1,0000e + 00
   2 5.3443e-01
   3 3.8197e-01
   4 2,9839e-01
   5 2,4512e-01
   6 2.0809e-01
   7 1.8083e-01
   8 1.5990e-01
   9 1.4333e-01
  10 1.2987e-01
  20 6.7023e-02
  30 4.5175e-02
  40 3.4071e-02
  50 2,7349e-02
  60 2.2842e-02
  70 1,9611e-02
  80 1,7180e-02
  90 1.5286e-02
 100 1,3768e-02
 200 6.9076e-03 
 300 4.6103e-03
 400 3,4597e-03
 500 2,7688e-03
 600 2.3078e-03
 700 1,9785e-03
 800 1.7314e-03
 900 1.5391e-03
1000 1.3853e-03
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.