Adaptive Regelung am Quadrocopter #5: Digitale Signalverarbeitung, adaptiver FxLMS-Regler

Zum vorherigen Beitrag: Modellierung der Quadrocopterstruktur

Zum nachfolgenden Beitrag: Gesamtsystemsimulation – Identifikation des sekundären Pfads, Wahl der Reglerparameter

 

Hallo liebe OpenAdaptroniker,

 

Heute werde ich über die Modellierung der digitalen Signalverarbeitung (siehe Einordnung in die Modellstruktur des gesamten Systems) und des Reglers berichten. Der Eintrag ist etwas lang aber enthält alles was ihr zu den Reglern, die ich in meiner Arbeit implementiert habe, wissen müsst.

Die unten angesprochenen Modelle wurden alle in Scilab/Xcos 5.5.2 realisiert (zum Download). Die vorletzte Version ist für das Modul Xcos (äquivalent zu Simulink) weniger buggy zum aktuellen Stand als die letzte Version.

Ich habe die Parameter der verschiedenen Modelle in einem Skript (SciNotes in Scilab) gespeichert, dass im Workspace von Scilab geladen werden muss, bevor das Xcos-Modell ausgeführt wird. In den Xcos-Blöcken sind die Variablen aus dem Skript mit ihrem Namen eingetragen. Das bietet den Vorteil im Skript die Variablen zu verändern, was für die gesamten Xcos-Blöcke dann übernommen wird, insbesondere wenn Parameter mehrmals verwendet werden.

 

Digitale Signalverarbeitung

Im Rahmen meiner Arbeit habe ich in der Simulation Frequenzen bis 500Hz für die Schwingungsberuhigung betrachtet. Daraus folgend habe ich die Abtastfrequenz auf 5000Hz festgelegt. Die digitale Signalverarbeitung besteht aus einem analogen Anti-Aliasing-Filter (AAF), einem Analog-Digital-Converter (ADC), einem Prozessor auf dem der Regelalgorithmus ausgeführt wird, einem Digital-Analog-Converter (DAC) und einem analogen Rekonstruktionsfilter (RCF). Die Rolle jeder Komponenten kann im Internet nachgelesen werden, ich werde nachfolgend nur angeben wie ich sie in Xcos modelliert habe.

Das AAF unf RCF habe ich anhand der Übertragungsfunktion im Frequenzbereich eines Tiefpass-Butterworthfilters der zweiten Ordnung modelliert. Die Übertragungsfunktion wird anhand der Funktion zpbutt() in Scilab berechnet, und dann in Xcos mit dem CLR-Block (continous transfer function) implementiert.

Den ADC habe ich mit dem Sample und Hold Block in Xcos modelliert. Dabei habe ich das Quantisierungsrauschen vernachlässigt, das bei der Analog-Digital-Wandlung entsteht. Bei dem gewählten Regler hat es einen geringen Einfluss auf die Reglerperformance. In manchen Fällen ist es jedoch von Belangen das Quantisierungsrauschen zu modellieren.

Den DAC habe ich mit dem Delay-Block 1/z modelliert.

Bild5.1

Abbildung: Xcos-Modell der digitalen Signalverarbeitung

Im Xcos-Modell sieht man drei Blöcke mit abgebildeten Uhr. Anders als in Matlab Simulink muss die zeitliche Abtastung der numerischen Simulation definiert werden und kann nicht automatisch vererbt werden. An dieser Stelle wird von Scilab Enterprises empfohlen die gleiche Uhr für alle Blöcke zu verwenden, sofern eine exakt zeitgleiche Ausführung gefordert wird. In meinem Modell habe ich nur die ADC und DAC mit einer getrennten Uhr ausführen lassen.

Auf den Regler gehe ich weiter unten ein.

 

Reglerfunktionsweise

In der Gesamtsystemsimulation habe ich zwei ähnliche Regelungskonzepte verwendet: die „Broadband feedforward und feedback FXLMS-Regler“. Ich werde nachfolgend die Funktionsweise erklären, die für beide Regler gilt. Die Unterscheidung folgt weiter unten.

Diese Regler ermöglichen eine aktive Gegensteuerung zur gezielten Unterdrückung der Anregungsauswirkung. Sie basieren auf dem Prinzip der destruktiven Interferenz. Es wird anhand einer Information über die Anregung mit dem aktiven System eine Gegenschwingung in das System eingeleitet. Schlussendlich tendieren die resultierenden Schwingungen am System gegen null. In unserem Fall wird in der Entkopplung zwischen Quadrocopter und Kamera, durch den Visaton eine Gegenschwingung eingeleitet, sodass die Kamera nicht schwingt.

 

In dem nachfolgenden Blockschaltbild ist ein aktives Schwingungsminderungssystem mit Broadband FXLMS-Regelung dargestellt:

 

Bild5.2

Abbildung: Blockschaltbild einer Regelung mit einem adaptiven FxLMS-Regler

