Hallo, ich beschäftige mich derzeit mit der Bestimmung der Parameter äquivalenter Ersatzschaltbilder aus einer Impedanzmessung heraus (in Octave). Ich habe da, dank dem Agilent Impedance Measurement Handbook, auch schon Erfolge erzielt und kann die ersten 3-Elemente-Ersatzschaltbilder extrahieren. Hat aber schon mal jemand versucht mit der Methode kleinster Fehlerquadrate die "Equivalent Circuit Parameter" eines DUT einer Impedanzmessung mit Octave bzw. Matlab zu bestimmen? Die Messung besteht aus drei Vektoren: 1. Vektor: Frequenz 2. Vektor: Betrag der Impedanz 3. Vektor: Phasenwinkel Alternativ dazu kann die Messung auch durch S11-Parameter beschrieben sein, in dem Fall bestehen die Vektoren aus: 1. Vektor: Frequenz 2. Vektor: Realteil S11 3. Vektor: Imaginärteil S11 Die Umrechnung von S11 in Z und umgekehrt stellt kein Problem dar. Wichtig ist, Vektor 2 und 3 bilden das komplexe Ergebnis der Form Z=R+jX und können nicht losgelöst voneinander betrachten werden. Nun würde ich gerne die Parameter des äquivalenten Ersatzschaltbildes mit der Methode kleinster Fehlerquadrate berechnen wollen, bspw. eine einfache Schaltung bestehend aus R || L || C. Wie stelle ich das an? Das Ersatzschaltbild lässt sich über seine Gesamtimpedanz beschreiben. Wie führe ich den Fit aber auf Grundlage des komplexen Ergebnisses (Vektor 2 und 3) durch? Wie errechne ich später aus den Parametern des Polynoms die Werte meiner Bauteile im äquivalenten Ersatzschaltbild? Hat jemand diesbezüglich einen Ansatz für mich? Ich danke euch. branadic
Hi Sehr interessant Frage. Das Problem ist, dass das RLC Filter ein IIR Filter ist. Die Wiener-Hof Formel könnte man anwenden um die Parameter für ein FIR Filter zu erhalten. Hoffe jemand kann da weiterhelfen.
Hi, ja, die Berechnung der Bauelementewerte mit der Methode der kleinsten Fehlerquadrate funktioniert. Das hätte ich nicht erwartet. Anbei ein Matlab Code, der auch in Octave gehen müßte. Ich gebe mir einen w-Vector vor und berechne die komplexe Impedanz der RLC Parallelschaltung. Dan bastele ich mir die Matrix des linearen Gleichungssystems M und löse das mit gausscher Fehlerminimierung. In coff erhalte ich dann die Lösung, die Kehr-/werte der Bauelementewerte. Bei realen Messwerten werden die vermutlich komplex werden, vielleicht haut das dann nicht hin. clear r=1; c=0.5; L=0.25; w=logspace(-3,3,1000).'; Hmess=1/r+j*w*c-j./(w*L); M=[ones(1000,1) j*w -j./w]; coff=inv(M'*M)*M'*Hmess; return math rulez! Cheers Detlef
Hallo Detlef, danke für deine Antwort. Zunächst einmal, müsste der Ausdruck für die Impedanz nicht folgendermaßen lauten: Hmess=1/r-j*w*C+1./(j*w*L); denn es gilt: Xc=-1/(j*w*C) und Xl=j*w*L entsprechend ist 1/Xc=-j*w*C und 1/Xl=1/(j*w*L). Ich habe nun also einen komplexen Vektor Z (1x401) der Form R+j*X aus einer Messung und den dazugehörigen Vektor omega (1x401) und mein Ausdruck schaut dann wie folgt aus: M=[ones(1,length(omega)) 1./(j*omega) -j*omega]; coff=inv(M'*M)*M'*Z; return allerdings mag das so nicht laufen. Anbei hänge ich mal die beiden mat-Files für Z und omega an. Das Programm sieht der Vollständigkeit halber dann wie folgt aus: clear; load('Z.mat'); load('omega.mat'); M=[ones(1,length(omega)) 1./(j*omega) -j*omega]; coff=inv(M'*M)*M'*Z; return Eine Ahnung wo was falsch läuft? branadic
branadic schrieb: > > Xc=-1/(j*w*C) und Xl=j*w*L > entsprechend ist 1/Xc=-j*w*C und 1/Xl=1/(j*w*L). Hi branadic, die Impedanz eines Kondensators ist 1/(j*w*C) ohne das '-' Zeichen, http://de.wikipedia.org/wiki/Kondensator_%28Elektrotechnik%29#Impedanz entsprechend lautet die Admittanz als Kehrwert der Impedanz j*w*C. Impedanz des L : j*w*L, Admittanz 1/(j*w*L), mit j/j erweitert um das j aus dem Nenner rauszukriegen macht -j/(w*L). Ich kann bei mir keinen Fehler entdecken. Für Deine Daten muß ich bißchen frischer sein, das muß noch warten. Gute Nacht Detlef
Hi branadic, Deine Daten zeigen die Impedanz des parallelen RLC, das ist betragsmäßig ein 'Hut', wahrend mein script die Admittanz berechnet, das ist nen Loch. Du muss zum matchen den Kehrwert Deiner gemessenen Impedanz nehmen. Das komplexe matchen funktioniert ganz wunderbar (im angehängten script die rote Kurve, Originaldaten in blau), nur leider kommen komplexe R,C und L Werte raus, wie erwartet, geht nich. Man kann das Ding aber gut 'per Hand' matchen. Das Maximum des Batrags ist 14000, das ist das r1. c1 fummelt man mit rum, L1 ergibt sich damit aus dem omega an der resonanz von 2.02e8 aus w^2=1/(L1*c1). c1 ändert man jetzt so, bis die Güte stimmt, also der 'Hut' so breit ist wie in der Messung. Das haut gut hin, gruene Kurve: r1=14k, c1 ~ 15pF, L1 ~ 1.6uH Cheers Detlef ps.: Danke an den Moderator, der den nächtlichen Pöbler abgeschaltet hat. clear; load z.mat -ascii load omega.mat -ascii z=z(1:2:end)+j*z(2:2:end); w=omega.'; z=z.'; M=[ones(length(w),1) j*w -j./w]; coff=inv(M'*M)*M'*(1./z); r=1./coff(1); c=coff(2); L=1./coff(3); r1=14000; c1=0.015*1e-9; L1=1/(2.02e8.^2*c1) ch=[1./r1 ; c1 ; 1./L1 ]; plot(w,abs(z),'b.-',w,abs(1./(M*coff)),'r.-',w,abs(1./(M*ch)),'g.-') return
Hallo Detlef, sorry das ich mich jetzt erst melde, bin noch nicht früher zu gekommen. Das Ganze sieht insgesamt gar nicht mal so schlecht aus. Gute Arbeit, danke. Ich versuche jetzt nur noch die Vergehensweise und Syntax zu verstehen, damit ich es auf andere Ersatzschaltbilder anwenden kann. branadic
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.