Matlab Sprungantwort Fitting

Gast #253344
Lesenswert?

Hallo,

ich suche nach einer Möglichkeit die Sprungantwort eines Systems
aufzuzeichnen, in meinen PC zu schieben und mittels Matlab die
Übertragungsfunktion bestimmen zu lassen.

Mit der ermittelten Übertragungsfunktion kann man dann ideal Regler
etc. auslegen.

Vielleicht kennt Ihr ja einen guten Ansatz...

Sebastian
#253346
Lesenswert?

@Sebi : Wieso so kompliziert. Lass Dir die Kurve anzeigen und wende
irgendein graphisches Verfahren zur Regler-Einstellung an.

Das gilt aber nur, wenn Du eben "bloß" einen Regler entwerfen
willst.

Wenn Du wirklich einen Übertragungsfunktion brauchst, musst Du erst mal
erzählen, welche Toolboxen Du zur Verfügung hast. Das macht einen
Unterschied ! ;-)
Wenn Du mehr Hilfe möchtest, dann kannst Du ja auch mal erzählen, von
welchem Typ Dein System ist bzw. was dein System ist (wenn Du den Typ
nicht näher spezifizieren kannst).

MfG, Daniel
Gast #253347
Lesenswert?

Hallo,

ich möchte einen Strom in einem linearen MOSFET digital regeln. Dafür
wäre die genaue Übertragungsfunktion sehr gut. Nur so kann man exakt
die Pole und Nullstellen....

Toolboxen für Matlab habe ich noch keine. Aber die kann man sich ja
kaufen. Bzw. eine 30 Tage Testversion ziehen.

MfG,
Sebi
Gast #253348
Lesenswert?

Hallo,
ich werd dir morgen ein paar m-files hier rein stellen die ich dazu mal
geschrieben habe, komm leider heute nicht mehr an meinen Rechner. Die
System Identification Toolbox kann man sich meiner Meinung nach
schenken, mit den m-files bekomm ich genauso gute Ergebnisse, außerdem
sollten die auch unter Octave laufen. Eigentlich ist das sogar eine
Frechheit, was Mathworks sich für diese Toolbox fragt. Die eigentlichen
Algorithmen sind zwar ziemlich kompliziert aber lange bekannt und leicht
zu implementieren. Mathworks hat da nur ein paar Abfragen eingebaut um
das ganze DAU tauglich zu machen und ein scheußliches GUI
drumrumgebastelt, welches man besser erst gar nicht benutzt.
Falls ichs vergessen sollte: mail@thomas-winkel.de
Gruß,
Thomas
Gast #253351
Lesenswert?

Hi Alex,

danke für das PDF.

Hast Du noch einen guten Tip, wie ich die Sensor-Daten am einfachsten
in meinen PC stopfen kann. Es gibt doch bestimmt eine Hardware-
Schnittstelle zum PC die dann auch gleich mit Matlab verbunden ist....

Vielen Dank,
Sebi
Gast #253353
Lesenswert?

Hallo Zusammen,
hier die versprochenen Dateien:
lls.m der eigentliche identification Algorithmus (linear least
squares)
iae.m Fehlerkriterium (integral of absolute error) je kleiner desto
besser
rt2.m noch ein Fehlerkriterium je 1ser desto besser
identsys.m hab ich mal für ne spezielle Anwendung geschrieben, gucks
dir einfach mal an
umv1_.mat ein Datensatz aus einem reellen System zum testen

Alles ins Matlab work Verzeichniss entpacken, dann:
>> load umv1_
>> sys=identsys(umv1_)
Region: 100:10000
Delay: 1
>> step(sys)

Ach ja, d2c() macht dir ne Laplace Übertragungsfunktion draus (>> help
d2c).

Gruß,
Thomas
Angehängte Dateien:
Gast #253355
Lesenswert?

Hallo,
hab dein Programm ausprobiert, funktioniert soweit prima, danke dafür!
Nur einige Datensätze, speziell von schwach gedämpften Systemen kann er
bei mir nicht annähern, egal was für eine Ordnung ich einstelle. Der
macht dann meißtens eine e-Kurve draus die im Steaty State
übereinstimmt, oder aber ein instabiles System. Gibts dafür eine
Lösung?

Markus
Gast #253356
Lesenswert?

ja, das ist ein Problem von reellen Meßdaten. Diese sind oft verrauscht,
nicht immer gleichzeitig aufgenommen oder einfach zu schnell abgetastet.
Oft hilft filtern oder downsamplen. Schau mal in "identsys.m", da sind
einige Sachen ausdokumentiert, damit solltest du mal rumspielen. Aber
immer Input und Output in gleicher Weise behandeln! Wenn du
physikalischen Zugang zu einzelnen States hast kann es auch helfen dein
System in mehrere Blöcke aufzuteilen und diese einzeln zu
identifizieren. Das geht aber auch nur dann vernünftig, wenn diese
Rückkopplungsfrei sind.
Gruß, Thomas
Gast #253358
Lesenswert?

Hallo Thomas,

