Nehmen wir den IIR-Filter erster Ordnung an: yn alpha xn (1 - alpha) yn - 1 Wie kann ich den Parameter alpha s. t. Das IIR annähernd so gut wie möglich die FIR, die das arithmetische Mittel der letzten k Proben ist: Wo n in k, infty), was bedeutet, dass der Eingang für den IIR länger als k sein kann und dennoch Id die beste Annäherung der haben Mittelwert der letzten k Eingänge. Ich weiß, die IIR hat unendliche Impulsantwort, daher Im auf der Suche nach der besten Annäherung. Id für die analytische Lösung glücklich sein, ob es für oder ist. Wie konnten diese Optimierungsprobleme nur mit der 1. Ordnung IIR gelöst werden. (1 - alpha) yn - 1 genau ndash Es ist verpflichtet, eine sehr schlechte Annäherung zu werden. Can39t Sie leisten, alles, was mehr als ein First-Order IIR ndash leftaroundover Okt 6 11 at 13:42 Vielleicht möchten Sie Ihre Frage bearbeiten, so dass Sie don39t verwenden yn zu zwei verschiedenen Dingen bedeuten, z. Könnte die zweite angezeigte Gleichung zn frac xn cdots frac xn-k1 lesen, und Sie könnten sagen, was genau ist Ihr Kriterium der Quoten gut als möglichequot z. B. Wollen Sie vert yn - znvert so klein wie möglich für alle n, oder vert yn - znvert2 so klein wie möglich für alle n sein. Ndaren Dilip Sarwate Ich weiß, das ist ein alter Post so, wenn Sie sich erinnern können: wie ist Ihre Funktion 39f39 abgeleitet I39ve codiert eine ähnliche Sache, aber mit den komplexen Übertragungsfunktionen für FIR (H1) und IIR (H2 ) Und dann Summe (abs (H1 - H2) 2). I39ve verglichen dieses mit Ihrer Summe (fj), aber erhalten unterschiedliche resultierende Ausgänge. Dachte, ich würde vor dem Pflügen durch die Mathematik fragen. (1 - alpha) alpha xn - 1 (1 - alpha) 2 yn - 1 ampamp alpha xn (1 - alpha) alpha xn - 1 (1 - alpha) 2 yn - 2 ampamp alpha xn (1 - alpha) alpha xn-1 (1 - alpha) 2 alpha xn-2 (1 - alpha) 3 yn - 3 Ende, so daß der Koeffizient von xn-m alpha (1-alpha) m ist . Der nächste Schritt ist, Derivate zu nehmen und gleich Null zu sein. Betrachtet man ein Plot des abgeleiteten J für K 1000 und Alpha von 0 bis 1, sieht es aus wie das Problem (wie Ive es aufgestellt) ist schlecht gestellt, weil die beste Antwort ist Alpha 0. Ich denke, Theres ein Fehler hier. Die Art und Weise sollte es nach meinen Berechnungen sein: Mit dem folgenden Code auf MATLAB ergibt etwas Äquivalentes zwar unterschiedlich: Jedenfalls haben diese Funktionen Minimum. So können wir annehmen, dass wir uns nur um die Annäherung über die Unterstützung (Länge) des FIR-Filters kümmern. In diesem Fall ist das Optimierungsproblem genau: J2 (alpha) sum (alpha (1-alpha) m - frac) 2 Das Plotten J2 (alpha) für verschiedene Werte von K versus alpha ergibt das Datum in den Diagrammen und der Tabelle unten. Für K 8. alpha 0,1533333 für K 16. alpha 0,08 für K 24. alpha 0,0533333 für K 32. alpha 0,04 für K 40. alpha 0,0333333 für K 48. alpha 0,0266667 für K 56. alpha 0,0233333 für K 64. alpha 0,02 für K 72. alpha 0.0166667 Die roten gestrichelten Linien sind 1K und die grünen Linien alpha, der Wert von alpha, der J2 (alpha) minimiert (ausgewählt aus tt alpha 0: 0,01: 13). Theres eine nette Diskussion dieses Problems in der eingebetteten Signalverarbeitung mit der Mikrosignalarchitektur. Etwa auf den Seiten 63 und 69. Auf Seite 63 ist eine Ableitung des exakten rekursiven gleitenden Durchschnittsfilters (die niaren in seiner Antwort gegeben hat) enthalten. Zur Bequemlichkeit in Bezug auf die folgende Diskussion entspricht sie der folgenden Differenzengleichung: Die Näherung Die den Filter in die von Ihnen angegebene Form bringt, vorausgesetzt, dass x approx y, weil (und ich zitiere aus S. 68) y der Mittelwert von xn Proben ist. Diese Approximation erlaubt es uns, die vorstehende Differenzengleichung wie folgt zu vereinfachen: Einstellen von alpha, erhalten wir zu Ihrer ursprünglichen Form y alpha xn (1-alpha) y, was zeigt, dass der Koeffizient, den Sie (in Bezug auf diese Approximation) genau 1over haben wollen (Wobei N die Anzahl der Proben ist). Ist diese Annäherung die beste in irgendeiner Hinsicht Seine sicherlich elegant. Heres, wie sich die Amplitudenreaktion bei 44,1 kHz für N 3 vergleicht und wenn N auf 10 erhöht wird (Approximation in blau): Wie aus der Peters-Antwort hervorgeht, kann die Annäherung eines FIR-Filters mit einem rekursiven Filter unter einer Kleinste-Quadrate-Norm problematisch sein. Eine ausführliche Diskussion darüber, wie dieses Problem im Allgemeinen gelöst werden kann, finden Sie in JOSs These, Techniken für Digitalfilter Design und System Identifikation mit Anwendung auf die Violine. Er befürwortet die Verwendung der Hankel-Norm, aber in Fällen, in denen die Phasenreaktion keine Rolle spielt, deckt er auch die Kopecs-Methode ab, die in diesem Fall gut funktionieren könnte (und eine L2-Norm verwendet). Einen breiten Überblick über die Techniken in der Arbeit finden Sie hier. Sie können andere interessante Approximationen liefern. Der exponentielle gleitende Durchschnitt ist ein Typ des IIR-Filters, der einfach in C implementiert werden kann und minimale Ressourcen verwendet. Anders als ein einfacher gleitender Durchschnitt erfordert es keinen RAM-Puffer, um vorherige Abtastwerte zu speichern. Es muss nur einen Wert (der vorherige Durchschnitt) zu speichern. Ein exponentieller gleitender Durchschnitt wird als die folgende Gleichung ausgedrückt: avgn (in alpha) avgn-1 (1-alpha). Die Implementierung dieser Gleichung mit Floating-Point-Mathematik ist einfach, aber mit festen Punkt-Variablen ist ein wenig heikel. Das Code-Snippet verwendet hier 32-Bit-signierte Ganzzahlen für die Durchschnitts - und Eingabewerte. Zwischenwerte müssen 64-Bit-Mathematik verwenden, um Überlauffehler zu vermeiden. Alpha-Werte nahe bei Null repräsentieren eine starke Mittelung, während ein Alpha-Wert von einem keine Mittelung aufweist. Auf der Zeile, wo temp0 berechnet wird, glaube ich, dass das Ende der Zeile lesen sollte (65535 - alpha) Andernfalls würde ein Alpha von 1 unsachgemäß den vorherigen Durchschnitt sowie den neuen Wert enthalten. Leider hat der dargestellte Code zwei Hauptfehler, da der Durchschnitt als Ganzzahl gespeichert ist. Um dies zu sehen, können Sie wählen alpha zu 1024. Wir beginnen mit adcvalue 0, dann dspemai32 wird 0 wie erwartet zurück. Dann hebt adcvalue auf 1. tmp0 in dspemai32 ist: tmp0 (int64t) 1 (1024) (int64t) 0 (65536 - 1024) 1024 0 64512 1024 so ist der zurückgegebene Wert: (int32t) ((tmp0 32768) 65536) ( 1024 32768) 65536 33792 65536 0 So dspemai32 wird auf 0 zurückkehren, während es (nach lang genug Filterzeit) am Ende Rückkehr 1. Der Code implementiert effektiv einen Filter mit einer toten Zone, nicht ändern, bis die Eingabe von der unterscheidet Durchschnittlich um 32768 alpha oder mehr oder unterscheidet sich durch - (32768 alpha) oder weniger. Nach dem obigen Beispiel wird der Adcwert auf 31 erhöht (was kleiner als 32768 alpha ist). Tmp0 in dspemai32 ist: tmp0 (int64t) 31 (1024) (int64t) 0 (65536 - 1024) 31744 0 64512 31744 Der zurückgegebene Wert lautet: (int32t) ((tmp0 32768) 65536) (31744 32768) 65536 64512 65536 Tmp0 in dspemai32 ist: tmp0 (int64t) 32 (1024) (int64t) 0 (65536 - 1024) 32768 0 64512 32768 so dass der zurückgegebene Wert ist: ( Int32t) ((tmp0 32768) 65536) (32768 32768) 65536 65536 65536 1 So zumindest bewegt sich der Durchschnitt auf den Eingangswert um 1. Das ist gut. Aber dann: tmp0 (int64t) 32 (1024) (int64t) 1 (65536 - 1024) 32768 1 64512 97280 so ist der zurückgegebene Wert: (int32t) ((tmp0 97280) 65536) (97280 32768) 65536 130048 65536 1 So dspemai32 Wird auf die Rückkehr 1, nie den Eingangswert von 32 zu halten. Nicht gut. Der zweite Fehler ist die Integer-Division (tmp0 32768) 65536. In C C wird die ganzzahlige Division in Richtung 0 gehen, so dass in dieser Situation die Totzone sogar größer ist. Viel besser (und viel einfacher) ist der Algorithmus, wie von david. prentice auf avrfreaks. netcomment824765comment-824765 gezeigt: lang gesamt 0 int durchschnittlich 0 int N 0 Arbeitszahl der Proben. Total ADCW add to running total if (N gt MAXSAMPLES) genügend Samples total - durchschnittlich ein anderes entfernen N average total N integerAn Exponential Moving Average IIR Filter Filterung von Messgrößen eingebettete Mikrocontroller-basierte Schaltungen werden benötigt, um den Mittelwert der Signale zu verfolgen Reduzieren ihre Variabilität. Da sich die Signale in ihrem Durchschnittswert über die Zeit ändern, muß das Filter ein Mittel haben, um alte Messungen zu verwerfen, während neue Proben aufgenommen werden. Das exponentiell gleitende, durchschnittliche unendliche Impulsantwort-Filter (IIR-Filter) ist seit vielen Jahrzehnten gut verstanden und wird weitgehend in der statistischen Analyse verwendet. Sie liefert ein rechnerisch einfaches Mittel zur Bestimmung des Mittelwertes einer Variablen, wenn das zugrunde liegende Modell der Variablen unbekannt ist. Wenn v n die zu filternde Variable ist, dann ist ein n-ter Schätzer für den Mittelwert: wobei a ein Gewichtskoeffizient ist, dessen Wert den Glättungsbetrag bestimmt. Je näher a auf 0 gesetzt ist, desto größer ist die Glättung. In einigen Fällen erzeugt der Algorithmus in dieser Form Zwischenergebnisse, die groß werden können. Um dies mit einer endlichen Präzisions-Integer-Arithmetik umzusetzen, wird es in eine etwas andere Form umgeformt, in der Zwischenergebnisse durch einen bekannten Wert begrenzt werden. Der Gewichtskoeffizient wird als 1 - 1c dargestellt. Wobei c eine Potenz von 2 ist. Die Leistung k kann erhöht werden, um die Glättung zu erhöhen, während die Beschränkung auf eine Potenz von 2 ermöglicht, daß Multiplikationen und Teilungen unter Verwendung von sehr schnellen Rechts - und Linksverschiebungsoperationen in einem Mikroprozessor implementiert werden. Die Größe cv av (n) wird verfolgt, um die Genauigkeit aufrechtzuerhalten: Wenn beispielsweise die Abtastwerte 8 Bit-Größen sind (wie in vielen der Algorithmen, die für die hier beschriebenen SMPS-Schaltungen beschrieben sind) und k als 8 gewählt wird, dann ist die Größe Cv av (n) kann als 16-Bit-Wert ohne Verlust von Information dargestellt werden (genau: 8k Bits, siehe unten). Sobald dies bestimmt ist, wird die Größe v av (n) durch eine einfache Rechtsverschiebung um k Stellen erhalten. An diesem Punkt gibt es einen Informationsverlust von weniger als 1 lsb Grße, der in die Unsicherheiten von vn absorbiert werden kann (man beachte jedoch, dass es Korrelationen in dieser verlorenen Information gibt, die systematische Fehler verursachen können). Unter der Annahme, daß die Variablen vi statistisch unabhängig sind, zeigt die Varianzanalyse, daß sie um einen Faktor 1 (2c) reduziert ist. Für Schrittänderungen in v n ist die Zeitkonstante c Berechnungsintervalle. Das Verfolgen des Mittelwerts wird weniger genau, wenn die Zeitkonstante zunimmt, um mit der niedrigsten Frequenz im zugrunde liegenden Signalmodell vergleichbar zu werden. Obergrenze für den Mittelwert Der Filter beginnt mit v av (0) 0. Alle Messungen v n liegen zwischen 0 und kleiner als B (wobei B in unseren Beispielen normalerweise 256 beträgt). So arbeitet man am Anfang der Sequenz (die in der Praxis immer endlich ist), also nur B. Also ist der Maximalwert des verstärkten Durchschnitts cv av (n) cB, der im obigen Beispiel innerhalb einer 16-Bit-Zahl liegt. In dem Fall, in dem die Proben unterschiedliche statistische Wichtigkeit haben, das heißt, einige haben eine größere Fehlerwahrscheinlichkeit als andere, können Gewichte angewendet werden, um eine allgemeinere Form des Filters zu erzeugen. Diese Gewichte würden so gewählt, daß sie eine umgekehrte Beziehung zur Fehlerwahrscheinlichkeit haben. Wenn w n die anzuwendenden Gewichte sind, kann das folgende Filter verwendet werden: Die zweite Gleichung erzeugt eine IIR-Schätzung des Durchschnitts der Gewichte, die in der ersten Gleichung verwendet wird. Dies kann gezeigt werden, um eine ungehinderte Schätzung des Mittelwerts von v n mit einem Vergessensfaktor von (1-a) zu erzeugen. Wie zuvor wurden die modifizierten Mittelwerte cw av (n) und cw av (n) v av (n), die auf der linken Seite angegeben sind, verfolgt und die gewünschten Mengen durch einfache Teilung extrahiert.
No comments:
Post a Comment