Forum: Digitale Signalverarbeitung / DSP / Machine Learning Frage zu RLS-Algorithmus


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Albert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich befasse mich grade ein wenig mit adaptiven Filtern. Den LMS- und 
NLMS-Algorithmus habe ich bereits nachvollziehen können und habe sie 
eigentlich auch sehr gut verstanden, ich konnte die Algorithmen auch in 
C selber implementieren und es hat funktioniert.

Nun möchte ich noch den RLS-Algorithmus verstehen.
http://en.wikipedia.org/wiki/Recursive_least_squares_filter ist meine 
Informationsquelle ;-)

Also was ich bis jetzt weiss: der Algorithmus summiert zu jedem 
Zeitpunkt über alle Fehlerquadrate auf. Die Fehlerquadrate werden noch 
mit dem Parameter lambda exponentiell abklingend gewichtet. Damit kommt 
zu meiner Summe nach jedem Zeitschritt ein Summand hinzu (vorerst, die 
Rekursion betrachte ich später).

Die Kostenfunktion heisst also:

Soweit so gut. Nun wird für den Fehler die Gleichung des FIR-Filters 
eingesetzt:
Hierbei sind die w die Filterkoeffizienten, u ist der Eingang ins 
FIR-Filter und d ist das desired Signal.
Soweit so gut, ich habe bisher nur in die Kostenfunktion eingesetzt, was 
ich schon kenne. Nun soll ja der Gradient der Kostenfunktion bestimmt 
werden. Dazu muss man nach den aktuellen Filterkoeffizienten
 partiell ableiten. Nur: wie mache ich das? eins ist sicher: der 
Exponent 2 kommt runter und wird ein Vorfaktor. Was passiert mit der 
inneren Summe, wenn ich nach
 ableite? Den Schritt kann ich auf der Wikipedia-Seite nicht verstehen, 
er wird nur unzureichend erklärt... :-/
Ich freue mich über eure Hilfe!

Gruss.

von Freddy (Gast)


Bewertung
0 lesenswert
nicht lesenswert
C soll partiell nach w abgelitten werden. e ist abhängig von w. Vergiss 
deinen letzten Ausdruck, der macht das nur komplizierter.

Folgender Ansatz:
So da kannst dann die Produktregel anwenden

Das hat dir glaub ich gefehlt bei der Herleitung von Wikipedia.

Der Rest ist dann wieder ersichtlich.

MfG

von Albert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Und wie lautet denn dann die partielle Ableitung von e nach w?
Interessant ist für mich auch die Frage:
eigentlich soll da ja der Gradient bestimmt werden, also müsste bei der 
Berechnung doch ein Vektor heraus kommen, aber irgendwie ist alles 
Skalar.

von Freddy (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Also nach deiner Wahl der Indices (ist anders als auf Wikipedia) gilt 
für den Fehler
Das sind alles Skalare, aber du kannst jene Signale, die von m abhängen, 
auch als Vektor (allgemein mit fetten Kleinbuchstaben gekennzeichnet) 
schreiben:
Das wird hier bei den adaptiven Filtern genutzt, damit das ganze ein 
bisschen übersichtlicher ist. Für die Summe gilt:
Jetzt sind Vektoren standardmäßig Spaltenvektoren, sodass "hoch T" 
daraus einen Zeilenvektor macht (transponieren). Zeilenvektor mal 
Spaltenvektor ergibt ein Skalar, sodass auch e[i] ein Skalar ist.

Aber wenn du jetzt den ganzen Mist partiell ableitest, dann kommt da 
doch ein Vektor raus:
Du leitest ja nach allen M+1 Koeffizienten w einzeln ab!
So, puh. Das ist der Gradient. Und wenn du dir das für ein m mal 
überlegst (nimm die Gleichung ganz oben für M=1), dann bleibt da immer 
nur das u[i-m] übrig:

Aber das ist doch eigentlich genau die gleiche Herleitung wie beim 
LMS-Algorithmus. Denn letztendlich geht es darum, zur 
Wiener-Hopf-Gleichung zu gelangen und dann deren Lösung (die optimalen 
Koeffizienten) iterativ zu bestimmen.

Darf ich fragen was deine Quelle für LMS/NLMS war?

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]
  • [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.