NLMS Prediction Filter Implementations
Go to file
Luke 8cefcc7bb9
Update README.md
2018-04-03 10:31:00 +02:00
.vs Neuer ordner "doc" mit Doc.txt 2018-03-13 11:29:53 +01:00
bin Ordner Struktur angepasst. 2018-03-13 11:27:37 +01:00
doc Delete Comparison between Adaptive filter Algorithms (LMS, NLMS and RLS).pdf 2018-03-23 11:47:46 +01:00
.gitignore main.c angelegt und include hinzugefügt 2018-03-13 11:10:00 +01:00
README.md Update README.md 2018-04-03 10:31:00 +02:00

README.md

NLMSvariants

Aufgabenstellung

Aus der PDF entnommen mit der Auswahl an PVL-Themen

"Vergleich von linearen Prädiktionsstrategien (NLMSvariants)"

Das Voraussagen von Signalwerten ist ein Schlüsselelement in modernen Kompressionssystemen. Aber auch in anderen Anwendungsgebieten ist die Prädiktion von Ereignissen erforderlich. Aufgabe ist es, ein Matlab/SciLab/Octave/C-Programm zu schreiben, das Varianten eines bestimmten Prädiktionsverfahrens miteinander vergleicht. Adaptive Prädiktionsfilter passen sich der Charakteristik der Signale an und gehören somit in den Bereich des maschinellen Lernens. So genannte Least-Mean-Square-Filter (LMS) sind adaptive Filter mit einer vergleichsweisen geringen Komplexität. Im Wesentlichen werden M vorangegangene Signalwerte gewichtet überlagert, um einen Schätzwert für die aktuelle Position zu generieren.

Xˉ [𝑛] = <20>𝑎𝑗[𝑛] ∙ 𝑥[𝑛 𝑗] 𝑀 𝑗=1 Der Prädiktionsfehler lautet: e[𝑛] = 𝑥[𝑛] 𝑥<>[𝑛]. Um die Prädiktionsfehlerenergie zu minimieren müssen die Filterkoeffizienten nachgeführt (aktualisiert) werden 𝑎𝑗[𝑛 + 1] = 𝑎𝑗[𝑛] + 𝜇 ∙ 𝑒[𝑛] ∙ 𝑥[𝑛𝑗] ||𝐱[𝑛]|| 2 mit ||𝐱[𝑛]|| 2 = ∑ (𝑥[𝑛 𝑗]) 𝑀 2 𝑗=1 während 0 < 𝜇 ≤ 1 die Lernrate ist. Leider funktioniert das nur gut, wenn der Mittelwert von x[n] gleich Null ist. Für Bilder und auch teilweise für Sprachsignale ist das nicht gegeben. Als Lösung kommen drei Varianten in Frage, welche die obigen Formeln leicht abwandeln:

  1. lokalen Mittelwert abziehen

𝑥 <0A>[𝑛] = 𝑥̅[𝑛] + ∑ 𝑎𝑗[𝑛] ∙ (𝑥[𝑛 𝑗] 𝑥̅[𝑛]) 𝑀 𝑗=1 mit 𝑥̅[𝑛] = 1 𝑀𝑥[𝑛 𝑗] 𝑀 𝑗=1 und 𝑎𝑗[𝑛 + 1] = 𝑎𝑗[𝑛] + 𝜇 ∙ 𝑒[𝑛] ∙ 𝑥[𝑛𝑗]−𝑥̅[𝑛] ||𝐱[𝑛]|| 2 mit ||𝐱[𝑛]|| 2 = ∑ (𝑥[𝑛 𝑗] 𝑥<>[𝑛]) 𝑀 2 𝑗=1

  1. Bezug auf direkten Vorgänger nehmen

𝑥 <0A>[𝑛] = 𝑥[𝑛 1] + ∑ 𝑎𝑗[𝑛] ∙ (𝑥[𝑛 1] 𝑥[𝑛 𝑗 1]) 𝑀 𝑗=1 und 𝑎𝑗[𝑛 + 1] = 𝑎𝑗[𝑛] + 𝜇 ∙ 𝑒[𝑛] ∙ 𝑥[𝑛1]𝑥[𝑛𝑗1] ||𝐱[𝑛]|| 2 mit ||𝐱[𝑛]|| 2 = ∑ (𝑥[𝑛 1] 𝑥[𝑛 𝑗 1]) 𝑀 2 𝑗=1

  1. differentiellen Bezug auf Vorgänger nehmen

𝑥 <0A>[𝑛] = 𝑥[𝑛 1] + ∑ 𝑎𝑗[𝑛] ∙ (𝑥[𝑛 𝑗] 𝑥[𝑛 𝑗 1]) 𝑀 𝑗=1 und 𝑎𝑗[𝑛 + 1] = 𝑎𝑗[𝑛] + 𝜇 ∙ 𝑒[𝑛] ∙ 𝑥[𝑛𝑗]𝑥[𝑛𝑗1] ||𝐱[𝑛]|| 2 mit ||𝐱[𝑛]|| 2 = ∑ (𝑥[𝑛 𝑗] 𝑥[𝑛 𝑗 1]) 𝑀 2 𝑗=1 Das originale Verfahren und die drei Varianten sind zu implementieren und mit verschiedenen Testsignalen (synthetisierte und reale, N>= 500) und verschiedene M zu prüfen. Als Gütekriterium ist die mittlere Energie des Schätzfehlers 𝐸 = 1 𝑁 <0A> ∑ (𝑒[𝑛]) 𝑁 2 𝑛=1 heranzuziehen. Bei selbstgenerierten Signalen könnte auch die Konvergenz der Filterkoeffizienten zu den richtigen Werten untersucht werden. Weitere Unterstützung wird bei Bedarf gegeben. Alle Untersuchungen sind schriftlich zu dokumentieren. Neben der schriftlichen Arbeit sind alle Quellen (Programmcode, Texte, Testsignale) und Tools abzugeben, damit eine Reproduktion der Ergebnisse möglich ist.

Teilaufgaben:

  • Koordination
  • Recherche
  • Programmierung
  • Dokumentation (Grundlagen, Methode, Änderungen am Quellcode, Kompressionsergebnisse)