mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Konvergiert der RLS-Algorithmus nur für stabile bzw. begrenzte Systeme?


Autor: Divergenz-Gepeinigter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

seit Tagen sitz ich schon an einem Problem und komm nicht weiter.

Ich möchte eine Übertragungsfunktion, deren Zähler 4. Ordnung und deren 
Nenner 5. Ordnung ist, mit dem RLS-Algorithmus über den Gleichungsfehler 
identifizieren.
Das System ist an sich instabil und ungeregelt. Bisher simuliere ich es 
auch bloß.

Den RLS-Algorithmus habe ich implementiert, aber die Parameter 
konvergieren nicht. Total falsch kann es nicht sein, denn zumindest die 
ersten paar Sekunden des Signals (ein paar aufschwingende Schwingungen) 
werden von meiner identifizierten Übertragungsfunktion korrekt 
berechnet... bis es dann irgendwann total abdriftet.

Jetzt meine Frage1: Konvergiert der RLS-Algorithmus nur für stabile bzw. 
begrenzte Systeme? (Habe mit einem PT2 gespielt und da schien es so zu 
sein, dass die Konvergenz vom RLS nur zustande kam, wenn ich das System 
so gestaltete, dass die Schwingungen nicht aufschwingen.)

Frage2: Der RLS-Algorithmus ist auch von der Anregung u abhängig. Mit 
der Sprungfunktion hält mein RLS wenigstens ein paar Sekunden durch. Mit 
Sinusanregung kommt von Anfang an Blödsinn raus. Jemand Tipps oder 
Erfahrungen, wie man denn ein System anregen sollte?
In der Theorie find ich nichts dazu. Vielleicht hat ja jemand einen 
guten Tipp(./?)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich erinnere mich, dass es eine RLS-Variante mit Vergessensfaktor gibt. 
Benutzt du so einen Term?

Zu 1): RLS geht auch bei instabilen Systemen.

Zu 2): Versuche einmal eher langsame Signalverläufe und die Verwendung 
von Vergessensfaktor

Autor: Detlef _. (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>>>>>>>
Frage2: Der RLS-Algorithmus ist auch von der Anregung u abhängig. Mit
der Sprungfunktion hält mein RLS wenigstens ein paar Sekunden durch. Mit
Sinusanregung kommt von Anfang an Blödsinn raus. Jemand Tipps oder
Erfahrungen, wie man denn ein System anregen sollte?
In der Theorie find ich nichts dazu. Vielleicht hat ja jemand einen
guten Tipp(./?)

Wenn Du das System kennenlernen willst, muss Du es breitbandig anregen ( 
sufficiently rich signal). Wenn Du nur einen Sinus raufgibst siehts Du 
ja auch nur die Reaktion auf diesen Sinus. Sprung ist besser, probier 
mal Rauschen.

Cheers
Detlef

Autor: Divergenz-Gepeinigter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Tipps!

Einen Vergessensfaktor habe ich optional eingebaut, ja. Die 
Kovarianzmatrix muss ja positiv definit sein, habe ich gelesen, damit 
der RLS konvergiert. Derzeit führe ich immer eine Neuinitialisierung der 
Kovarianzmatrix durch, sobald sie aufhört, positiv definit zu sein. 
Zusammen mit dem Vergessensfaktor habe es geschafft, dass der 
Algorithmus einige Simulationsminuten durchhält und dem Signal folgen 
kann. Letztendlich divergiert es allerdings leider trotzdem irgendwann 
und es kommen auch andere Parameterwerte raus, als ich vorgegeben habe. 
Für mich ist das ein Hinweis, dass ich den Algorithmus wohl doch nicht 
ganz richtig implementiert haben kann. Habe es mit Rauschen und Sprüngen 
probiert, aber wahrscheinlich ist eine ungenügende Anregung wohl doch 
nicht Ursache meines Problems.

Ein Vergessensfaktor braucht man doch auch eigentlich nur dann, wenn 
sich die Systemparameter dynamisch verändern. Bei mir sind sie 
allerdings statisch fest vorgegeben.

Naja, werde weiter Fehler suchen. Vielen Dank erst mal!

Autor: Quantisierungsrauschen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rechnet dein Algorithmus mit Festkommazahlen? Da neigt der 
RLS-Algorithmus zur Instabilitaet.

Autor: Hinweisgeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spiel mal mit der Kovarianzmatrix.

Autor: Jan K. (jan_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es ein Modell oder Skript? Vielleicht können wir ja mal drauf 
gucken.

Autor: Al C. (alessio_c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du deinen RLS-Algo mal an einem stabilen System ausprobiert und auf 
Funktionstüchtigkeit getestet? Wenn nicht, dann mach das mal.

Und jetzt mal von meiner Seite was Anderes (bitte korrigiert mich, wenn 
ich falsch liege -- hatte noch keinen Kaffee heute Morgen...):
Für was ein instabiles System identifizieren? Es divergiert doch. Und 
wenn das schon divergiert, ist es doch klar, dass auch mein Schätzer 
divergieren muss, weil der Erwartungswert des Schätzfehlers gegen Null 
streben sollte. Wie wäre es wenn du einen stabilisierenden Regler 
auslegst und dann eine closed-loop Schätzung machst? Aber Vorsicht: RLS 
verliert hierbei seine Legitimität, weil per Definition der Schätzfehler 
und das Rauschen unkorreliert sind! Funzt aber unter gewissen 
Bedingungen trotzdem...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.