Ziel der adaptiven Gegensteuerung ist es mit y‘(n) die Antwort d(n) eines Systems (primärer Pfad P(z) – in unserem Fall die Quadrocopterstruktur) auf eine primäre Anregung nachzubilden. Dies erfolgt anhand des digitalen Filters W(z). Über den sekundären Pfad S(z) (enthält unter anderem DAC, RCF und Aktorsystem) wird die modellierte Gegenschwingung -y‘(n) in das System eingeleitet. Das Filter W(z) bildet somit P(z)/S(z) nach, und wird mit der Adaption der Filterkoeffizienten verbessert, bzw. an Veränderungen der Struktur und der Anregung angepasst.

Die Adaption mit dem FxLMS-Algorithmus erfolgt auf Basis des gefilterten Referenzsignals x‘(n) und des gemessenen Ausgangsfehlers e(n). Das Referenzsignal enthält Informationen über die Anregung. Der Ausgangsfehler e(n) enthält eine Information über den aktuellen Zustand des Systems, in unserem Fall die Beschleunigung der Kamera. Somit entspricht das Fehlersignal der Überlagerung der Anregungsauswirkung und der eingeleiteten Gegenschwingung: d(n) – y‘(n) im oben dargestellten Blockschaltbild.  Die Adaption mit dem FxLMS-Algorithmus arbeitet so, dass die mittlere quadratische Abweichung zwischen d und y‘ und somit der Ausgangsfehler e(n) minimiert wird.

Der sekundäre Pfad entspricht der Übertragung vom Ausgangssignal des Reglers y(n) über das Aktorsystem, über die mechanische Strecke, über das Sensorsystem bis hin zum numerischen Wert des Fehlers e(n), wenn keine primäre Anregung am System anliegt und somit der Wert von d(n) null ist. In der Darstellung des Blockschaltbilds wird somit die Operation d(n) – y‘(n) im numerischen Bereich durchgeführt, was die Darstellung vereinfacht. In der Realität erfolgt die Überlagerung beider Signale an der Struktur selbst.

Damit die Eingangssignale der Adaption zeitlich und dynamisch übereinstimmen und somit die Konvergenz des Algorithmus gewährleistet wird, muss das verwendete Referenzsignal mit einer identifizierten Übertragung des sekundären Pfads S(z)_^ gefiltert werden. Der sekundäre Pfad wird offline vor dem Betrieb der Regelung mit einem digitalen Filter identifiziert.

 

Unterscheidung Feedback, Feedforward- Reglervarianten

Die zwei in meiner Arbeit implementierten Varianten Feedback und Feedforward unterscheiden sich in der Bildung des Referenzsignals x(n). In der Feedback – Variante wird nur ein Signal gemessen – das Fehlersignal e(n). Das Referenzsignal wird intern berechnet. In der Feedforward-Variante wird ein zusätzliches Signal gemessen, das die Information über die Anregung enthält, und als Referenzsignal dient. Der Feedback- hat den Vorteil nur einen Sensor zu benötigen und das System zu vereinfachen, ist dafür aber nicht so robust wie der Feedforward-Regler.

Das nachfolgende Blockschaltbild stellt das System nochmal mit der Feedback-Variante dar.

Bild5.3

Abbildung: Blockschaltbild einer Regelung mit einem adaptiven Feedback FxLMS-regler

Diese Variante basiert auf der Tatsache, dass in d(n) eine Information über die Anregung enthalten ist. Im gemessenen Signal e(n) ist eine Überlagerung von d(n) und vom aktiven Anteil. In der Feedback-Variante wird x(n)=d(n) angenommen und der Regler entfernt den aktiven Anteil aus dem Fehlersignal e(n). Aus dem Blockschaltbild kommt folgender mathematischer Zusammenhang hervor: d(n) =e(n)+y‘(n). Um eine Annäherung an diese Größe zu berechnen wird y‘(n) aus dem identifizierten sekundären Pfad und dem Ausgang y(n) des Reglers in jedem Abtastschritt geschätzt. Somit erhält man

Gleichung5.1

Adaption im Regler

Die Adaptions-Gleichung die ich implementiert habe, kann durch folgenden Zusammenhang in der Vektorschreibweise zu den diskreten Abtastzeitpunkten beschrieben werden:

Gleichung5.2

mit dem Leakage-Faktor ν und der Schrittweite μ. Ich habe die Normalized-Variante zur Schrittweitensteuerung und die Leaky-Variante zur Begrenzung der Ausgangsenergie implementiert.

 

Der Normalized LMS-Algorithmus optimiert die Konvergenzgeschwindigkeit, wobei die Gesamtperformance des Systems erhalten bleibt. Die Schrittweite wird folgendermaßen berechnet:

Gleichung5.3

mit der normierten Schrittweite (in der Implementierung festgelegt), der Filterordnung N von W(z) und der Schätzung der Leistung des Referenzsignals Px(n)_^ zum Zeitpunkt n. Die Leistung wird anhand der Methode mit einem exponentiellen Zeitfenster geschätzt:

Gleichung5.4

