Was ist die beste IIR (AR-Filter) -Näherung erster Ordnung an ein Filter mit gleitendem Durchschnitt (FIR-Filter)?


24

Es sei der folgende IIR-Filter erster Ordnung angenommen:

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

Wie kann ich den Parameter st wählen ? Das IIR entspricht so gut wie möglich dem FIR, dem arithmetischen Mittel der letzten Abtastwerte:kαk

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

Wobei bedeutet, dass die Eingabe für das IIR möglicherweise länger als und ich dennoch die bestmögliche Annäherung an den Mittelwert der letzten Eingaben haben möchte .k kn[k,)kk

Ich weiß, dass der IIR eine unendliche Impulsantwort hat, daher suche ich nach der besten Annäherung. Ich würde mich über eine analytische Lösung freuen, sei es für die Kostenfunktion oder .L 1L2L1

Wie können diese Optimierungsprobleme bei nur 1. Ordnung IIR gelöst werden.

Vielen Dank.


Muss es genau nach ] gehen? y[n]=αx[n]+(1α)y[n1]
Phonon

1
Dies wird mit Sicherheit eine sehr schlechte Annäherung sein. Können Sie sich nicht mehr als einen IIR erster Ordnung leisten?
links um 06.10.11 Uhr

Möglicherweise möchten Sie Ihre Frage so bearbeiten, dass Sie für zwei verschiedene Dinge verwenden, z. B. könnte die zweite angezeigte Gleichung lauten. , und Sie möchten vielleicht sagen, was genau Ihr Kriterium für "so gut wie möglich" ist, z. B. möchten Sie soll für alle so klein wie möglich sein , oder soll für alle so klein wie möglich sein . z [ n ] = 1y[n]| y[n]-z[n]| n| y[n]-z[n]| 2nz[n]=1kx[n]++1kx[nk+1]|y[n]z[n]|n|y[n]z[n]|2n
Dilip Sarwate

@Phonon, ja, es muss ein IIR erster Ordnung sein. Das Kriterium ist einfach, das Ergebnis sollte so nahe wie möglich am Mittelwert der letzten Eingaben in das System liegen, wobei . Ich würde mich freuen, das Ergebnis für beide Fälle zu sehen. Ich gehe jedoch davon aus, dass eine analytische Lösung nur für . k n [ k , inf ]y[n]kn[k,inf]|y[n]z[n]|2
Royi

Antworten:


10

Es gibt keine analytische Lösung dafür, dass ein Skalar ist (glaube ich). Hier ist ein Skript, das Ihnen für ein gegebenes . Wenn Sie es online benötigen, können Sie eine LUT erstellen. Das Skript findet die Lösung, die minimiertα KααK

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

Dabei ist der FIR-Frequenzgang und der IIR-Frequenzgang.H 2H1H2

Sie haben für K keinen Bereich angegeben. Ich möchte jedoch klarstellen, dass das folgende System Ihrem Mittelwertfilter entspricht und den gleichen Rechenaufwand wie Ihr IIR erster Ordnung aufweist.

H(z)=1K1-z-K1-z-1

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 Es ist relativ einfach. Die beiden Ausdrücke für IIR und FIR werden in das Integral eingefügt. Der Schlüssel zum Finden des alternativen Ausdrucks für das FIR-Filter ist das Erkennen des geometrischen Verlaufs / der geometrischen Abfolge. Alle Details finden Sie hier: de.wikipedia.org/wiki/Geometric_progression#Geometric_series . Im Skript berechnet die J-Funktion den Ausdruck unter dem Integralzeichen.
Niaren

@niaren Ich weiß, dass dies ein alter Beitrag ist. Wenn Sie sich erinnern können: Wie leitet sich Ihre Funktion 'f' ab? Ich habe eine ähnliche Sache codiert, aber die komplexen Übertragungsfunktionen für FIR (H1) und IIR (H2) verwendet und dann summiert (abs (H1 - H2) ** 2). Ich habe dies mit Ihrer Summe (fj) verglichen, erhalte aber unterschiedliche resultierende Ausgaben. Ich dachte, ich würde fragen, bevor ich die Mathematik durchpflüge.
Dom

