Hallo! Nach einigen Stunden mit Google muß ich doch mal fragen: Hat irgendjemand ne Lösung für einen Fitter bei dem man als Input ein komplexes Frequenzspektrum (= Liste von R+jX bzw. real+phase) reingibt und am Ausgang ein Filternetzwerk n-ter Dimension auf minimalen Fehler und Welligkeit rausbekommt? Curve Fitter gibts ja einige für Realwerte, aber eben anscheinend nicht für Netzwerke aus RCL. Die meisten neigen auch eher zum Schwingen als zum Glätten. Benötigt wird sowas für die Modellierung realer Bauelemente in Ersatzschaltungen inkl. parasitärer Elemente. Am Ende kann man dann in SPICE weiterarbeiten. Daher wäre was kompatibles zu gängigen Strukturen ideal, wie z.B. die universale C-Komponente von LTspice. Mit der man z.B. auch direkt die Werte für Quarze verwenden kann. Prinzipiell könnte es aber auch ne andere Struktur sein, Ladder oder Transmission line. Die ideale Struktur ist sowieso Bauelementtyp abhängig. Von HP gabs mal einen Impedanzmesser, der das Bauelement in eine Ersatzschaltung aus 6 idealen Bauelementen umwandelte. Wie funktioniert sowas in einem Programm? Gibts was fertiges kostenloses oder billig?
Für nicht so komplizierte Schaltungen, bis etwa 6 einfache Bauteile kann die Übertragungsfunktion noch analytisch berechnet werden - sogar rein auf Papier. Zum Fit von Komplexen werten sollte sich im Prinzip auch Software finden - man kann sich aber auch mit einem reellen Fit für Realteil und Imaginärteil getrennt behelfen - man muss halt nur die Daten und Funktionen entsprechend aufteilen. So kompliziert ist das auch nicht so eine Funktion zu schreiben - eigentlich müsste ich sogar noch einen entsprechenden Code haben. Schon etwas älter, aber so viel hat sich C++ in den letzten 15 Jahren nicht verändert. Damals machte es wegen der Rechenzeit auch noch Sinn die Funktion mit vom Compiler übersetzen zu lassen.
Aha. Das übersteigt meine mathematischen Fähigkeiten bei weitem. Ich finds nur erstaunlich, daß ich dazu nichts halbwegs fertiges oder wenigstens durchdachtes fand. Das Problem ist doch sehr häufig. Sind die meisten Leute mit 3 Ersatzwerten zufrieden? Vielleicht realisieren gar nicht, wie falsch ihre Sim dann sein kann, sobald sie breitbandiger wird! Kannst du deinen Code irgendwie in ein lauffähiges Programm packen? Tabelle rein, ein paar Werte raus. Ich glaube das einzige was ich hinkriegen würde, wäre einfach z.B. die ganze E-Reihe auf gut Glück durchzuprobieren. Was bei 6 Freiheitsgraden schon ne Menge Rechenzeit wäre. Vielleicht in einigen Minuten fertig. Ich weiß nicht.
Hallo Abdul, ich kann dir leider keine konkrete Lösung auf das Problem geben, möchte aber aus Neugier mich einmischen: Ein Filter wird doch über seine Eingangs- und Ausgangsgröße beschrieben. Wegen C und L wendet man Laplace an und bekommt eine analytische Gleichung, die sich durch umformen in eine Übertragungsfunktion beschreiben lässt. Die Koeffizienten der Übertragungsfunktion sind unbekannt, kann man allerdings auf Basis von Messungen und einfacher Mathematik mittels der kleinsten Fehlerquadrate ausrechnen lassen. Die Übertragungsfunktion wiederum kann entweder aus dem Netzwerk/System hergeleitet werden (bei elektrischen Systemen durch die Kirchhoffschen Gesetze) oder abgeschätzt werden, wie z.B. aus Testreihen. Ich nehme an, dass du "lediglich" das BODE Diagramm besitzt und nun wissen möchtest, wie du die Funktion dazu beschreiben kannst? Gruß
So in der Art. Meßprogramm mit besserer Soundkarte und man ist bis 100KHz dabei. WIMA mißt übrigens nach eigener Aussage auch nur bei 100KHz. Will man mehr, muß man es extra erbetteln. Hatte das mal gemacht und bekam dann bessere Kurven als die rudimentären Ansätze in den Datenblättern. So ein HP Bolide im Tausch gegen das Eigenheim, kanns vermutlich automatisch.
>Hat irgendjemand ne Lösung für einen Fitter bei dem man als Input ein >komplexes Frequenzspektrum (= Liste von R+jX bzw. real+phase) reingibt >und am Ausgang ein Filternetzwerk n-ter Dimension auf minimalen Fehler >und Welligkeit rausbekommt? Wie soll denn die Kurve aussehen?
Dein Beispiel willst du kompensieren, dass ein konstanter realer Wert herauskommt? Oder möchtest du ein Sammelsurium an Bauteilen, das dir diese Kurve möglichst genau nachzeichnet? Naja, beides ist eigentlich dasselbe Problem. Schau einfach, welche Kurvenprimitive zusammengesetzt deiner Wunschfunktion am besten nachkommen. Das kann man mit irgendeinem Spice auch halbautomatisch durchprobieren lassen. mfg mf
Habe mal das Modell von LTspice angehangen. Scheint mir im ersten Ansatz als erfolgversprechende Struktur für eine Vielzahl von Bauelementtypen.
Ich verwende auch heute noch häufig den alten HP 4194 Analyzer. Der berechnet Werte für 5 verschiedene Ersatzschaltbilder (mit Software Update noch mehr) und diese decken sich perfekt wenn man die Werte in ein Spice-Software klopft. Zum ausmessen von Ausgangselkos und Simulation von conducted EMI ideal. Man kann sich den Table auch ausgeben lassen. Beim RLC Model eines Elkos ist es ja noch leicht auf die Werte zu kommen. Bei den komplexeren Modelen ist es aber nicht nachzuvollziehen. Ich hatte HP mal gefragt und die ANtworteten nur, dass es sich um einen "speziellen mathematischen Algorithmus" handelt. Wer hätte des gedacht... Die Impedanz des Models kann man ja mittels Laplace ausdrücken. Dann mittels eines Polynomfits (je nach Ordnung des ESB) die Koeffizienten berechnen. Und dann mittels Koeffizientenvergleich die Bauteilparameter auflösen....Nur so eine Idee. Die Phase müsste auch noch einbeziehen. Auch in die "System Identification Toolbox" von Matlab reinsehen. Die macht ähnliches für Regelstrecken. Die einfache lineare Pole/Nullstellen Näherung aus einem gemessen Bodediagramm (Vanable) funktioniert brauchbar. Kann man eventuel auch auf Impedanzen Anwenden. http://www.mathworks.de/products/sysid/description3.html MFG Fralla
Fralla schrieb: > Ich hatte HP mal gefragt und die ANtworteten nur, dass es sich um einen > "speziellen mathematischen Algorithmus" handelt. Wer hätte des > gedacht... Wenigstens scheinen die Jungs Humor zu besitzen :) Fralla schrieb: > Die Impedanz des Models kann man ja mittels Laplace ausdrücken. Dann > mittels eines Polynomfits (je nach Ordnung des ESB) die Koeffizienten > berechnen. Und dann mittels Koeffizientenvergleich die Bauteilparameter > auflösen....Nur so eine Idee. Die Phase müsste auch noch einbeziehen. Da sagst du was... Der Koeffizientenvergleich lässt sich ja einmal getrennt nach Real- und Imaginärteil ausführen. Somit wäre die Phase auch mit einbezogen. Es steckt also ein Polynomfit dahinter. Entsprechend werden Bauteile mit "unsinnigen" Werten eben rausgeworfen. * R oder L gegen ∞ oder C gegen 0 == Open circuit an dieser Stelle * R oder L gegen 0 oder C gegen ∞ == Short circuit Nun wäre eine Art kanonische Form eines Filternetzwerks gut, die sich schnell in eine Ersatzschaltung überführen lässt. Genau so wie in der Regelungstechnik(Fralla brauch ich das ja nicht zu erzählen...). mfg mf
> http://www.mathworks.de/products/sysid/description3.html
Die dort erwähnten Methoden klingen wie Folterpraktiken.
Wäre nun interessant, ob die freien Softwareversionen das auch können.
Sciworks oder wie das hieß. Noch nie benutzt.
Momentan übersteigt das meinen Horizont.
Abdul K. schrieb: > ob die freien Softwareversionen das auch können Scilab? http://www.scilab.org/ Und ja, irgendein Curve fitting wird schon vorhanden sein. Im Extremfall könnte man ja die Wertetabelle als Gleichungssystem angeben und lösen lassen. Eine ganz andere Methode wäre noch Excel. Da kann man sich ja auch "schöne" Kurven in den Graphen reinlegen lassen. Die Parameter kann man dann ebenfalls irgendwo rausholen. mfg mf
Hast du dabei auch bedacht: 1. es sind 3D Kurven, keine 2D 2. Es ist nicht irgendeine schöne mathematische Funktion gesucht, sondern genau die Übertragungsfunktion obigen Bildes! Damit kannst du die allermeisten Programme sofort kippen! Ich habe den ganzen Abend rumgesucht, aber es ist nichts zu finden. Am Ende bleibt wirklich die E12 hoch 6 Variante. Vielleicht ist die Idee gar nicht so schlecht.
Abdul K. schrieb: > Benötigt wird sowas für die Modellierung realer Bauelemente in > Ersatzschaltungen inkl. parasitärer Elemente. Ein Curve-Fitting Programm, dass aus dem komplexen Spektrum die Bauteilwerte im Ersatzschaltbild liefert, muß erstmal mit dem Ersatzschaltbild "gefüttert" werden, d.h. es reicht nicht irgendein Polynomfit, sondern das Basissystem der für den Fit verwendeten Funktionen muß dem Ersatzschaltbild entsprechen. Man kann z.B. die Lage von Pol- und Nullstellen bestimmen und daraus die Werte in alternativen Ersatzschaltbildern durch Koeffizentenvergleich ableiten.
In Matlab gibt es auch 3D Curve Fitter. Doch dieser ist für 2D Einagbedaten und fittet die Fläche darüber. Eine Liste mit Real und Imgaginärteil ist doch etwas anderes. > http://www.mathworks.de/products/sysid/description3.html >Die dort erwähnten Methoden klingen wie Folterpraktiken. >Wäre nun interessant, ob die freien Softwareversionen das auch können. >Sciworks oder wie das hieß. Noch nie benutzt. Ich glaube nicht, das Funktionen wie diese Toolbox im freien Scilab vorhanden sind, kostet schließlich 1k€ und setzt die Control System Toolbox vorraus (wieder 1k€), wenn man es wirklich kauft. (Für privat ist downloaden schon ok;)) Allerdings kann nur einen Brauchteil des Funktionsumfanges verwenden, also Pole/Nullstellen lienarer System identifizieren, bzw die Zustandsraumkoeffizienten. Mit dem Rest weis ich nichts anzufangen... >>Fralla schrieb: >> Die Impedanz des Models kann man ja mittels Laplace ausdrücken. Dann >> mittels eines Polynomfits (je nach Ordnung des ESB) die Koeffizienten >> berechnen. Und dann mittels Koeffizientenvergleich die Bauteilparameter >> auflösen....Nur so eine Idee. Die Phase müsste auch noch einbeziehen. >Mini Float schrieb: >Da sagst du was... Der Koeffizientenvergleich lässt sich ja einmal >getrennt nach Real- und Imaginärteil ausführen. Somit wäre die Phase >auch mit einbezogen. Es steckt also ein Polynomfit dahinter. Und da sagts du was... Den Koeffizientenvergleich mit Real und Imaginärteil machen. Die Impedanzfunktion in Laplace Form wird ja Zähler und Nennerpolynome haben, Fitter für Polynome im Zähler und Nenner gibt es ja. MFG Fralla
Google ... aeh, ja ... Man koennte einen Fitter schreiben, der die gewuenschte Funktion aufgrund minimaler quadratischer Fehlerquadrate fittet. Das Problem dabei ist dass nicht der gesammte Parameterraum zur Verfuegung steht. Denn Aufgrund der Energieerhaltung ist eine Uebertragunsfunktion analytisch. Siehe Kramers-Kronig. Nun koennte man, um zusaetzliche Freiheitsgrade zu gewinnen, einfach die Ordnung erhoehen. Ja, koennte man. Dann stellt sich aber die Frage, wie genau sind die Daten. Wie genau ist das komplexwertige Spektrum? Und wie genau muessen nachher die Bauteilwerte sein. Wenn ein Kondensator 2 pF auf 0.2% genau sein muss, hat man nichts gewonnen. Dh man benoetigt auch noch eine Fehlerrechnung. Ich wuerd mal betragmaessig fitten und mir die Phase anzeigen lassen. Dann etwas an den Bauteilen wackeln und schauen, ob das mit der Phase etwa machbar waere.
>Du meinst ein reales Beispiel? z.B. wie im Anhang. Das ist doch der Impedanzfrequenzgang eines 8R-Lautsprechers? Das Ersatzschaltbild für einen solchen Lautsprecher ist wohl bekannt: http://portal.tugraz.at/portal/page/portal/Files/audiotechnik/Lehre/fertige%20BA%20PA%20DA/PA_Deboy_Dietze_Lautsprecherentwicklung_V1.3.pdf
Abdul K. schrieb: > 1. es sind 3D Kurven, keine 2D Es sind also zwei 2D-Kurven... Sagen wir mal zu einem Eingangswert x ist eine komplexe Zahl z zugeordnet. z lässt sich zerlegen in a + jb . Zu jedem x ist also ein a und ein b vorhanden. Man kann auch Gleichungssysteme aufstellen. Man kann auch "Splinen". Das Problem ist durchaus lösbar! mfg mf
Mein Kenntnisstand hört beim Gaußschen Algorithmus für lineare Gleichungssysteme auf. Das habe ich mal als Schüler implementiert und das ging. Allerdings eben für ideale Systeme. Hier sind aber immer Fehler in den Werten. Sozusagen ist immer ein kleiner Fehlervektor bis zum idealen Punkt. Daher wird der klassische Gauß hier versagen. Wie sollte er eine Lösung finden? Vielleicht kann man ihn modifizieren?? Eigentlich ist es eine 2D-Kurve, denn es sind jeweils gekoppelte Real- und Imaginärwerte. Wenn denn der Fitter mit komplexen Eingangswerten umgehen kann. Vermutlich findet man auch mit 'entkoppelten' Werten in einem 3D-Fitter eine Lösung. Es wird einfach nur erheblich länger dauern und schwingungsanfälliger. Das in meinen bescheidenen Worten - über die ein Mathematiker schmunzeln wird. Mich erinnert das Problem stark an die Positionsauflösung bei GPS. Tja, und der Test ;-) Kai hat ihn bestanden. Wollte doch mal gucken, wer die Daten richtig interpretiert. Mir gehts aber nicht um Lautsprecher. Sollte nur ein realer Datensatz sein. Im Umfeld Lautsprecher habe ich schon geforstet und nichts befriedigendes gefunden. Nachdem ich die Nacht mit Google verbrachte, kamen ein paar Hinweise zusammen. Werde das später posten. Erstmal selber probieren hier... Hat vielleicht jeman alte Ausgaben der Byte? Das hier wäre nämlich interessant: "Fitting Curves to Data: the Simplex Algorithm is the Answer". M.S. Caceci and W.P. Cacheris. Byte Magazine 9(5), 340-362 (1984). aus: http://www.chemitech.com/marco/freestuf.htm Ich habs leider nicht so mit Pascal ;-)
Man hat hier 2 Aufgaben: einmal aus dem Ersatzschaltbild die Übertragungsfunktion bzw. Impedanz zu berechnen. Das ist für so eine relativ einfache Schaltung wie oben sogar noch per Hand möglich. Sonst müsste man ggf. ein CAS Tool wie Mathematica (teuer) oder Maxima (frei) zur Hilfe nehmen. Damit hat man dann die Funktion die man an die Daten anpassen kann. Diesen Teil muss man ja auch nur für jede Ersatzschaltung einmal machen. Die Anpassung ist dann der 2. Schritt. Dafür gibt es frei verfügbaren Sourcecode, oder man nutzt ein fertiges Programm zur Messdatenbearbeitung (Excel, Gnuplot, XMgr,...), die aber meist nur den Fit für reelle Daten bieten. Da kann man sich helfen indem man die Funktion in 2 Teilebereiche aufteilt, einmal für den Realteil und einmal für den Immaginärteil. Das macht die Funktion etwas komplizierter, aber die meisten Programme bieten so etwas wie eine stückweise Definition. Man kann z.B. für "negative" Frequenzen den Imaginärteil nehmen, und für positive Frequenzen den Realteil.
Ich verstehe nur den ersten Absatz. Daher suche ich nach einem Fitter für komplexe Daten.
Abdul K. schrieb: > So in der Art. Meßprogramm mit besserer Soundkarte und man ist bis > > 100KHz dabei. WIMA mißt übrigens nach eigener Aussage auch nur bei > > 100KHz. was aber auch daran liegt, wie das gute Stück hernach eingebaut und angesteuert wird, bzw was sonst noch so in der Nähe liegt. Bei 100kHz fängt die EMV so langsam an, relevant zu werden und die parasitären Kapazitäten der Leiterbahnen und Bedrahtungen werden relevant. Ich gebe Dir aber zu, dass man , wenn man das berechnen und simulieren wollte, genaue Nettoinfos braucht. Allerdings kann ich es von meinem Wissen sagen, dass gerade Kondensatoren da immer stärkere Exemplarsteuungen aufweisen,
Hallo, ich mische mich auch mal mit in das Gespräch. Ich habe mich selbst schon mit dieser Thematik (Parameter eines Ersatzschaltbildes aus der Messung bestimmt) beschäftigt, kann davon hier aber aus verschiedenen Gründen nicht ausführlich berichten. Dennoch möchte ich einige Hinweise geben. Meine ermittelten Parameter haben in der anschließenden Simulation sogar besser mit der Messung überein gestimmt, als die vom guten alten HP4194A ermittelten, was zu Teil auch auf Rundungsfehler zurückzuführen ist. Dennoch ist mir dieser Brocken Technik sehr ans Herz gewachsen. Zunächst sei der Hinweis auf's "Agilent Impedance Measurement Handbook" gegeben. Dort steht im Prinzip der gesamte Lösungsweg für die "einfachen Ersatzschaltbilder" und auch die Funktionsweise des HP 4194A drin. Nicht verzweifeln wenn man es nicht auf Anhieb findet, es ist nicht in Klartext an einer einzigen Stelle beschrieben, stattdessen auf vielen Seiten und auch in den Abbildungen zu finden. Eine weitere Beschreibung findet sich in "RCL Analysis with the MSA" von Sam Wetterlin. Weiterhin seien die Quellen "Equivalent Circuit Extraction from Measured S-Parameters of Electronic Packages" und "The Complete Electrical Equivalent Circuit of a Double Heterojunction Laser Diode Using Scattering Parameters" genannt. Die Methode kleinster Fehlerquadrate ist natürlich auch ein möglicher Ansatz. Passen die Ersatzparameter/Simulationen mit diesen nicht mit der Messung überein, dann stimmt entweder das Ersatzschaltbild nicht, man hat sich an irgendeiner Stelle verrechnet oder aber falsche Randbedingungen für die Lösung zugrunde gelegt. Man darf nicht erwarten, dass aus einer schmalbandige Messung ein breitbandiges Ersatzschaltbild zu extrahieren sei, dass wäre utopisch und vermessen. Man kann aber wohl erwarten, dass man aus der schmalbandigen Messung Ersatzparameter extrahieren kann, die das Verhalten der schmalbandigen Messung sehr gut beschreiben. Viel Spaß beim Lösen der Aufgabe, dass verlängerte Wochenende lässt ja genug Zeit dafür. branadic
Abdul K. schrieb: > Mein Kenntnisstand hört beim Gaußschen Algorithmus für lineare > Gleichungssysteme auf. Das habe ich mal als Schüler implementiert und > das ging. Allerdings eben für ideale Systeme. Hier sind aber immer > Fehler in den Werten. Sozusagen ist immer ein kleiner Fehlervektor bis > zum idealen Punkt. Daher wird der klassische Gauß hier versagen. Der Gauß Algorithmus bestimmt dir deine Koeffizienten immer so, dass der quadratische Fehler minimal wird. Anders ausgedrückt heißt das, dass er die Projektion der Meßwerte auf den von deinem Gleichungssystem aufgespannten Teilraum liefert. Du mußt "nur" dein Gleichungssystem passend zu deinem Problem vorgeben. Da kann es dir passieren, dass deine gesuchten Größen nicht einfach als Koeffizienten in deinem linearen Gleichungssystemauftauchen und dann brauchst du zusätzlich einen passenden Suchalgorithmus, der mit deinen nichtlinearen Parametern "spielt".
Naja, es hat Jahre gedauert bis ich LTspice halbwegs beherrschte. Was ich nun schon von mir behaupten kann. Ich möchte daher nicht noch eine weitere Baustelle öffnen und mich weitere Jahre mit solchen Fitting-Algorithmen beschäftigen, um dann irgendwann ein Programm passabler Funktionalität realisiert zu haben. Außer jemand hätte Interesse gegen Bares seine Bauelemente von mir fitten zu lassen. Was ich nun kann. Muß aber noch viele Experimente machen. Man erkennt oftmals erstaunliche Wissenslücken bei sich und in benutzten Tools wie LTspice. Vielen Dank für eure Beiträge!
Hi, Abdul, ich habe mich bisher zurück gehalten zwecks Minimierung des Risikos der Blamage. Du willst in SPICE einen Zweipol nachbilden, der eine hohe Zahl an Polen und Nullstellen aufweist? Warum misst Du nicht die Übertragungsfunktion von Spannungswerten zu Strom, indem Du: 1. Den zu testenden Zweipol mit Rauschen anregst, 2. Die komplexe FFT des Rauschens misst, 3. Die Stromantwort des Zweipols misst und ebenfalls die FFT berechnest, durch Faltung der beiden FFT's die komplexe Übertragungsfunktion des Zweipol erhältst, und die in SPICE einbindest? Schau Dir mal den AD5933 an - der macht den messtechnischen Teil von dem, was Du suchst - wenn ich Deine Suche richtig verstanden habe. Ciao Wolfgang Horn
Hallo Wolfgang. Genau! Du hast es komplett erfasst. Die FFT ist eine komplexwertige. Bei meiner 50 Stunden Recherche habe ich auch den AD5933 abgeklopft, aber nichts verwertbares gefunden. Wenn überhaupt, dann werden die für den auch nur RLC auswerten. Der Baustein ist prinzipiell schon interessant für ein Einzelgerät. Jetzt habe ich zwar offensichtlich eine Lösung, aber Krach mit der Frau ;-) Als sie fragte, warum ich immer beim Suchen im Net so rummeckerte, sagte ich: Ich möchte eine Punktewolke auf eine mathematische Funktion abbilden und finde einfach nix gescheites. Wer will, kann man eine Z Mag Phase Tabelle posten und ich versuche mich dran. Brauche noch die Bauelementart als Info. Das Ganze werde ich mal an einem Ultraschallwandler härtetesten.
Hier mal ein "Hand-fit". Achtung, das Vorzeichen der Phase in der Datei von Abdul K. ist falsch. Man muss das Vorzeichen vertauschen. Das war bestimmt ein Test um zu sehen ob wir's "blicken". :-) Mit diesen guten Startwerten könnte man es mit dem Optimizer von der LTspice Yahoo group probieren. http://tech.groups.yahoo.com/group/LTspice/files/%20Tut/Optimization/ In "Examples from Helmut" gibt es Beispiele und eine Anleitung. Die home page von Friedrich Schmid, dem Author dieses Optimizers. http://members.aon.at/fschmid7/page_3_1.html NEW: Perl based optimizer ( flexible polyhedron , differential evolution ) for Spice ( with Perl/TK GUI )
Ne direkte Lösung in LTspice ist natürlich auch sehr cool. Werde es mir anschauen.
Fralla schrieb: > Ich verwende auch heute noch häufig den alten HP 4194 Analyzer. Der > berechnet Werte für 5 verschiedene Ersatzschaltbilder (mit Software > Update noch mehr) und diese decken sich perfekt wenn man die Werte in > ein Spice-Software klopft. Zum ausmessen von Ausgangselkos und > Simulation von conducted EMI ideal. Man kann sich den Table auch > ausgeben lassen. > Beim RLC Model eines Elkos ist es ja noch leicht auf die Werte zu > kommen. Bei den komplexeren Modelen ist es aber nicht nachzuvollziehen. > Ich hatte HP mal gefragt und die ANtworteten nur, dass es sich um einen > "speziellen mathematischen Algorithmus" handelt. Wer hätte des > gedacht... > Mich würde interessieren, aus welcher Zeit der 4194 stammt? So um 1991 rum?
Nachtrag zu meinem Beispiel: Ich hatte vergessen das Symbol für "EL_Speaker" anzuhängen.
Kennt jemand ein kleines Tool um Files mit magnitude+phase in real+imaginary zu konvertieren? Bin ich zu blöde zum Googeln?
Weiß ich. Ich brauch ein Programm um ganze Files zu konvertieren.
Abdul K. schrieb: > Weiß ich. Ich brauch ein Programm um ganze Files zu konvertieren. Datei-Format(e)?
Wenn ich bettel, kann ich nichts wünschen. Irgendwas CSV. Space oder Tab.: freq mag phase zu freq Re Im Mich wundert nur, das es das nicht fertig gibt. bin<>hex gibts ja auch.
Abdul K. (ehydra) schrieb: > Wenn ich bettel, kann ich nichts wünschen. Irgendwas CSV. Space oder > Tab.: > freq mag phase > zu > freq Re Im > Mich wundert nur, das es das nicht fertig gibt. bin<>hex gibts ja auch. Mach doch einfach eine nette kleine Programmierübung draus. ;) C oder C# oder biste ein Pascal'ler (Delphianer)?
Perl wäre vermutlich am schnellsten realisierbar? Ich brauche nur ne Vorlage, wie man Text mit gewünschtem Delimiter aus einer Datei parst und in ne andere Datei sequentiell schreibt.
@Helmut: Kann es sein, daß du die Datei ps2sp.pl nicht korrekt eingeordnet hast? Ich konnte sie erstmal nicht finden und mußte dann auf seiner HP suchen gehen. Dort ist sie in den Examples. http://members.aon.at/fschmid7/loadflow_examples.zip Ehrlich gesagt, ich verstehe von dem was da veranstaltet wird kein Stück. Automatisches Löschen des NET-files MUSS man deaktivieren? Ich habe das immer an. Gibts dafür ein Control, damit ich das in das Schematic schreiben kann? Damits nur für diese Projekt aktiv ist.
Hi, Abdul, > Hallo Wolfgang. Genau! Du hast es komplett erfasst. Die FFT ist eine > komplexwertige. Ich habe noch Restzweifel, ob da nicht doch ein Rest von Missverständnis ist. Und zwar meine ich so: Du kannst das Verhalten eines Vierpols mit einem Vektor aus komplexen FFT-Koeffizienten beschreiben. Die Halbleiterhersteller tun das schon seit Jahr und Tag, indem sie in die Vierpolmatrix ihrer Transistoren S22 als komplexen Vektor eintragen - häufig in Polarkoordinaten. Ich habe hier eine Uraltversion von HP VEE. Mit der lassen sich solche komplexen Vierpolvektoren durchrechnen. Dasselbe geht gewiss auch mit Labview, MathLab und Konsorten. > Das Ganze werde ich mal an einem Ultraschallwandler härtetesten. Ach du liebes Lieschen! Wenn es Dir nur darum ging und besagter Wandler ein Piezo ist, dann nimm das Standard-Ersatzschaltbild des Schwingquarzes, auch der Piezoresonatoren - oder gleich die Berechnungsformeln. Aus physikalischen Gründen kann sich der Piezowandler gar nicht anders verhalten, allenfalls etwas mehr Dämpfung als ein Quarz, der im Vakuum schwingt... Ciao Wolfgang Horn
Abdul K. schrieb: > Weiß ich. Ich brauch ein Programm um ganze Files zu konvertieren. Kannst du damit was anfangen?
1 | #perl |
2 | use strict; |
3 | use warnings; |
4 | |
5 | my $re; |
6 | my $im; |
7 | |
8 | while(<>) |
9 | { |
10 | /([\d\.-]+)[[:blank:]]([\d\.-]+)[[:blank:]]([\d\.-]+)/; |
11 | $re=abs($2)*cos($3); |
12 | $im=abs($2)*sin($3); |
13 | printf("%.2f %.2f %.2f\n",$1,$re,$im); |
14 | } |
1 | perl conv.pl <eingabe.txt >ausgabe.txt |
?
>Hat irgendjemand ne Lösung für einen Fitter bei dem man als Input ein >komplexes Frequenzspektrum (= Liste von R+jX bzw. real+phase) reingibt >und am Ausgang ein Filternetzwerk n-ter Dimension auf minimalen Fehler >und Welligkeit rausbekommt? In der Physik gibt es ein ähnliches Problem. Da will man oft wissen was in ein Spektrum gehört, also Gaußpeaks, Lorentzlinien, Poissonverteilungen und noch anderes Gedöns. Da macht man Least-Squares-Fits mit unterschiedlichen Annahmen und vergleicht deren Güte mit dem Chi-Quadrat- und F-Test. Hier ist ein gutes Buch darüber: ISBN 0-07-005135-6 In deinem Fall würde ich sagen, daß aus der konkreten Situation fast immer schon mit physikalischer Intuition auf ein passendes Ersatzschaltbild geschlossen werden kann. Also dürfte eigentlich ein Programm ausreichen, daß ausgehend von einem bekannten Erstazschaltbild, solange die Bauteilewerte verändert bis es passt. Das kann man aber fast immer auch von Hand in einem Simulator machen, wenn man geschickt separiert und dafür etwaige Resonanzen und das Verhalten bei tiefen und hohen Frequenzen ausnutzt.
> Das kann man aber fast immer auch von Hand in einem Simulator machen, wenn man geschickt separiert und dafür etwaige Resonanzen und das Verhalten bei tiefen und hohen Frequenzen ausnutzt. Leider hat der von mir erwähnte Perl-Optimizer diese Aufgabe nicht geschafft. Dafür kann man aber mit intelligenter Handoptimierung bei dieser Schaltung sehr gut zu einer Lösung kommen. Siehe Kommentare im Schaltplan. Es gibt übrigens eine strenge mathematische Beziehung zwischen Betrag und Phase bei Minimum-Phase-System (=kein Allpass-Faktor). Daher reicht es bei dieser Schaltung allein die Betragsfunkion anzunähern. http://www.dcsc.tudelft.nl/~wb2207/transp/sr10-8.pdf, Seite 4
Das stimmt natürlich alles. Der Ultraschallwandler ist für mich einfach nur ein Testobjekt. Zumal hier schon öfters nach diesbezüglichem Ersatzschaltbildwerten gefragt wurde. Lautsprecher interessieren mich nicht sonderlich und lassen einen nur in dem ganzen Esoterikkram die Richtung verlieren. Vielleicht kann man auch die ganzen S-Parameter Tools verwenden. Ich habe nur keine Ahnung, warum die immer eine Systemimpedanz (z.B. 50 Ohm) verlangen und in unserem Fall hier das nirgends auftaucht. Warum brauche ich bei solchen Meßwerten keine Systemimpedanz? Man sieht, von Vierpoltheorie verstehe ich nichts: 1 Tor, 2 Tor, skalar oder vektoriell, hm. Dann gibts noch scheinbar ein ultimatives Fitting-Tool: LEVMW Aber nirgends ein Beispiel wie man es verwendet. Ich werde erstmal Perl ausprobieren. Ein Fitter direkt in LTspice wäre sehr zielorientiert. Obs der beste Lösungsansatz ist, muß ich testen.
Helmut S. schrieb: >> Das kann man aber fast >> immer auch von Hand in einem Simulator machen, wenn man geschickt >> separiert und dafür etwaige Resonanzen und das Verhalten bei tiefen und >> hohen Frequenzen ausnutzt. > > Leider hat der von mir erwähnte Perl-Optimizer diese Aufgabe nicht > geschafft. Dafür kann man aber mit intelligenter Handoptimierung bei > dieser Schaltung sehr gut zu einer Lösung kommen. Siehe Kommentare im > Schaltplan. > Schade. Werds trotzdem testen. Welche Beispiele schaffte er denn? Das ist ja Jahre her. Hast du da noch was im Kopf? Mich dünkt speziell bei diesem Beispiel, was ich eigentlich eher willkürlich wählte bei der Suche nach realen Daten, daß es zufällig ein eher schwieriges Beispiel ist. Ich weiß nur noch nicht warum. Jedenfalls sind deine handoptimierten Werte schon sehr gut. Lob! > Es gibt übrigens eine strenge mathematische Beziehung zwischen Betrag > und Phase bei Minimum-Phase-System (=kein Allpass-Faktor). Daher reicht > es bei dieser Schaltung allein die Betragsfunkion anzunähern. > http://www.dcsc.tudelft.nl/~wb2207/transp/sr10-8.pdf, Seite 4 Da schreibst du was was ich seit Tagen auch vermute. Schön wenn man dann eine Referenz zum Weiterlesen findet. Danke. Ich vermute momentan, daß man mit der zusätzlichen Phaseninformation schlicht schneller zu einem Optimum rein algorithmisch gelangt. Aber bei welchen Strukturen brauch man dann unbedingt die Phase?? Das irritiert mich. Dabei dachte ich 20 Jahre, jetzt kann ich komplex rechnen. Pustekuchen, doch nicht ganz verstanden. Werde das Paper lesen. Vielleicht geht mir ein Licht auf.
>Schade. Werds trotzdem testen.
Welche Beispiele schaffte er denn? Das ist ja Jahre her. Hast du da noch
was im Kopf?
In der Yahoo group sind zwei Beispiele von mir. Am besten lässt du die
mal "rennen".
Du brauchst übrigens neben Schaltplan.asc und Schaltplan.net die zwei
Perl-Skripte optimizer.pl und simend.pl und eine Initialisierungsdatei
Schalplan_init.txt.
In deinen Beispielen ist ein Bandpaß dabei. Das ist ja kurios. Warum geht der und obiger nicht? Das obige Paper versteh ich nicht so ganz. Bislang dachte ich, wenn kein aktives Bauelement in der Schaltung ist, dann ist sie immer stabil? Ist das falsch? Habe noch etwas mit der Phase gespielt. Tatsächlich, man kann sie auch problemlos in meinem Beispiel weglassen. Sie baut sich sozusagen rein aus der Amplitude wieder korrekt auf. Da sind wir ja wieder bei dem Test mit der inversen Phase ;-)
Abdul, Ich hatte vergessen, dass der Optimizer wohl nur 1e-6 aber nicht 1u versteht. Jetzt rennt der Optimizer zusammen mit LTspice wie gewünscht, sogar mit 5 Variablen. Im zip-file sind alle Dateien die man braucht um das zu testen. Lies bitte auch die "instrcutions.txt". Ehre wem Ehre gebührt: Die home page von Friedrich Schmid, dem Author dieses Optimizers. http://members.aon.at/fschmid7/page_3_1.html NEW: Perl based optimizer ( flexible polyhedron , differential evolution ) for Spice ( with Perl/TK GUI )
Nachtrag: Ich habe das Perl-script optimizer.pl mit "tinyperl" ausgeführt. Hier ist der Link: http://tinyperl.sourceforge.net/
Hm. Ich habe soweit alles zusammen und tinyperl installiert. Mal ne blöde Frage: Ich dachte PATH-Einstellungen gibt es mindestens seit WinME nicht mehr?? Und welche Datei muß ich nun wie starten? DOS-Box mit perl optimizer.pl oder sowas? Etwas mehr Doku wäre schon toll.
1. Navigiere in der CMD-shell zum Verzeichnis mit dem Schaltplan und den Perl-Sktipts. 2. .....> _path.bat Das_path.bat dient dazu, dass du nicht den langen Pfad zu Tinyperl eintippen musst und dass scad3.exe ohne langen Pfadnamen im Schaltplan_init.txt angegebenen werden kann. 3. Jetzt gehts los. .....> tinyperl optimizer.pl Z_speaker1opt_init.txt Am Ende der Optimierung öffnet das Skript einen zusätzlichen Schaltplan mit den optimierten Werten.
Abdul K. schrieb: > Hm. Ich habe soweit alles zusammen und tinyperl installiert. Mal ne > blöde Frage: Ich dachte PATH-Einstellungen gibt es mindestens seit WinME > nicht mehr?? Doch doch, unter XP gibt es sie auch noch. :-) > DOS-Box mit perl optimizer.pl oder sowas? So wird das in der Regel gemacht... Kannst du mit meinem Converterscript von oben etwas anfangen?
perlbastel schrieb: > Abdul K. schrieb: >> Hm. Ich habe soweit alles zusammen und tinyperl installiert. Mal ne >> blöde Frage: Ich dachte PATH-Einstellungen gibt es mindestens seit WinME >> nicht mehr?? > Doch doch, unter XP gibt es sie auch noch. :-) > Dann habe ich das wohl verwechselt mit einer anderen Sache die nicht mehr ausgewertet wird. >> DOS-Box mit perl optimizer.pl oder sowas? > So wird das in der Regel gemacht... > > Kannst du mit meinem Converterscript von oben etwas anfangen? Sieht sehr kryptisch aus. Sollen wohl Hausaufgaben für mich werten?? Ich muß erstmal den Perl-Optimizer zum Laufen kriegen. @Helmut: Ich habe Path passend geändert und auch in auto-exec.bat eingetragen. Er sagt aber: C:\...\test>tinyperl optimizer.pl Z_speaker1opt_init.txt Befehl oder Dateiname nicht gefunden. Er kann offensichtlich mit tinyperl gar nichts anfangen. Muß man das irgendwie aktivieren?
Du musst natürlich tinyperl.exe und die ganze tinyperl Unterstruktur in dem Verzeichnis C:\tinyperl haben. In AUTOEXEC.bat mache ich gar nichts. Ich habe hier hier gerade XP. Auf WIN7 habe ich es jetzt nicht getestet. C:\tinyperl\tinyperl.exe
Ich habe tinyperl unter Programme gepackt. Und wenn ich es dort starte, erzeugt es ein eigenes Arbeits-Directory und beendet sich danach. Wenn ich es woanders aufrufen will, kennt er es nicht. Wäre es nicht sinnvoller, die Extension pl mit tinyperl zu verknüpfen? Geht das nicht mit diesem Programm? Doppelclick fertig.
Du musst natürlich tinyperl in einer CMD-shell aufrufen. Nicht im
Windows-Explorer draufklicken.
Wenn du den Pfad für tinyperl gesetzt hast (_path.bat ausführen), dann
tippe mal im CMD-Fenster das Folgende. Achtung das ">" ist der Prompt
der cmd-shell, also nicht ">" eintippen.
> tinyperl -help
Und findet es tinyperl?
Nein. Erwartungsgemäß geht das nur im Ordner tinyperl. Da wo es installiert ist. Immer die gleiche Scheiße mit Windoof. Auf dem Mac würde das längst laufen.
Arbeitest du etwa noch mit WIN98? Also ich habe das auf mindestens zwei Rechnern mit XP am Laufen. C:\tinyperl
unter win7 funzt dein path batch skript nicht. http://geekswithblogs.net/renso/archive/2009/10/21/how-to-set-the-windows-path-in-windows-7.aspx
Ich habe jetzt den ganzen Kram von Perl in meinen Arbeitsordner gepackt und dort kann ich es starten. Dann kommt aber: optimizer with flexible polyhedron alg. combined with thermal fluctuations from the book : numerical recipes in C - second edition - Cambridge University P ress starting optimization ..... reading initfile ..... reading circuitfile ..... inital simplex points: Befehl oder Dateiname nicht gefunden. Can't open source file : z_speaker1opt.log -------- Wo soll das File denn sein?
Im Log-file steht der Wert (Ergebnis) der cost-function. LTspice: Tools -> Control Panel -> Operation Automatically delete.net files: NO Automatically delete.log files: NO (Automatically delete.log files: NO) Wahrscheinlich braucht es den nicht.
Eine Stunde später.... toll "net" hatten wir ja schon. Offensichtlich brauch er auch "log". Jetzt läuft irgendwas. Aber wo kann ich zwischenzeitlich den aktuellen Arbeitszustand sehen? Bzw. beenden triggern und den letzten Optimierungsergebnis sehen? Nochmal die Frage: Kann man diese Optionen pro Projekt im Schaltplan definieren? Tut mir leid wenn ich dich nerve. Entweder ich bin zu blöde oder es ist einfach schlecht dokumentiert.
Geduld, Geduld. Wenn der Optimizer fertig ist, dann erzeugt er den Schaltplan_opti.asc und öffnet den mit LTspice. Da stehen dann die optimierten Parameter drin. Siehe meine Screenshots.
Läuft noch immer. Wie lange dauert das Beispiel auf welchem Rechner? Mal zu Perl: Gibt es da eine kompakte Entwicklungsumgebung inkl. Debugger?
Das Beispiel Speaker_optimization.zip braucht keine 30sec auf einem alten Laptop(1,5GHz). Es macht ca. 40 Simulationen bis es sagt "fertig". Mach auch mal Control Panel -> SPICE-> Reset to default. Manche glauben da drin müsste man etwas verstellen. Da muss man aber gar nichts verstellen, außer falls man mal den Alternate solver braucht. All diese Einstellungen die man da machen könnte, schreibt man besser gleich in den Schaltplan, z. B. .options gmin=1e-10 falls nötig. Bist du schon an einem anderen Beispiel?
Naja, meinen Kenntnisstand bezüglich LTspice kennst du doch. Ich bin der der immer meckert ;-) Ich bin immer noch am Warten. Wenn der Optimizer weitere Verbreitung finden soll, dann muß der schon bedienbarer werden. Was ist nun, wenn ich abbreche? Ja ja, ich bin doch blöde. Kein Backup vorm Start gemacht. Woher weißt du wieviele Sims er gemacht hat? Popt da regelmäßig LTspice auf? Ich sehe nix. Ich würde behaupten, es wurde nie gestartet.
Du kannst ihn jeder Zeit abbrechen. Da geht nichts kaputt. Der Optimizer packt nicht den Schaltplan an. Der manipuliert nur den .net file. Dann ruft er LTspice im batch mode mit dem .net file auf. Aus dem log-file liest er dann das Ergebnis. Das wiederholt sich dann immer wieder. Der .net file wird bei jeder Simulation des Schaltplans neu gemacht. Alternativ: View -> SPICE netlist Das erzeugt auch den .net file. Die letzte/neueste Version des Optimizers von Friedrich hat ein GUI. Kannst ja mal den probieren.
Nach Abbruch ist kein log im Arbeitsordner. Das ASC-file ist auch nicht verändert. net ist auch unverändert. Ich vermute es kommt nie dazu das LTspice gestartet wird. Vermutlich findet er es nicht und ne Fehlermeldung, naja wozu auch. Brauch kein Mensch. Dann habe ich in optimizer.pl reingeschaut und gleich in den ersten Zeilen steht: $simendfile="tinyperl simend.pl"; Ein simend.pl gibts aber gar nicht. Es gibt nur ein "simend-ltspice.pl" Es ist aber genau der Ordner den du mir zum Donwloaden oben anbotest. Soll ich das ändern? Sagt mal, bin ich der einzige der das ausprobiert? Geht es bei irgendwem?
Ja bei mir funktionert es. asdf schrieb: > unter win7 funzt dein path batch skript nicht. > > http://geekswithblogs.net/renso/archive/2009/10/21...
Das GUI ist eine Perl-Datei, die vergebens eine Datei Tk.pm aufruft, die ich auch nicht finden kann. Wenigstens ein Bild, wie diese GUI nun aussehen soll, fände ich gerne. Ist aber nicht da. Helmut, hast du ehemals diesen Optimizer für LTspice angepaßt? Da steigt doch keiner durch.
Ah. Eine Beschreibung des GUI findet sich in einem der zip's. Zurück zur optimizer.pl : Gerade gecheckt. Es ist wirklich deine Datei. Und nach der ominösen Zeile kommt: $ascfile="myfile.asc"; Da muß doch der richtige Projektname stehen, oder? GUI fällt wohl vorerst flach, da steht: The optimizer now comes now with a simple perl/TK based gui: ============================================================ The gui only works with a full Perl/TK installation. (get it free for windows at www.activestate.com) The gui simplifies and organizes the use of the optimizer Also nix mit tinyperl.
>Dann habe ich in optimizer.pl reingeschaut und gleich in den ersten
Zeilen steht:
$simendfile="tinyperl simend.pl";
Dafür steht im xxxxxxx_init.txt file der wirklich benutzte Aufruf.
simendfile=tinyperl simend_ltspice.pl
Dann weiß ich auch nicht weiter. Selbst wenn ich LTspice komplett in den Arbeitsordner reinkopiere, geht es nicht. An den Pfaden liegt es wohl dann auch nicht. Liegts vielleicht an irgendwelchen Aufrufparametern, die es in WinME noch nicht gab? Ansonsten müßte ich den ganzen Schrott mal auf Win7 probieren.
WinME, schlimmer geht's nimmer! Wer das verwendet, der ist selber Schuld. :-)
Muß eigentlich bei tinyperl dessen lib.zip ausgepackt werden oder kann die so da als eine Datei liegen?
Abdul K. schrieb: > Muß eigentlich bei tinyperl dessen lib.zip ausgepackt werden oder kann > die so da als eine Datei liegen? Bei mir ist sie nicht ausgepackt.
Hab es gerade unter WIN-7 probiert. Läuft auch dort! Beachte bei WIN-7 den Pfadnamen zu scad3.exe in meiner Datei _path.bat obwohl er in menem Explorer als "Programme (x86)" angezeigt wird. path=c:\tinyperl;"C:\Program Files (x86)\LTC\LTspiceIV";%path%C:\c
Hallo,
bei mir gehts.
Ich habe tinyperl installiert und die Pathvariable in
"Systemsteuerung->System->Erweiterte
Systemeinstellung->Erweitert->Umgebungsvariablen->Systemvariablen->Path-
>Bearbeiten" um den Path zu tinyperl und Ltspice erweitert.
Schaut dann etwa so aus:
"
......;C:\Program Files (x86)\LTC\LTspiceIV;C:\Program Files
(x86)\tinyperl;C:\Program Files (x86)\tinyperl\optimizer
"
Dann habe ich das File von Helmut S.
"
Datum: 27.05.2012 21:24
Angehängte Dateien:
Speaker_optimization.zip (10,6 KB, 9 Downloads)
"
in meine Ramdisk entpackt. Darin habe ich das File
"Z_speaker1opt_init.txt" in "myfile_init.txt" umbenannt.
Dann habe ich ein neues cmd.exe-Fenster geöffnet (ist wichtig damit die
neue Pathvariable wirkt) bin mittels cd in das Verzeichnis gewechselt,
in dem die Files von "Speaker_optimization.zip" liegen und habe den
Befehl
"tinyperl optimizer.pl" eingegeben.
MfG
egonotto
Helmut S. (helmuts) schrieb: > Hab es gerade unter WIN-7 probiert. Läuft auch dort! Zur Not kann Abdul ja mal ein anderes Perl ausprobieren "Erdbeeren-Perl" ab XP http://strawberryperl.com/ oder hier das (läuft auch ab Win98) http://www.chip.de/downloads/ActivePerl-for-Windows_12995284.html Editor (ab W2k) http://www.chip.de/downloads/Komodo-Edit_29950542.html Habe selber aber gerade keines installiert.
Auf Win7 läuft es nun. DOS-Box ist überflüssig. Einfach eine BAT-Datei erzeugen. Was mich wundert: Völlig irrsinnige Startwerte bringen trotzdem das richtige Ergebnis. Also ich ändere die Startwerte in Z_speaker1opt.asc und lasse LTspice einmal laufen und dann den Optimizer. Naja, erstmal ruhen.
Der Optimizer nimmt die Startwerte aus xxxx_init.txt. Dort stehen auch die Grenzwerte für die gesuchten Variablen.
Abdul K. schrieb: >> Kannst du mit meinem Converterscript von oben etwas anfangen? > Sieht sehr kryptisch aus. Sollen wohl Hausaufgaben für mich werten?? Ach was kryptisch und Hausaufgaben, simples Perl und "Windowskommandozeilensprache". Das Skript mit Endung .pl speichern, eine DOS-Box öffnen, in den Ordner vom Skript navigieren und mittels oben hinterlegtem Aufruf starten. Das Wort "perl" musst du u.U. durch "tinyperl" ersetzen. "<eingabe.txt" sagt Windows dem Skript zeilenweise die Datei eingabe.txt in die Nase zu schieben und ">ausgabe.txt" die Ausgabe des Skriptes zeilenweise in ausgabe.txt zu speichern. So einfach ist das. :-)
Das meinte ich auch nicht. Eher das hier: /([\d\.-]+):blank:([\d\.-]+):blank:([\d\.-]+)/; Ehrlich, jetzt weiß ich warum ich irgendwo las, Perl wäre nicht gerade leserlich. Erwartet hätte ich eher sowas: set zeile = read file bluberbla with delimiter="CRLF" set vector wörter to line with delimiter=" " oder so. AppleScript fand ich mal sehr schön. Zumal man damit direkt in dein DOM-Modell der benutzten Programme eingreifen kann.
Abdul K. schrieb: > Das meinte ich auch nicht. Eher das hier: >
1 | /([\d\.-]+)[[:blank:]]([\d\.-]+)[[:blank:]]([\d\.-]+)/; |
OK, zugegeben die Zeile hat was... Das ist ein Regular Expression, in Fachkreisen auch Regex. Das Ding wird Stück für Stück mit einer Zeile Text verglichen. Es handelt sich hier um ein relativ einfaches Regex, da gibt es deutlich Schlimmere.
1 | / -->leitet den Regex ein |
2 | [] -->die in den eckigen Klammern stehenden Zeichen sollen vorkommen: |
3 | \d -->digit 0-9 |
4 | \. -->ganz normaler Punkt (Der Punkt hat normalerweise eine andere Bedeutung und wird deshalb mittels \ escaped.) |
5 | - -->ganz normales Minuszeichen |
6 | + -->Die Zeichen innerhalb der eckigen Klammern können mehrfach vorkommen (>=1 mal). |
7 | () -->Alles was zum Ausdruck in den runden Klammern passt in Variable $n ($1,$2,...) speichern |
8 | [[:blank:]] -->frisst das Leerzeichen zwischen zwei Werten, da sollte eigentlich noch ein + hinter (hab ich vergessen) |
9 | und wieder das gleiche noch zwei mal |
Erwartet hätte ich eher sowas: > set zeile = read file bluberbla with delimiter="CRLF" > set vector wörter to line with delimiter=" " Bloss nicht, das riecht wie Basic grusel. Viel zu geschätzig.
Achso: angewendet wird das Regex hier auf die Variable $_ welche von der while-Schleife gefüllt wird.
Danke. Ich bin nur Gelegenheitsprogrammierer und brauche was, wo ich nicht nach 6 Monaten alles wieder lernen muß.
Abdul K. (ehydra) schrieb: > Danke. Ich bin nur Gelegenheitsprogrammierer und brauche was, wo ich > nicht nach 6 Monaten alles wieder lernen muß. Kann ich voll nachvollziehen. Nach der Code Erklärung durch perlbastel ist klar: Alles weiterhin unklar. Wie man sich sowas freiwillig antun kann ist mir schleierhaft. Da soll sich noch mal einer über ein goto bei BASIC aufregen.
Abdul K. schrieb: > Danke. Ich bin nur Gelegenheitsprogrammierer Du wirst es nicht glauben: Ich auch. > und brauche was, wo ich > nicht nach 6 Monaten alles wieder lernen muß. Och, mit Perl-Reference-Cards aus dem Internet geht es ganz gut. Irgendwann hat man das Zeug intus, für C brauche ich schon keinen K&R (Buch) mehr. Sooo kompliziert ist das alles nicht. Proxxon schrieb: > Wie man sich sowas freiwillig antun kann ist mir schleierhaft. Da soll > sich noch mal einer über ein goto bei BASIC aufregen. Also ich find das genial und Basic gruselig, aber jedem das Seine. :-) Genug OT...
Ja, das ist ne geile Sache wenn man es jeden Tag verwendet. Sehr effektiv. Ich kenne den Effekt auch von LTspice. Mal ein Jahr nicht benutzt und man geht einige Tage sozusagen virtuell am Stock. Ich handhabe das Problem mittlerweile generell so, daß ich alle meine Tools regelmäßig a bisserl benutze. Sozusagen die berühmte Bewegungsfahrt bei der BW ;-) Dann ist die Restartphase deutlich kürzer. Ich schaue mir auch abundzu meine alten Platinenentwicklungen an und sogar alte Ordner. Mit dem Hobbythek-Brief zum TMS1000 Türgong hatte mich meine Mutter ca. 1978 vollends infiziert. Sie ist schuld und ich habs im Ordner, lustigerweise. Für den Optimzier gibts zwei super Anwendungen: - Temperaturausgleichnetzwerke (in Minuten) - SMPS Regelkonstanten testen (wohl über Nacht)
perlbastel (Gast) schrieb: > Also ich find das genial und Basic gruselig, aber jedem das Seine. :-) Das ist normal, wenn man tief in einer Materie drinsteckt, wie das bei dir wohl der Fall ist. Ich finde es nur abartig ein goto in anderen Programmiersprachen für "unnachvollziehbares wildes springen" zu verunglimpfen, während solche Kauderwelchausdrücke dann normale Programmierkunst sein sollen. Dagegen ist selbst C geradezu selbsterklärend (wenn man es nicht in pervertierter Form verwendet, was bei C auch möglich ist). ;) Abdul K. (ehydra) schrieb > Ich kenne den Effekt auch von LTspice. Mal ein Jahr nicht benutzt und > man geht einige Tage sozusagen virtuell am Stock. Den "Effekt" kenne ich von vielen Programmen die (zu) wenig intuitiv sind. > Ich handhabe das Problem mittlerweile generell so, daß ich alle meine > Tools regelmäßig a bisserl benutze. Sozusagen die berühmte > Bewegungsfahrt bei der BW ;-) Dann ist die Restartphase deutlich kürzer. Ich schreibe mir vieles in persönlichen Liesmich Dateien auf. Das Wichtigste ist möglichst schnell alles (wieder) zu finden. Informationen sind ja prinzipiell seit dem es das WWW gibt genug vorhanden. Nur muss man sich die jedesmal (wenn man eine zeitlang mal ein Tool nicht mehr angepackt hat) wieder zeitaufwendig zusammensuchen. Also besser Notizen machen. Mir sind gut kommentierte Beispiele zum Einstieg immer lieb und wichtig.
Da ist doch Ironie drinnen, oder? Bloß nicht den großen Matrizen-Meister kritisieren wegen dem GUI. Du fällst so wie ich in Ungnade! Anstatt, daß er sich auf den Kernel konzentriert und das GUI von einem anderen Profi machen läßt. Client-Server Architektur wäre dann auch gleich miterledigt. So kommt es dann eben zu Kuriositäten wie WMF-Export von Bildchen. Bei mir landet möglichst alles in ASCII-Dateien, notfalls RTF. Nach dem Suchen kommt nämlich das Wiederfinden. Momentan mit locate32. Organisieren tue ich nach Thema nur halbherzig. M$ interessiert sich ja nur für das was man sich multimediamäßig reinzog. Das wird dann in unsichtbaren Ordnern zwischengespeichert, die im normalen Dateibrowser unerreichbar sind (Es fehlen Pfad-Teile im Dateipfad).
Ich habe noch weiter rumgespielt. Man kann die Start- und Grenzwerte noch viel weiter fassen und er findet trotzdem ne Lösung. Dauert dann regelmäßig 60 Runden, also 50% länger. Da steckt sicher weitere Musik drinnen! Danke Helmut für die Starthilfe.
Eine Frage an Helmut: Warum hast du bei der Kostenfunktion noch zusätzlich durch f dividiert? mfg
kay schrieb: > Eine Frage an Helmut: Warum hast du bei der Kostenfunktion noch > zusätzlich durch f dividiert? > > mfg Diese Gewichtung mache ich, damit bei der Integration die Werte bei hohen Frequenzen nicht total überbewertet werden. Stell mal die Frequenzachse auf linear, dann siehst du, dass der wichtige untere Bereich zu "kurz" käme, wenn man keine Gewichtungsfunktion hätte. Meine Gewichtungsfunktion hier ist Faktor 1/freq.
Läuft jetzt auch unter WinME. Ich weiß nicht warum. Zwischenzeitlich hatte ich den Rechner aber mal neugestartet.
1. Das mit der nicht notwendigen Phase habe ich probiert. Der Fitter kann es tatsächlich ohne diese Info. Das ermöglicht rein skalare Messungen, also eine simple einkanalige Soundkarte tuts! Ich denke als Kriterium reicht: Lineare Schaltung ohne verstärkende Elemente. Oder ist jemand anderer Meinung? 2. Leider ist der Fitter nicht fähig, selbst passende Startwerte zu finden. Sobald man etwas weiter von den idealen Ergebniswerten startet, findet er nicht den Weg. und dann das Problem : 3. So, der Realitycheck mit einer DCF77 Ferritantenne. Problem dabei: Ich kann mir nicht erklären, wieso LTspice beim Einlesen der realen Daten alles kleiner -40dB auf diese -40dB begrenzt. Höhere Werte sehen richtig aus. Dazu habe ich dann mal einige Testzeilen in den PWL-Abschnitt des SUBs reingeknallt. Das verstehe ich nicht! Anbei alle notwendigen Daten. In den FFT-Daten der Ferritantenne ist noch ein Auflösungsfehler der zu einem nicht vorhandenen Peak führt, wird gerade untersucht. Ist aber kein Fehler von LTspice und hier erstmal ohne Belang.
Hallo Abdul, danke für die Frage 3. DCF77.sub Ändere den Wert für R1 auf 0.00001. Dann geht es bis -100dB. * 2012-06-07 16:40:05.0 0.3662 49999.8779 *F [Hz] Imp [Ohm] Phase [ø] .subckt captured 1 2 R1 1 10 0.00001 V1 10 11 0 B1 11 2 V=I(V1) DB FREQ= +49999.8779 -92.5 0
Danke Helmut! Habe das jetzt eigenständig um eine Null nochmals erweitert, damit ich bis -120dB gehen kann. Weiter brauch ich es nicht. Kannst du mal erklären, was die Magie darin ist? Warum reicht nicht eine B-Quelle? Deine Spannungsquelle dient wohl der Strommessung, aber wozu ein Widerstand?
Ich muss intern einen Widerstand einfügen, damit man außen auch eine Spannungsquelle anschließen kann. Hätte ich intern direkt eine Spannungsquelle, dann würde das nicht gehen, da ich dann zwei Spannungsquellen parallel hätte. Das geht aber in SPICE nicht.
Du mußt ein Gott sein. Ich trau mich an deine Konstrukte gar nicht mehr ran.
Der Olymp ist nur etwas sehr übersichtlich. Drei Leser, drei Downloads. Dabei ist das ne geile Geschichte. Kann man ja beliebig abwandeln für eigene Interessen. Das mit der unnötigen Phase ist einen eigenen Hüpfer wert.
Gibt es bei der PWL-Struktur auch ein Format bei dem ich nicht die Frequenz in jeder Zeile angeben muß? Mir ist aufgefallen, daß man z.B. mit geschweiften Klammern berechenbare Ausdrücke während des Einlesens, benutzen kann. Leider gibt mir SpectrumLab keine Einzelfrequenzen zu den FFT bins mit aus. Die muß ich dann reinfummeln und auch noch sequenzieren.
Morgendlich nochmal das mit der Frequenz. Ich habe die Struktur auf das hier reduziert: * 2012-06-07 23:43:34.9 46.8750 0.0000 *F [Hz] Imp [Ohm] Phase [ø] .subckt captured 1 2 .param f=46.8750 R1 1 10 0.0000001 V1 10 11 0 B1 11 2 V=I(V1) DB FREQ= +{0*f} -75.2 0 +{1*f} -97.6 0 +{2*f} -90.7 0 +{3*f} -82.9 0 +{4*f} -83.9 0 +{5*f} -85.9 0 +{6*f} -85.5 0 +{7*f} -80.2 0 Nur die Hochzählerei kriege ich nicht raus. Habe mir die bekannten PWL-Varianten alle angeschaut, aber alle wollen die Frequenz und die Phase in der Liste explizit drinnenhaben. Gibts da keinen Trick die zu entfernen, also nur einmal zu definieren? Und dann die Frequenz automatisch hochsteppen lassen! Da muß ich mich ja doch mit Perl schon jetzt rumquälen. Früher hatte ich mal einen Texteditor (auf dem Mac), der automatisch Zeilennummern einsetzen konnte für ganze Listen. Gibts da einen der auf Windoof läuft? Warum hat die Liste eigentlich jeweils ein + am Zeilenanfang. Scheint mir ein Trick zu sein, um im Time-Domain die Frequency-Domain abzubilden. Oder sehe ich das falsch?
> Warum hat die Liste eigentlich jeweils ein + am Zeilenanfang. Scheint
mir ein Trick zu sein, um im Time-Domain die Frequency-Domain
abzubilden. Oder sehe ich das falsch?
Das + am Anfang der Zeile haben die Väter von SPICE vor 40 Jahren
definiert.
Das bedeutet nichts anderes als eine Fortsetzung der vorherigen Zeile.
Zum Glück gibt es das. Sonst müsste man elend lange Zeilen machen.
Das + geht übrigens mit jeder Art von SPICE-Zeilen.
B1 11 2 V=I(V1) DB FREQ=
+{0*f} -75.2 0
+{1*f} -97.6 0
Das macht SPICE beim Einlesen daraus.
B1 11 2 V=I(V1) DB FREQ= {0*f} -75.2 0 {1*f} -97.6 0
Stimmt, hatte ich mit dem + für Werterhöhung verwechselt. Aber auch in deinem Vorschlag bleibt f jeweils für jeden Bin drinnen. Da kann wohl nur Mike was dran ändern. Vielleicht kann das Excel, hm. Aber bevor ich Excel lerne, dann lieber Perl ;-)
> Aber auch in deinem Vorschlag bleibt f jeweils für jeden Bin drinnen. > Da kann wohl nur Mike was dran ändern. So groß ist der Aufwand für den Anwender nicht. Mike macht da bestimmt keine Extralösung, wenn brauchbare Standards (SPICE-Syntax) existieren und bereits implementiert sind.
Hm. Du meinst ich soll bei HSPICE gucken gehen... Aber mir fällt gerade was auf, was wenn erstes + für Zeilenanhängung und zweites + für Werterhöhung. Dann hätte ich eine Konstante. Werde ich mal probieren.
Scheint nicht zu gehen. Habe es in diversen Varianten getestet. Seltsam. Selbst das geht nicht: + {+46.8750} -75.2 0
Zum HP4194 gibts von Agilent noch diverse Applikationsschriften: http://www.home.agilent.com/agilent/facet.jspx?k=HP4194&neighborhood=ETM&kt=1&cc=DE&lc=ger&homesearch=Search&searchbtn=Suche zum Beispiel http://cp.literature.agilent.com/litweb/pdf/5950-2882.pdf "Impedance Characterization of Resonators using the 4194A Impedance / Gain-Phase Analyzer (AN 339-1)" von 1985, darin sind auf Seite 4 die fünf Ersatzschaltungen zu sehen. im HP-Journal stand im Jan 1980 nur etwas zum Vorgänger HP4191: http://www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/hpjindex.html#1981 Der 4195 hatte wohl dieselbe Funktion wie der 4194, dazu habe ich hier ein gedrucktes Einführungs-Handbuch (deutsche Ausgabe) und auch das oben erwähnte Impedance Measurement Handbook.
Christoph Kessler (db1uq) schrieb: > Zum HP4194 gibts von Agilent noch diverse Applikationsschriften: > http://www.home.agilent.com/agilent/facet.jspx?k=HP4194&neighborhood=ETM&kt=1&cc=DE&lc=ger&homesearch=Search&searchbtn=Suche > > zum Beispiel http://cp.literature.agilent.com/litweb/pdf/5950-2882.pdf > "Impedance Characterization of Resonators using the 4194A Impedance / > Gain-Phase Analyzer (AN 339-1)" von 1985, darin sind auf Seite 4 die > fünf Ersatzschaltungen zu sehen. > > im HP-Journal stand im Jan 1980 nur etwas zum Vorgänger HP4191: > http://www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/hpjindex.html#1981 > Danke Christoph. Werde ich lesen. > und auch das oben > erwähnte Impedance Measurement Handbook. Das ist online.
Stimmt, meine gedruckte Version ist wesentlich älter http://cp.literature.agilent.com/litweb/pdf/5950-3000.pdf (von 2009) ab PDF-Seite 124 sind die fünf Modelle mit je drei bzw vier Elementen.
So, das ganze Spektrum ist enthalten. Ich habe noch die Meßdaten per Hand auf absoluten Pegel gebracht. Muß leider erstmal aufgeben trotz einigen Versuchen u.a. Einschränkung des Frequenzbereichs. Der Fitter findet keine Lösung. Vielleicht liegts an dem Rauschen. Ein Mensch kann ohne viel Aufwand den resonanten Bereich erkennen. Vielleicht will ja jemand spielen. Im Generator sind die gemessenen Ersatzwerte der Ferritantenne, wobei der R der Spule nur den DC-Widerstand beeinhaltet. Also nicht perfekt. In der FFT zeigt die reale Antenne aber klar die Impulse von DCF77.
Die Lösung ist einfach. Man muss hier die Daten auf den Zielbereich beschränken und eventuell sogar noch filtern. Ein einfacher Bandpass bei 77,5kHz kann nicht mehrere Peaks haben.
Das sind echte Daten direkt aus der Ferritantenne. Also sind auch einige Peaks durch Sender drinnen. Die Frage stellt sich einfach, wie man dem Optimizer beibringt was wichtig und was unwichtig. Die Gewichtungsfunktion ist das Problem. Auch weiß ich nicht, was er zu dem Grundrauschen sagt. Speziell bei der Ferritantenne wäre es auch praktisch gesehen, nicht möglich diese komplett abzuschirmen und dann einen Rauschgenerator als Quelle zum Vermessen zu benutzen. Sobald man eine Ferritantenne mit nur etwas besserem Q versucht irgendwie abzuschirmen, wird sie total verstimmt! Bei einem Q von z.B. mehreren hundert, reicht das bloße Sitzem vor dem Meßaufbau für ordentlich andere Werte. Schon die Frage, ob Scope während der Messung dran oder ab, ist ein Problem. Die zusätzliche Erdverbindung verstimmt bereits deutlich die Antenne. Um zu prüfen, ob ich keinen Mist mache, habe ich die PAL-Frequenz Peaks drinnengelassen, also das TV im gleichen Raum blieb an. Das sind so mehr oder weniger die einzigen Peaks die man aus dem Spektrum noch entfernen könnte. Das Ersatzmodell für die Antenne ist auch erstmal in seiner Struktur ok. Ich werde mal eine andere Form der FFT benutzen und schauen.
Hm. Da fehlt noch das Diagramm, welches Helmut selbst erzeugte. Hatte ich wohl vergessen heute morgen hochzuladen.
Zur Messung von RLC-Bauteilen mit der Soundkarte gibt es hier ein Vortragsskript von DL4SDC: http://www.p26.org/p26/vortraege/rlc/rlc-meter.pdf http://www.p26.org/p26/vortraege/rlc/rlcmeter-20051108.tar.gz Source dazu http://www.p26.org/p26/vortraege/rlc/rlcmeter.static.zip Objectcode Vom gleichen Autor gibt es noch einen Artikel im Praxisheft18 der AATiS: http://www.aatis.de/content/praxisheft-18
Ich habe noch weiter mit dem Fitter gespielt, bin aber nicht wirklich erfolgreich gewesen. Erst habe ich die FFT in SpectrumLab durch eine FFT in LTspice ersetzt. In der Hoffnung, eine längere Aufzeichnung wird weicher ohne den heftigen Rauschteppich. Das kann man in SL gut sehen, wenn man die Anzahl der Bins erhöht. Dazu wurde in LTspice ein längeres Stück Samples (20 Sekunden) von der Soundcard eingelesen. Irgendwie ist die FFT in beiden Programmen aber sehr unterschiedlich implementiert, so daß in SL 2048 bins kein Problem sind, in LTspice aber 2 Millionen bins notwendig sind, damit die obere Grenzfrequenz die 100KHz erreicht. Also ist das kein toller Weg. Die entstehende exportierte FFT-Datei ist 100MB groß! Eine Länge von einer Sekunde brachte auch keinen Fortschritt. Dann habe ich mit dem Frequenzbereich der Simulation gespielt. Da sieht es so aus, daß diese möglichst symmetrisch zur f0 Wunschfrequenz sein sollte, dann läuft der Fitter am besten. Vielleicht wäre eine geometrische Relation sogar noch besser? Weiter habe ich die Anzahl der Stützfrequenzen variiert. Auch hier kein eindeutiges Ergebnis. Eine Umstellung von linear auf dekadisch scheint leicht besser. Desweiteren wurde die Cost-Funktion in diversen Abwandlungen ausgetestet. Auch in einer Variante, die f0 konzentrisch arbeitet. Hat nichts gebracht. Dann habe ich versucht, die Verstärkung beider Kanäle z und z1 nominal gleich zu machen. Das verändert das Fitter-Verhalten sehr stark. Nur leider weiß ich nicht, wie man eine Fitter-Funktion bauen könnte, die diese Verstärkungsabhängigkeit eliminiert. Bloßes Einführen einer weiteren Variable, die durch den Fitter automatisch als 5. Variable mitoptimiert wird, hat nur Chaos verursacht. Vielleicht müßte man hier die Gewichtung der Freiheitsgrade auch noch unterschiedlich machen. Die sind ja momentan alle gleichberechtigt und nur durch die Cost-Funktion miteinander verknüpft. Mir scheint es so, daß der Optimierer immer dann eine akzeptable Lösung findet, wenn die Voreinstellung den Peak in den Bereich des Bandpasses bringt. Er dann also nur noch links oder rechts den Berg hoch optimieren muß. Ist er weiter weg, dann verrennt er sich total. Ich bin also erstmal am Ende mit dem Latein. Dann noch ne Frage zur Cost-Funktion nach Helmut: In deiner Funktion wertest du nur die Magnitude aus, richtig? Also die jeweilige Phase bleibt unberücksichtigt. Ich stelle mir das Ignorieren der Phase als optimal vor, wenn man eine Messung machte die diese nicht beeinhaltet.
Ich wollte ja schon fast erstmal aufgeben, aber nach einigem Überlegen dann: Hier eine neue Version. Ich habe die Cost-Funktion so umgeschrieben, daß sie nun unabhängig vom absoluten Pegel ist. Der ist ja zumindest bei einer Messung als Antenne mit nur einem Rauschteppich durch die Atmosphäre nicht definierbar. Damit wird sie offensichtlich wesentlich stabiler. Nun kann ich sogar den Frequenzbereich völlig großzügig maximal machen und es funktioniert. War vorher undenkbar. Vielleicht geht ja noch mehr durch Verbesserung der Cost-Funktion? Spielt mal damit! Sieht danach aus, daß nun an anderen Baustellen optimiert werden muß: - Ersatzmodell der Antenne - bessere Messung Also was ich meine: Vermutlich kann das Fitting momentan gar nicht besser werden. Das ZIP enthält alle notwendigen Dateien außer LTspice und Tinyperl. Ergebnis_2a: Vollansicht des Spektrums Ergebnis_2b: Zoom in die interessante Region Die Startwerte liegen ordentlich neben dem Maximum, so daß der Fitter nicht zufällig zu nahe am Optimum startet.
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.