WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

FFT und anschließender Bandpassfilter

 

GoldStandard
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2015, 10:16     Titel: FFT und anschließender Bandpassfilter
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2015, 11:13     Titel:
  Antworten mit Zitat      
Es gibt einen Block, der "Discrete Filter" heißt. Benutz doch einfach den...
Private Nachricht senden Benutzer-Profile anzeigen
 
GoldStandard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 15:03     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 15:12     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
GoldStandard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 15:29     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 15:52     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
GoldStandard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 16:23     Titel:
  Antworten mit Zitat      
Very Happy 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.

Frequenzberechnung.pdf
 Beschreibung:

Download
 Dateiname:  Frequenzberechnung.pdf
 Dateigröße:  200.24 KB
 Heruntergeladen:  471 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2015, 16:45     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
GoldStandard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2015, 18:10     Titel:
  Antworten mit Zitat      
Hey da bin ich wieder Smile

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 ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2015, 18:34     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
GoldStandard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 11:32     Titel:
  Antworten mit Zitat      
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.

Code:

% Die Übertragungsfunktion hat folgende Form:
G(s) = (a/d)*s²/(s² + (b/d)*s + (c/d))
 


- y dann direkt in den RLS Block geschleift
- für den Regressor meine z-Übertragungsfunktion auf y_n umgestellt

Code:

% Übertragungsfunktion mit c2d transformiert, wobei a bis e nicht dieselben Parameter wie oben darstellen
G(z) = Y(z)/U(z) =  (a*z² - b*z + c)/(z² - d*z + e)
       = Y(z^-1)/U(z^-1) = (a - b*z^-1 + c*z^-2)/(1 - d*z^-1 +e*z^-2)

% anschließend auf y_n gebracht:
y_n = a*u_n - b*u_n-1 + c*u_n-2 + d*y_n-1 - e*y_n-2
 


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?

Regressor.jpg
 Beschreibung:

Download
 Dateiname:  Regressor.jpg
 Dateigröße:  10.57 KB
 Heruntergeladen:  413 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 11:42     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
GoldStandard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2015, 09:00     Titel:
  Antworten mit Zitat      
also meiner Meinung nach liegt hier ein Problem vor:

Code:

% Hier übergebe ich die Parameter des RLS und berechne daraus wieder die Eigenfrequenz


Ts = 0.001;
num2 = [0.815 -1.63 0.81];
% Die erste Stelle von denum2 ist immer 1 (=y_n)
denum2 = [1 2 -1];
sysd2 = tf(num2,denum2,Ts);
% Bei sysc2 anstatt von 'zoh' noch 'tustin', 'matched' und 'foh' ausprobiert ohne Erfolg
sysc2 = d2c(sysd2,'zoh');
Eigenwerte2 = eig(sysc2)
Eigenfrequenz2 = abs(imag(Eigenwerte2(1))/(2*pi));
 


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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2015, 09:17     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
GoldStandard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2015, 12:04     Titel:
  Antworten mit Zitat      
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?

RLS_aus_Beispiel.slx
 Beschreibung:

Download
 Dateiname:  RLS_aus_Beispiel.slx
 Dateigröße:  21.06 KB
 Heruntergeladen:  357 mal
RLS_Implementierung.pdf
 Beschreibung:

Download
 Dateiname:  RLS_Implementierung.pdf
 Dateigröße:  179.11 KB
 Heruntergeladen:  2012 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.