@Dom Das ist lange her und ich kann mich wirklich nicht erinnern. Ich glaube, ich habe gerade den Prozess des von . Ich kann mich nicht erinnern, wie ich den Ausdruck verifiziert habe. Es macht mir nichts aus, noch einmal [H1(jω)-H2(jω)][H1(-jω)-H2(-jω)]
nachzurechnen

@niaren Hi, ich habe versucht, deinen Ausdruck abzuleiten, bin aber beim Addieren der komplexen Brüche hängen geblieben. Ich habe einen Fehler in meinem Code gemacht ... Ihre Funktion scheint Ergebnisse zu liefern, die proportional zur Summe sind (abs (H1 - H2) ** 2), was darauf hinweist, dass sie korrekt sind.
Dom

16

Dieses Problem wird in der Embedded-Signalverarbeitung mit der Mikrosignalarchitektur (ungefähr zwischen den Seiten 63 und 69) ausführlich behandelt . Auf Seite 63 finden Sie eine Ableitung des exakten rekursiven Gleitenden Durchschnitts (den Niaren in seiner Antwort angegeben hat ).

H(z)=1N1-z-N1-z-1.

Zur Vereinfachung in Bezug auf die folgende Diskussion entspricht dies der folgenden Differenzgleichung:

yn=yn-1+1N(xn-xn-N).

Die Annäherung, die den Filter in die von Ihnen angegebene Form bringt, setzt voraus, dass , da (und ich zitiere aus S. 68 ) " der Durchschnitt von Abtastwerten ist ". Diese Annäherung ermöglicht es uns, die vorstehende Differenzgleichung wie folgt zu vereinfachen: y n - 1 x nxn-Nyn-1yn-1xn

yn=yn-1+1N(xn-yn-1)yn=yn-1-1Nyn-1+1Nxnyn=(1-1N)yn-1+1Nxn.

Wenn Sie , erhalten Sie Ihr ursprüngliches Formular, , das den gewünschten Koeffizienten angibt ( in Bezug auf diese Näherung) ist genau (wobei die Anzahl der Abtastungen ist). yn=αxn+(1-α)yn-11α=1Nyn=αxn+(1-α)yn-1 N1NN

Ist diese Annäherung in gewisser Hinsicht die "beste"? Es ist auf jeden Fall elegant. So vergleicht man die Amplitudenantwort [bei 44,1 kHz] für N = 3 und wenn N auf 10 ansteigt (Annäherung in Blau):

N = 3 N = [3,10]


Wie Peters Antwort nahe legt, kann die Approximation eines FIR-Filters mit einem rekursiven Filter unter einer Kleinstquadratnorm problematisch sein. Eine ausführliche Diskussion darüber, wie dieses Problem im Allgemeinen gelöst werden kann, findet sich in der Arbeit von JOS, Techniken für das Design digitaler Filter und Systemidentifikation mit Anwendung auf die Violine . Er befürwortet die Verwendung der Hankel-Norm, behandelt jedoch in Fällen, in denen der Phasengang keine Rolle spielt, auch die Kopec-Methode, die in diesem Fall möglicherweise gut funktioniert (und eine Norm verwendet). Einen umfassenden Überblick über die Techniken der Arbeit finden Sie hier . Sie können andere interessante Annäherungen ergeben.L2


Dies ist eine "elegante" Art, etwas über den Speicher des IIR-Filters erster Ordnung zu sagen. Sein Speicher entspricht . Ich werde die anderen Methoden untersuchen, die Sie erwähnt haben. Vielen Dank. 1α
Royi

Können Sie intuitiv erklären, warum es unter der LS-Norm ( ) keine Lösung gibt? L2
Royi

