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


von Albert (Gast)


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)


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)


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)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.