mit dem Glättungsparameter β, der als die entsprechende Zeitfensterlänge des exponentiellen Zeifensters M=1/β interpretiert werden kann (in der Implementierung festgelegt). Der Einfluss der Fensterlänge M  ist folgender: Wenn M  lang ist, erfolgt die Schätzung der mittleren Leistung über einen längeren Zeitraum und somit genauer, aber das Filter kann nicht auf schnelle Veränderungen der Leistung des Referenzsignals reagieren. Somit wird die Fensterlänge abhängig von der Art der Anregung gewählt (stationär oder eher instationär). Weiterhin ist die Anfangsbedingung Px(0)_^ zu definieren.

Die Leaky-Variante verbessert die Stabilität indem die langfristige Divergenz der Filterkoeffizienten verhindert wird. Durch den Leakage-Faktor ν ist der Regler robuster: beispielsweise bei stochastisch leistungsstarkem Referenzsignal wird die Regelung nicht unbegrenzt hochgefahren, sondern „vergisst“ schneller die stochastisch hohe Anregung. Allerdings wird die erreichbare Performance des Reglers verschlechtert: wenn die optimalen Koeffizienten erreicht werden, sollte im nächsten Schritt keine Adaption stattfinden, e(n) ist null und somit auch der rechte Teil der Addition in der Adaptionsgleichung. Durch den Leakage-Faktor werden die Filterkoeffizienten jedoch verändert und das aktive System selbst führt einen Fehler ins System ein. Somit bewegen sich die Filterkoeffizienten in einem Bereich um den optimalen Filter bestimmt durch den Leakage Faktor, aber erreichen es nie langfristig.

Der Leakage-Faktor wird mit dem Gewichtungsfaktor  γ C [0;1] berechnet:

Gleichung5.5

Somit wird der Leakage-Faktor zusätzlich an die Leistung des Referenzsignals (in der Schrittweite enthalten beim Normalized-Algorithmus) angepasst, um den oben genannten negativen Effekt zu reduzieren.

 

Realisierung des Reglers in Xcos

Der Regler wurde anhand der oben genannten Vektoroperationen in Xcos realisiert. Zunächst wurde ein Versuch gestartet den Regler mit Funktionen aus dem Workspace zu realisieren. Der Regler hat funktioniert jedoch mit erheblich langen Berechnungszeiten. Deshalb empfehle ich den Regler mit den Matrizenoperationen zu realisieren. Die zugehörigen Xcos-Modelle werden in Zukunft auch im Wiki auf der OpenAdaptronik-Seite runterzuladen sein.

Auf die Implementierung in Xcos werde ich an dieser Stelle nicht weiter eingehen, erst später im Wiki dann. Das einzige was eventuell nicht so trivial ist ohne lange Nachdenkzeit ist die Speicherung der Zeiteinträge des Referenzsignals in einem Vektor. In der Tat muss für die Filterung mit dem identifizierten sekundären Pfad, mit dem Filter W(z) und in der Adaption ein Vektor mit den letzten N abgetasteten Werte des Referenzsignals erstellt werden, wobei N die Lange des entsprechenden digitalen Filters ist.

In Simulink gibt es dafür das Shift Register, in Xcos gibt es keinen vergleichbaren Block. Ich habe es anhand eines diskreten State-Space-Blocks mit der folgenden Rechnung realisiert:

Gleichung5.6

Gleichung5.7

Wobei das fettgedruckte x dem Vektor mit den skalaren Einträgen von x (t_i) entspricht.

Die zugehörigen Dateien werden in Zukunft auch im Wiki auf der OpenAdaptronik-Seite verfügbar sein.

 

Systemidentifikation mit einem digitalen Filter

In den oben eingeführten Reglern kommt ein digitales Filter  zum Einsatz. Es enthält die dynamischen Eigenschaften des identifizierten sekundären Pfads. Dieser wird vorab des Betriebs des Reglers identifiziert. Die Identifikation basiert auf dem gleichen Prinzip wie der Regler. Diese Identifikationsmethode wurde ebenfalls für die Anregungsmodellierung verwendet (siehe Blogbeitrag 3).

Bild5.4

Abbildung: Blockschaltbild der offline Systemidentifikation mit dem LMS-algorithmus

Bei breitbandiger Anregung (z.B. weißes Rauschen) entspricht das Signal y(n) der Impulsantwort des zu identifizierenden sekundären Pfads. Mit dem Filter S(z)_^ der Ordnung N soll die Annäherung  an das Signal y(n) generiert werden, sodass der Ausgangsfehler e(n) minimiert wird.

Wenn das optimale Filter mit der Adaption erreicht wird, gilt y(n)=y(n)_^. Und somit kann in der Matrixschreibweise folgende Gleichung für die Anregung x aufgestellt werden:

Gleichung5.8

Mit folgenden Vektoren und der Matrix X für ein Filter der Ordnung N und ein Anregungssignal x der Länge n:

Gleichung5.9

Nach Inversenbildung erhält man folgenden Zusammenhang um das optimal identifizierte Filter zu berechnen:

Gleichung5.10

 

 

 

So das war es erstmal für heute. Beim nächsten Mal geht es weiter mit der Implementierung des aktiven Systems in der Gesamtsystemsimulation!

 

Grüße,

Nicolas Baleynaud


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.