Ich bin nicht sicher, ob es in diesem Fall eine LS-Lösung gibt oder noch nicht, ich weiß nur, dass es Probleme mit der Konvergenz für das allgemeine "IIR-basierte FIR-Approximations" -Problem gibt. Ich werde w / mehr Infos aktualisieren, wenn ich eine Chance bekomme.
Datageist

Nun, wenn die von Peter vorgeschlagene Kostenfunktion (Die erste) stimmt, gibt es eine Lösung. Zumindest nach meinen Berechnungen.
Royi

Groß. Ich bin gespannt, wie sich der "heuristische" Ansatz mit etwas Kanonischerem vergleichen lässt. 1/N
Datageist

16

OK, lassen Sie uns versuchen, das Beste abzuleiten: so daß der Koeffizient von ist . x[n-m]α(1-α)m

y[n]=αx[n]+(1-α)y[n-1]=αx[n]+(1-α)αx[n-1]+(1-α)2y[n-2]=αx[n]+(1-α)αx[n-1]+(1-α)2αx[n-2]+(1-α)3y[n-3]
x[n-m]α(1-α)m

Die beste mittlere quadratische Approximation wird minimiert: m>k-1

J(α)=m=0k-1(α(1-α)m-1k)2+m=kα2(1-α)2m=m=0k-1(α2(1-α)2m-2kα(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
weil die FIR-Koeffizienten für Null sind .m>k-1

Der nächste Schritt besteht darin, Derivate zu nehmen und gleich Null zu setzen.


Betrachtet man einen Plot des abgeleiteten für und von 0 bis 1, sieht es so aus, als wäre das Problem (wie ich es eingerichtet habe) falsch gestellt, da die beste Antwort .K = 1000 α α = 0JK=1000αα=0

Bildbeschreibung hier eingeben


Ich glaube, hier liegt ein Fehler vor. Nach meinen Berechnungen sollte es so sein:

J(α)=m=0k-1(α(1-α)m-1k)2+m=kα2(1-α)2m=m=0k-1(α2(1-α)2m-2kα(1-α)m+1k2)+α2(1-α)2km=0(1-α)2m=α21-(1-α)2k1-(1-α)2-2αk1-(1-α)k1-(1-α)+1k+α2(1-α)2k1-(1-α)2

Eine Vereinfachung nach Mathematica ergibt:

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

Die Verwendung des folgenden Codes in MATLAB ergibt etwas Äquivalentes, obwohl es anders ist:

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α-2-k-2(1-α)k+1k

Jedenfalls haben diese Funktionen ein Minimum.


Nehmen wir also an, dass wir uns wirklich nur um die Annäherung über die Unterstützung (Länge) des FIR-Filters kümmern. In diesem Fall ist das Optimierungsproblem einfach:

J2(α)=m=0k-1(α(1-α)m-1k)2

Die grafische für verschiedene Werte von gegen führt zu dem Datum in den grafischen Darstellungen und in der folgenden Tabelle.K αJ2(α)Kα

Für = 8. = 0.1533333 Für = 16. = 0.08 Für = 24. = 0.0533333 Für = 32. = 0,04 Für = 40. = 0,0333333 Für = 48. = 0,0266667 Für = 56. = 0,0233333 Für = 64. α m i n K α m i n K α m i n K a m i n K α m i n K α m i n K α m i n K α m i n K α m i nKαmichn
Kαmichn
Kαmichn
Kαmichn
Kαmichn
Kαmichn
Kαmichn
Kαmichn = 0.02
Für = 72. = 0.0166667 Kαmichn

Bildbeschreibung hier eingeben

Die roten gestrichelten Linien sind und die grünen Linien sind , der Wert von , der minimiert (ausgewählt aus ).& agr; m i n & agr; J 2 ( & agr; ) a l p h a = [ 0 : 0,01 : 1 ] / 3 ;1/KαmichnαJ2(α)einlphein=[0:.01:1]/3;


1
Wollte gerade genau das Gleiche posten =)
Phonon

@ Phonon: Fühlen Sie sich frei, um fortzufahren! Ich habe es zu diesem Zweck als Community-Wiki markiert.
Peter K.

Die Ableitung von ist eine Reihe mit einer unendlichen Anzahl von Termen (dh kein Polynom), die Sie auf und dann nach auflösen müssen. Daher ist eine gewisse Sorgfalt (oder möglicherweise eine Annäherung) erforderlich. 0 αα0α
Dilip Sarwate

Kann jemand bitte meine Arbeit überprüfen und / oder korrigieren? :-)
Peter K.

