|
|
Phasengang in Simulink bestimmen |
|
DanIng |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 10.05.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.05.2010, 13:01
Titel:
|
|
Manchmal scheitert es an den trivialen Dingen des Lebens . . . ich hab doch tatsächlich in einem der beiden PT1 glieder den anfangswert vergessen.
Jetzt funktioniert es!
Danke nochmal!
|
|
|
|
|
DanIng |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 10.05.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.05.2010, 17:39
Titel:
|
|
Hallo,
also ertsmal Danke, dass du mich so fleissig unterstützt.
Das ganze funktioniert jetzt und die errechnete Phasenverschiebung ist jetzt auch bei meinen Testsignalen mit omega = 1 rad/s genau da wo ich die Signale vorher eingestellt habe.
Jetzt will ich das ganze ja zu einer Impedanzmessung an batterien benutzen und schon gibt es wieder Probleme.
Das ganze soll ja dann unter verschiedenen Frequenzen (Bode Diagramm !!) durchlaufen und wenn ich das Programm mit verschiedenen Frequenzen durchteste, bis hinein in den kHz Bereich kalppts schon wieder nicht mehr und es kommen völlig danebene Werte raus.
Jetzt mus ich nochmal nachfragen: Wieso brauchst du denn zur Mittelwertbildung PT1 Glieder, gibt es da keine Alternative ??
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.05.2010, 14:52
Titel:
|
|
|
|
|
Ich nutze PT1-Glieder, weil es am einfachsten ist. In meinem Fall war es auch völlig ausreichend, weil ich die Frequenz nicht großartig verändert habe. Will man die Frequenz über mehrere Größenordnungen durchwobbeln ist das natürlich ziemlich unpraktisch mit dem PT1.
Wenn die Signalperiode (bzw. Frequenz) exakt bekannt ist, kannst Du im Prinzip auch ein, zwei Perioden lang Werte aufnehmen und daraus den Mittelwert bilden. Wichtig ist natürlich, dass Du genau ein ganzzahliges Vielfaches der Periode aufzeichnest. Aufnehmen könntest Du beispielsweise über einen matlab-function-block, der einen vektor der Länge periodenlänge/samplezeit mit Werten enthält. Eingangssignal ist dann der vektor aus dem vorherigen Rechenschritt, der Index, an dem der letzte wert im vorigen Schritt geschrieben wurde und das eigentliche Eingangssignal. Ausgangsgrößen sind der Vektor, sein Mittelwert und der Schreib-Index. Gibt aber sicherlich auch elegantere Methoden. Irgendwie musste dann auch noch die Anzahl, der aufzuzeichnenden Samples mit reinbringen (in Form der Frequenz).
Verfahren zur automatischen Frequenzmessung gibt es viele -- aber alle haben so ihre Tücken und Gemeinheiten... In Deinem Fall ist das aber sowieso uninteressant, da Du die Frequenz ja selbst vorgibst und damit kennst.
|
|
|
DanIng |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 10.05.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.05.2010, 13:07
Titel:
|
|
Noch mal vielen Dank für die Anregungen!
Genau! Aber wenn ich eine spezielle Frequenz einstelle, dann kann ich mit deinen Lösungsansätzen sehr gute Ergebnisse bekommen, das heißt ich kann damit händisch schon mal z.B. ne sehr hohe oder niedrige Frequenz messen und sehe so schon mal tendenziell, bei welchen Frequenzen meine Testbatterien eher ein rein ohmsches Verhalten haben und ab wann mit einem komplexen Modell zu arbeiten ist.
Zur Automatisierung der Messung über viele Frequenzen hinweg zur automatischen Aufzeichnung eines Bode Diagramms, werde ich wohl oder übel tiefer auch in Matlab einsteigen müssen, ich probiere mal mit deinen neuen Ansätzen ein wenig herum.
Falls noch jemand spontan ne simpler umzusetzende Idee hat, wäre ich dankbar! Dazu sei noch gesagt: Ja ich kenne die Frequenz exakt, weil ich sie über einen Vektor vorgebe.
Ansonsten muss ich mir mal auch ein wenig Literatur besorgen, um tiefer in die Geheimnisse von Matlab einzusteigen
|
|
|
DanIng |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 10.05.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.06.2010, 20:19
Titel:
|
|
Leider nochmal ne Frage:
des ganze basiert ja darauf, dass der Zusammenhang zwischen dem Effektivwert der Differenz und der Phase eine Sinusfunktion mit Amplitude Wurzel aus 2 ist.
Wenn ich jetzt mein Ausgabesignal mit einem Offset komplett über die 0 hieve, besteht dieser Zusammenhang dann noch weiter?
Zumindestens meine Testergebnisse lassen es für diesen Fall bezweifeln
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.06.2010, 20:29
Titel:
|
|
Ich schätze, die Zweifel sind berechtigt... Für den seltenen Fall, dass Du beliebig lange, stationäre Messungen machen kannst, könntest Du den Offset aber vor der Phasenmessung rausfiltern, dann klappt es wieder.
Einfach das Signal auf einen Tiefpass (PT1) mit großer Zeitkonstante (5...10*T) geben und das Ergebnis (=Mittelwert) vom Eingangssignal abziehen. Das Ergebnis dieser Differenz packst Du dann auf die Phasenmessung.
Ist denn die Amplitude beider Signale gleich? Das könnte auch zu Problemen führen, wenn dem nicht so ist.
|
|
|
DanIng |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 10.05.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.06.2010, 15:03
Titel:
|
|
Hallo,
nocheinmal vielen Dank für die Hilfe!
Ich habe mittlerweile ein automatisiertes Programm erstellt, dass selbständig Bode Diagramme erstellt und das klappt weitgehend problemlos!
Heute hatte ich noch ein Gespräch mit meinem Professor, und bei der Erklärung der Phasenmessung boin ich dann doch noch ein bisschen ins stolpern gekommen . . . also mir ist fast alles klar . . . wenn du mir jetzt noch erklären könntest, warum zwischen dem Effektivwert der Differenz und dem Phasenwinkel der Zusammenhang mit der Sinusfunktion mit Amplitude Wurzel2 ist, dann hätte ich es endgültig verstanden und das Projekt wäre dann damit abgeschlossen.
Vielen Dank!
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.06.2010, 15:27
Titel:
|
|
Hi, ich versuche nochmal, drüber nachzudenken - schätze, dass ich morgen mal die Zeit dazu finde. Wenn nicht, schreib einfach nochmal hier rein oder ne PN und erinner mich dran...
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.06.2010, 13:08
Titel:
|
|
|
|
|
So, bin nun endlich mal dazugekommen, das nicht nur durch ausprobieren herzuleiten. Ergebnis folgt:
Zunächst mal Matlab das Ergebnis der Effektivwertbildung berechnen lassen. Die Integration erfolgt über eine Periode (Parameter int(ausdruck, beginn, ende) also hier int(..., 0, T)).
Ergebnis, falls die symbolic toolbox nicht zur Hand ist: effektivwert = sqrt(1-cos(phi))
Offensichtlich ist dies für konstante phi ein konstanter Wert. Für phi=pi (180°) nimmt der Ausdruck ein Maximum an, nämlich wurzel 2.
Der Kurvenverlauf sieht so aus:
Jetzt kommt der schöne Teil, wo meine Tutoren und Dozenten immer sagten: "Wie ja allgemein bekannt ist, gilt..." und dann folgte immer eines oder mehrere dieser wirren Sinus-Cosinus-Identitäts-Theoreme, die einem keine Sau erklären oder herleiten kann ;)
Außerdem muss einem auffallen, dass in der Abbildung über 2*pi nur ein halber Sinus dargestellt wird. Wenn man sowas sieht, muss man mehr oder weniger zwanghaft eine Substitution vornehmen: phi := 2*phi_stern
Damit erhalten wir für unsere Gleichung des Effektivwerts folgendes: effektivwert = sqrt(1-cos(phi)) = sqrt(1-cos(2*phi_stern))
Nun schütteln wir uns das hier aus dem Ärmel ("Wie sie alle wissen..." ;)): cos(2*x) = 1 - 2*sin^2(x)
Ergibt auf unser Problem angewandt also: cos(phi) = 1 - 2*sin^2(phi/2)
Mit phi := 2*phi_stern bzw. phi/2 = phi_stern erhält man: cos(2*phi_stern) = 1 - 2*sin^2(phi/2) = 1 - 2*sin^2(phi_stern)
Anschließendes Einsetzen und vereinfachen ergibt:
effektivwert = sqrt(1- (1 - 2*sin^2(phi_stern)))
effektivwert = sqrt(2*sin^2(phi_stern))
effektivwert = sqrt(2) * sin(phi_stern)
Durch Rücksubstitution mit phi_stern = phi/2 erhält man:
effektivwert = sqrt(2) * sin(phi/2)
Das ganze noch nach phi auflösen
Ergebnis: phi = 2*asin(1/2*effektivwert*2^(1/2))
Oder schöner geschrieben
phi = 2 * asin(sqrt(2)/2 * effektivwert)
Oder mit nicht-rationalem Nenner, um auf das zu kommen, was ich oben in meinem Modell gemacht habe: phi = 2*asin(1/sqrt(2) * effektivwert)
Und schon hat man das Verfahren vollständig mathematisch hergeleitet - war doch ganz einfach ;)
Würde mich mal interessieren, ob sich das schonmal jemand vor mir ausgedacht hat und ob das schon irgendwo veröffentlicht wurde (außer hier im Forum).
|
|
|
|
Gehe zu Seite Zurück 1, 2
|
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.
|
|