|
|
FFT und anschließender Bandpassfilter |
|
GoldStandard |
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 27.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.07.2015, 10:16
Titel: FFT und anschließender Bandpassfilter
|
|
Guten Tag zusammen,
durch eine FFT erhalte ich in Simulink mein Frequenzspektrum, da der ganze Prozess online und ich Echtzeit ablaufen soll, habe ich zwei Fragen und hoffe ihr könnt mir diese beantworten.
1.) Wie erhalte ich nach der FFT die dominante Frequenz (erste Eigenfrequenz) und kann mir diese z.B. ausgeben lassen?
2.) Diese Frequenz will ich anschließend bandpassfiltern, mit Matlab und dem fdatool habe ich das ganze schon offline probiert und es hat funktioniert. Nur wie bekomme ich in Simulink eine Prozesskette gebastelt? Blöcke dafür habe ich nicht gefunden, muss ich mir den Bandpass mit z^-1 Blöcken selbst zusammenbauen? Das wäre glaube ich nämlich ein ziemlich großer Aufwand, da gute Bandpassfilter eine sehr große Ordnung besitzen.
Vielen Dank für kommende Anregungen
Grüße
|
|
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2015, 11:13
Titel:
|
|
Es gibt einen Block, der "Discrete Filter" heißt. Benutz doch einfach den...
|
|
|
GoldStandard |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 27.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2015, 15:03
Titel:
|
|
hast du mir auch eine Lösung wie ich den Maximalwert herausbekomme?
also nach den Blöcken "FFT" --> "abs" --> "Vektor Scope (Frequency)" hätte ich gerne die dominante Eigenfrequenz ausgelesen, aber die Blöcke "minmax" o.ä. scheinen da nicht zu funktionieren.
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2015, 15:12
Titel:
|
|
Ne, das weiß ich so spontan nicht, weil ich Lösungen, die darauf setzen, dass man eine FFT in Echtzeit berechnen muss -zumindest in der Regelungstechnik- meistens nicht so sonderlich hübsch finde.
Falls Du nicht sehr an der Lösung hängst bzw. jemand anderes unbedingt darauf besteht: schon mal über den Einsatz eines Phasenregelkreises nachgedacht?
|
|
|
GoldStandard |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 27.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2015, 15:29
Titel:
|
|
Diesen Regelkreis habe ich davor auch noch nie gesehen, sehr schön. Aber so weit ich das auf die schnelle beurteilen kann, müsste mir mein signal (in meinem fall die unerwünschte schwingung meines bauteils) davor schon bewusst sein.
Mein Problem ist jedoch, dass durch Höhenänderung einer Masse, sich die Eigenfrequenz während des Bewegungsvorganges verändert und auch eine Übertragungsfunktion durch unbekannte Parameter nicht erstellt werden kann, daher dachte ich an eine Regelung mittels Gain Scheduling.
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2015, 15:52
Titel:
|
|
|
|
|
Ich mag Dein Problem :D
Wenn Dein Messsignal halbwegs hübsch ist und sich nicht aus all zu vielen Schwingungen ähnlicher Amplituden zusammensetzt, findet eine PLL die Frequenz UND Phasenlage recht zuverlässig. Besonders schön: da die Phasenlage bekannt ist, kannst Du Dir die bei Bedarf richtig hindrehen, wenn Du zum Beispiel eine super langsame Messwerterfassung hast oder Dein Stellglied zu langsam ist. Das artet dann aber schnell in sehr spezifischen Bastellösungen aus... Blöd bei der Sache: stationäre Genauigkeit bzw. ein stationärer Schwingungszustand wird womöglich nicht erreicht, weil die PLL ihren lock verlieren kann und die Schwingung dann wieder aufklingt, bis die PLL sich wieder gefangen hat. Dem kann man ein bisschen entgegenwirken, wenn das Messsignal mit einem Dynamikkompressor (vgl. Audiotechnik) vorbehandelt.
Gain scheduling zähle ich persönlich auch zu den spezifischen Bastellösungen, ich kenne aber einige Menschen, die laut protestieren, wenn ich das behaupte ;) Erfahrungsgemäß ist es wenig robust, hängt aber sicher vom Anwendungsfall ab.
Am schönsten wäre es natürlich, wenn Du die Höhe messen könntest und jeder Höhe eine Eigenfrequenz zuordnest und die passenden Parameter daraus ausrechnest. Das nennt sich gesteuerte Adaption, wenn ich mich recht erinnere. Geht aber wahrscheinlich nicht, sonst würdest Du es vermutlich schon machen ;)
Vielleicht wäre auch ein MRAS-Regelkreis was für Dich? Da hat man ein parallel laufendes, adaptives Modell, das in Echtzeit so angepasst wird, dass es mit dem zusammenpasst, was man so messen kann. Damit sind dann die Modellparameter bekannt und da das adaptive Modell ohnehin mitläuft, kennt man auch alle Zustände und kann sie dem Regler zustecken... Das wird zum Beispiel für die sensorlose Schwingungsdämpfung von mit elektrischen Antrieben benutzt, setzt aber ein recht gutes Modell des Systems voraus, das man ja auch nicht immer hat.
|
|
|
GoldStandard |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 27.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2015, 16:23
Titel:
|
|
|
|
|
das freut mich dass es dir auch gefällt.
Durch einen Beschleunigungssensor an der schwingenden Struktur kann ich tatsächlich auch die genaue Lage der Masse detektieren, Problem nur, diese ändert sich auch in jedem neuen Bewegungsablauf.
Daher habe ich mir auch schon überlegt, wie ich in Abhängigkeit der Lage und der neuen Masse meine Eigenfrequenzen berechnen kann.
Im Anhang habe ich dir mal meine Formeln dazu aufgeschrieben.
Mein Ziel war es eigentlich eine Eigenfrequenz (f_o) zu messen, mit der veränderlichen Masse (m_p), in einer bestimmten Höhe (L_p) und die neue Eigenfrequenz (f_1) dann mit der alten Eigenfrequenz, Differenzmasse und Höhe zu bestimmen[f_1(f_o,delta-m_p,L_p)]. Jedoch weis ich nicht wie ich das aus einer der beiden möglichen Formeln bewerkstelligen kann. (Die Indizies L und P stehen für einen dünnen Stab und für eine Punktmasse)
Eine Übertragungsfunktion habe ich eigentlich auch, daher würde eine "Model Reference Adaptive Control" in Frage kommen, nur weis ich nicht genau wie ich diese umsetzen kann, denn was ich bisher gesehen habe, braucht man einen Anfangszustand und aus diesem wird dann in jedem Schritt das Modell genauers angepasst, aber so einen Anfangszustand habe ich ja leider nicht.
Beschreibung: |
|
Download |
Dateiname: |
Frequenzberechnung.pdf |
Dateigröße: |
200.24 KB |
Heruntergeladen: |
471 mal |
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2015, 16:45
Titel:
|
|
|
|
|
Der Hinweis mit der veränderlichen Masse ist neu... Ist das ein Weltraumlift oder gar eine Rakete an einem elastischen Stab? :) Wenn Höhe und Masse bekannt sind, kannst Du die Eigenfrequenz doch einfach mit der Formel ausrechnen. Oder ist die Masse nun wirklich unbekannt und auch nicht irgendwie abschätzbar?
Dann könnte der zu adaptierende Wert in einem MRAS-Modell die Masse sein und als bekannter Eingangswert geht die aktuelle Lage rein. Der Regler würde dann so lange an der Masse drehen, bis das Modell so schwingt, wie das gemessene System. Wobei irgendwie auch noch die Anregung mit rein muss, nur aus Langeweile fängt das Modell ja auch nicht zu schwingen an. Knifflig...
Für die Umsetzung hilft Dir die Übertragungsfunktion nur wenig, da Du da nicht in der laufenden Simulation an den Parametern rumdrehen kannst. Schön wäre da ein diskret aus Integratoren und Gain-Blöcken aufgebautes Modell. Aber bevor Du Dir die Arbeit machst, sollte das Konzept grundsätzlich gut durchdacht sein, nicht, dass alles für die Katz war...
Dein Ansatz müsste an sich klappen, könnte aber in einer wirklich langen Formel enden. Wobei Du die konstanten Parameter ja gleich mit ihren Zahlenwerten einsetzen kannst, dann wird es etwas weniger lang. Aber da bleibt dann ja auch das Problem bestehen, dass Du eine Eigenfrequenz kennen musst. Und eventuell hast Du im echten Leben dann auch mit Fehlerfortpflanzung zu kämpfen, weil Du ja immer ausgehend von einem potenziell falschen Wert den neuen Wert berechnest und mit der Zeit immer fälscher wirst.
|
|
|
GoldStandard |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 27.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.07.2015, 18:10
Titel:
|
|
Hey da bin ich wieder
ich habe mir eine neue Methode überlegt und zwar wollte ich die Eigenfrequenzen online abschätzen mit dem RLS- Algorithmus.
Die Übertragungsfunktion besitze ich ja und Werte dafür habe ich mir jetzt einfach mal ausgedacht um auch ein y zu generieren.
Leider ist die Eigenfrequenz des Modells, das ich mit dem RLS- Algorithmus schätze komplett unterschiedlich zu der im Vorfeld berechneten Eigenfrequenz. Ist das mein Fehler oder bleibt die Eigenfrequenz eben nicht mehr bestanden durch den RLS ?
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.07.2015, 18:34
Titel:
|
|
Wenn die Parameter, die dein RLS ausrechnet, nicht die Parameter des zu identifizierenden Systems sind, wäre mein Tipp, dass das RLS nicht funktioniert :)
Wenn das RLS richtig funktioniert, dann sind auch die Eigenwerte beider Modelle gleich. Die ergeben sich ja unmittelbar aus den Parametern.
Hast Du denn zwei mal geprüft, dass Du das richtig implementiert hast?
|
|
|
GoldStandard |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 27.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 11:32
Titel:
|
|
Hey,
also der RLS Block von Simulink sollte ja schon funktionieren, sonst bin ich so vorgegangen wie im Beispiel:
- u und y mit 'zoh' diskretisiert, zur Simulation von y habe ich in meine Übertragungsfunktion, ausgedachte Werte eingesetzt um auf ca 2Hz Eigenfrequenz zu kommen.
- y dann direkt in den RLS Block geschleift
- für den Regressor meine z-Übertragungsfunktion auf y_n umgestellt
Zur Veranschaulichung ein kleines Bild von Simulink im Anhang von y_n.
- anschließend die Parameter des RLS-Blocks mit 'yout' in den workspace gebracht und dort mit 'd2c' wieder zurücktransformiert und die Eigenfrequenz berechnet, die jetzt ca 250 mal so groß war wie zuvor ...
ist hier ein offensichtlicher Fehler zu erkennen?
Beschreibung: |
|
Download |
Dateiname: |
Regressor.jpg |
Dateigröße: |
10.57 KB |
Heruntergeladen: |
413 mal |
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 11:42
Titel:
|
|
Brr, fertige Blöcke ;)
Der einfachste Fehler, der mir gerade einfällt, wäre, dass Du beim diskretisieren aus versehen die falsche Abtastzeit übergeben hast.
|
|
|
GoldStandard |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 27.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.07.2015, 09:00
Titel:
|
|
also meiner Meinung nach liegt hier ein Problem vor:
Es kommt die Warnung: "The model order was increased to handle real negative poles."
Daraufhin kommt als Eigenwert eigentlich immer 3.1416*10^3 also pi*10^3, da frage ich mich schon wie das sein kann, scheint iwie mit der Abtastzeit verknüpft zu sein. Die anderen Konvertierungsmethoden habe ich, wie im Code schon beschrieben, ohne Erfolg getestet.
Verändere ich den jeweils ersten Wert von num2 und denum2 verändert sich nur der Realteil der Eigenwerte, genauso wie wenn ich jeweils den letzten Wert verändere.
Wie könnte ich mein Problem beheben?
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.07.2015, 09:17
Titel:
|
|
Dein System hat einen instabilen Pol jenseits der Nyquist-Frequenz (Pol: 519Hz, Nyquist-Frequenz: 500Hz). Das ist nicht so gut...
Fragen, die sich stellen:
- Warum kommt da so ein hochfrequenter Eigenwert raus?
- Darf/soll der instabil sein? Soll überhaupt irgendein Eigenwert instabil sein?
Ich würde sagen, das Problem ist, dass dieser RLS-Block nicht das tut, was Du erwartest. Entweder irgendwo auf der Welt gibt es eine andere Konvention, was RLS ist oder Du hast Dich bei der Benutzung irgendwie vertan.
|
|
|
GoldStandard |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 27.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.07.2015, 12:04
Titel:
|
|
|
|
|
Okay, jetzt habe ich mal versucht, ein Beispiel des RLS nachzustellen, das Beispiel ist auf Seite 9 des PDF´s zu finden. Ich habe noch zwei Sachen verändert:
- rechts oben habe ich noch die Konstante Matrix "adg" hinzugefügt, da sonst 0 bei den Parametern herauskommt, ist im Algorithmus auch so vorgesehen, dass hier noch ein Wert multipliziert wird, weis nicht warum der im Beispiel weggelassen wurde
- das Product4 sollte meiner Meinung nach eine Matrix-Multiplikation sein, dann kommt aber komischerweise bei den Parameter am Ende nur ein Wert bei raus, im Beispiel ist hier leider nur ein "Block mit Sprechblase" zu sehen, was auch immer das bedeuten mag
Als Ergebnis sollten nun, wie im PDF aufgeführt, exakt die Vorfaktoren herauskommen, die in der Übertragungsfunktion aufgeführt sind, tun sie leider aber nicht.
Siehst du den Fehler?
Beschreibung: |
|
Download |
Dateiname: |
RLS_aus_Beispiel.slx |
Dateigröße: |
21.06 KB |
Heruntergeladen: |
357 mal |
Beschreibung: |
|
Download |
Dateiname: |
RLS_Implementierung.pdf |
Dateigröße: |
179.11 KB |
Heruntergeladen: |
2012 mal |
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|