@ DilipSarwate, Was wäre die beste Annäherung? Vielen Dank.
Royi


3

Ich bin auf diese alte Frage gestoßen und möchte meine Lösung mitteilen. Wie in anderen Antworten erwähnt, gibt es keine analytische Lösung, aber die zu minimierende Funktion verhält sich gut und der optimale Wert von kann mit ein paar Newton-Iterationen leicht gefunden werden. Es gibt auch eine Formel, um die Optimalität des Ergebnisses zu überprüfen.α

Die Impulsantwort des Filters für den gleitenden Durchschnitt der Länge FIR ist gegeben durchN

(1)hFichR[n]=1N(u[n]-u[n-N])

Dabei ist die Einheitsschrittfunktion. Der IIR-Filter erster Ordnungu[n]

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

hat die Impulsantwort

(3)hichichR[n]=α(1-α)nu[n]

Ziel ist es nun, den Fehlerquadrat zu minimieren

(4)ϵ=n=0(hFichR[n]-hichichR[n])2

Mit und kann der Fehler als geschrieben werden(1)(3)

ϵ(α)=n=0N-1(α(1-α)n-1N)2+n=Nα2(1-α)2n=α2n=0(1-α)2n-2αNn=0N-1(1-α)n+n=0N-11N2=α21-(1-α)2-2αN1-(1-α)N1-(1-α)+1N(5)=α2-α-2N(1-(1-α)N)+1N,0<α<2

Dieser Ausdruck ist dem in dieser Antwort angegebenen sehr ähnlich , ist jedoch nicht identisch. Die Einschränkung von in stellt sicher, dass die unendliche Summe konvergiert und mit der Stabilitätsbedingung für das IIR-Filter aus identisch ist .α(5)(2)

Das Setzen der Ableitung von auf Null ergibt(5)

(6)(1-α)N-1(2-α)2=1

Es ist zu beachten, dass das optimale im Intervall da größere Werte von zu einer alternierenden Impulsantwort , die die konstante Impulsantwort des FIR-Filters für den gleitenden Durchschnitt nicht approximieren kann.α(0,1]α(3)

Aus der Quadratwurzel von und der Einführung von erhalten wir(6)β=1-α

(7)β(N+1)/2+β(N-1)/2-1=0

Diese Gleichung kann nicht analytisch nach gelöst werden , sondern nach :NβN

(8)N=-2Log(1+β)Log(β),β0

Gleichung kann verwendet werden, um eine numerische Lösung von überprüfen ; es muss den angegebenen Wert von .( 7 ) N(8)(7)N

Gleichung kann mit ein paar Zeilen (Matlab / Octave) gelöst werden:(7)

N = 50; % gewünschte Filterlänge des FIR Moving Average Filters

if (N == 1)% keine Iteration für den Trivialfall
    b = 0;
sonst
    % Newton-Iteration
    b = 1; % Startwert
    Nit = 7;
    n = (N + 1) / 2;
    für k = 1: Nit,
        f = b ^ n + b ^ (n-1) -1;
        fp = n · b (n-1) + (n-1) · b (n-2);
        b = b - f / fp;
    Ende

    % Überprüfe das Ergebnis
    N0 = -2 * log (1 + b) / log (b) + 1% muss gleich N sein
Ende

a = 1 - b;

Unten finden Sie eine Tabelle mit den optimalen Werten von für einen Bereich von Filterlängen :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.9076d-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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.