ich bin nicht gerade der Matlab-Held. Dein Programm funktioniert bei
mir. Allerdings ist mir noch nicht klar, wie ich meine eigene Kurve
fitten lassen kann.
Du läßt vermutlich Dein Figure 1 fitten.
Wo finde ich die Daten zu Deiner Figure 1? --> Da müßte ich dann nur
selbst meine Werte reinschreiben....

Vielen Dank,
Sebi
Gast #253359
Lesenswert?

Sorry, aber das geht doch wol selbst dann aus den oben gelisteten
Befehlen hervor wenn man überhaupt keine Ahnung von Matlab hat:
>> load umv1_
"lade (Datensatz) umv1_"

>> sys=identsys(umv1_)
"erstelle System aus Datensatz umv1_"

umv1_ ist eine 3*x Matrix, wobei die erste Zeile die Zeit, die zweite
Zeile das Eingangssignal und die dritte das Ausgangssignal ist.
Wie man die anderen Befehle anwendet kannst du dir in "identsys"
anschauen:
>> edit identsys
Aber ohne grundlegende Matlabkentnnisse gehts natürlich nicht.

Gruß,
Thomas
Gast #768283
Lesenswert?

Hallo,

ich bin durch Zufall auf diesen Eintrag gestoßen und habe ein ähnliches 
Problem wie der Themensteller. Ich arbeite zur Zeit an einem Versuch, 
bei dem ich die Parameter einer Temperaturregelstrecke herrausfinden 
soll,die über eine K8055 USB Schnittstelle eingelesen werden. Diese 
Parameter werden dann für die Kalibrierung eines PID-Reglers genutzt.

Ich arbeite erst seit 2 Wochen mit MATLAB, kann mir aber die 
Lösungsansätze noch nicht richtig vorstellen. Leider funktionieren die 
Links in diesen Thread nicht mehr.

Wenn mir jemand ein Bsp.Programm oder Hinweise geben könnte wäre ich 
sehr sehr dankbar ;)


Vorab vielen Dank fürs lesen!

Phip
Gast #6356196
Lesenswert?

Hallo zusammen,

Ich habe die Messdaten eines Bodediagramms  gespeichert und wollte bitte 
aus diesen Messdaten Pole und Nullstellen in Matlab extrahieren. Aus 
diesen Messdaten:
-Freq ist die Frequenz
-cs entspricht der Amplitude in dB
-phis entspricht der Phase.
-CTF5 ist der Dateiname

Ich würde mich auf Ihre Hilfe sehr freuen

Viele Grüße
Thierry Assop
Angehängte Dateien:
#6358693
Lesenswert?

Hi,

der hier

https://de.mathworks.com/matlabcentral/answers/106927-how-to-get-transfer-function-from-a-bode-plot-data

vorgeschlagene Weg für die Identifikation einer Übertragungsfkt. aus 
einem Bodeplot funktioniert erwartungsgemäß für Deine Daten nicht.

Deine Daten sind sehr speziell:
- Phase levelt bei -90° für große w ?
- Phase hat zwei Maxima/Minima, ungewöhnlich
- Betrag hat fetten Überschwinger mit so einem Plateau ?

Kann sein, dass dies nen physikalisch sinnvolles System ist, sicher bin 
ich da aber nicht. Vllt. könnte man dem auf die Spur kommen, wenn man 
die Extrema der Phase und des Betrags mit Polen/Nullen identifizieren 
würde. Das erfordert aber sehr viel mehr Aufwand als ich hier leisten 
kann, sry.

Cheers
Detlef

clear
load g:\interim\ctf5.txt
w=ctf5(:,1);
aa=ctf5(:,2);
pp=ctf5(:,3);

gain=10.^(aa/20);

phase=pp*pi/180;
response = gain.*exp(i*phase*pi/180);
Ts = 0.1; % your sampling time
%w=whz*2*pi; %convert Hz to rad/sec
gfr = idfrd(response,w,Ts);
sys=tfest(gfr,2);
[mag,ph]=bode(sys,w);
mag=squeeze(mag);
ph=squeeze(ph);

%magdb=20*log10(mag);
semilogx(w,pp,w,20*log10(mag))

return
#6359635
Lesenswert?

Hallo Thierry

ich kann dir noch den Tip "Vector Fitting" geben. Schaue mal unter dem 
Stichwort. Dort findest du eine mögliche Lösung für dein Problem.

In der Beilage ist ein altes Elaborat von mir wo ich das vor einigen 
Jahren auch durchgespielt habe.

Dein Grundproblem ist, dass du einen Ansatz brauchst, wie viele Pole und 
Nullstellen dein System überhaupt hat.

Zwar könnte man in Matlab mit fminsearch optimale Koeffizienten finden, 
das geht aber nur wenn du einen "initial guess" hast.
Angehängte Dateien:
#6382033
Lesenswert?

> .. linearen MOSFET ...

aha. sehr schoen. Nur ist er nicht(!) linear.
Und bevor's vergessen geht. Das ganze Uebertragungsfunktionsgedoens 
bricht zusammen wenn das System nichtlinear ist. Weil die Fourier 
Tranformation nur fuer lineare Systeme gilt.

Erzaehl doch einfach mal was du willst. Ja, FET Stromquelle, schon klar. 
Aber welchen Frequenzbereich ? Wenn der OpAmp schnell genug ist passt 
das schon.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren