mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP LMS-Adaption


Autor: Jochen B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich versuche im Moment den LMS-Algorithmus zu verstehen und
anschließend zu implementieren. Jedoch verstehe ich den Ablauf der
Tap-Adaption nicht so recht!?! Im Moment bin ich mir nicht sicher ob
die Tabs zwischen jeden Filtertakt mit min(e[k]) adaptiert werden oder
ob nach jedem Filtertakt w(k+1) errechnet wird und die Adaption sich
aus mehreren Filterzyklen ergibt.

Die Verwirrung kommt dadurch, dass es zwei es Formel gibt, welche ich
vermutlich falsch interpretiere:

w_i[k+1] = w_i[k] + step * x[k] *e[k];
=> Adaption über die Filterzyklen???

w_i_neu[k] = w_i_alt[k] + step * x[k-i] * e[k]
mit i = Tapindex
    k = Zeitindex
=> Adaption zwischen den Filtertakten???


Vielleicht gibt es auch einfach zwei Möglichkeiten den LMS zu
implementieren!?!

Gruß && Danke

Jochen

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ehm, worauf beziehst Du Dich bei Deiner Namensgebung, was willst Du auf
was adaptieren, e[] ist Fehler(?) von was, x[] ist Eingang(?) von was,
was issn w.

Paar Details und Referenzen kämen gut!

Cheers
Detlef

Autor: Jochen B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh, sorry...

K: Zeit , 0...k
x: Eingangssignal
y: Ausgangssignal
d: desire signal
w: Filterkoeffizienten
i: Tapindex

e[k] = d[k] - y[k]: Fehler

Refs: Erste Formel, jedoch habe ich h(Impulsantwort) durch w(weight)
ersetzt:
http://www-nt.e-technik.uni-erlangen.de/LMS/lectur...
Seite 5-8,
Zweite Formel kommt von meinem Prof. Die hat er mal hergeleitet.

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr dürft ja interessante Sachen machen, oh seliges Studentenleben!

Die drei Formel von Seite 5-8:

1. mit der aktuellen geschätzten Impulsantwort hdach des zu
adaptierenden Sstems und Deinem aktuellen Eingangswert x[k] berechnest
Du ydach.

2. Das vergleichste mit Deinem realen Meßsignal y[k] und kriegst den
Fehler.

3. Anhand dieses Fehlers und Deiner Schrittweite ziehst Du hdach nach.

Ich verstehe an Deinem post nicht, was Du mit Filtertakten und
Filterzyklen meinst. hdach[k] und x[k] sind Vektoren, das sind nicht
nur Skalare!

Cheers
Detlef

Autor: Jochen B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

zu deiner Frage:
=> Filterzyklen => Zeit um einen Sig.Vek. x[k]=[0 0 0 1 0 0 3 0 0] zu
filtern, K = 0...N-1.
=> Filtertakt => Zeit um einen Wert des Sig.Vek. zu filtern z.B. x[k=3]
= 1

Also ich habe jetzt eine Lösung nach dem folgenden Algorithmus
implementiert:

solange 1==1
{
   /* Filterzyklus => der Sig.Vek. wird zyklisch gefiltert*/
   bis k-- == 0
   {
       /* Filtertakt=> der Sig.Wert wird x[k=1,2...] wird gefiltert*/
       Filter  x[k] /*(call fir)*/
       errechne (e[k])
       adaptiere die TAP's/*(call adap)*/
   }
}

Die Tabs's werden in einem Zirkulären-Puffer gespeichert. Den Puffer
habe ich mit (Anzahl_TABs*länge_SigVek*2) dimensioniert. Somit habe ich
die Möglichkeit für alle k+1 die TABs zu speichern mit den berechneten
TABs im nächsten Zyklus zu filtern und dieser wieder neu zu berechnen.
Realisiert habe ich das mit zwei Pointern auf den Zierklären-Puffer.
Der erste zeigt auf den Anfang des SP-Bereichs der zweite in die Mitte.
Da es sich um einen Zirk.-Puffer handelt laufen diese im Kreis mit dem
Abstand Anzahl_TABs*länge_SigVek.

Nun das ganze funktioniert auch, aber ich bin mir nicht sicher ob dies
 einer guten Lösung entspricht, da der Sp.-Bedarf bei entsprechend
vielen Koeffs ernorm groß wird!?!

jetzt muss ich noch das 1.15 Format ergänzen... Damit ich eine kleinere
Schrittweite wählen kann.

Danke für deine Hilfe...

Gruß Jochen

Autor: Jochen B. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mein SourceCode(ADSP2100-Assembler)

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.