ich bin neu hier und arbeite gerade an einer Praktikumsaufgabe.
Bei einem LCR-Messgeräte-Projekt soll ich mittels Fitting einer Sinusfunktion die Phasenlage zwischen Spannung und Strom bestimmen. Das funktioniert anfangs gut: Ich messe mit einem STM32 beide Signale (Strom und Spannung) und passe dann jeweils Phase, Amplitude und Offset der Sinuskurven für den Strom an, um die Phasendifferenz zu berechnen.
Anfangs stimmen die Ergebnisse gut mit dem Oszilloskop überein.
Allerdings driftet der Messfehler (Differenz zwischen Oszi und STM32) über längere Zeiträume (mehrere Stunden, z. B. über Nacht), obwohl das Messobjekt unverändert ist und ein Referenz-LCR-Meter am nächsten Tag den gleichen Wert liefert.
Jetzt bin ich mir unsicher:
Liegt das Problem vielleicht am Fit?
Oder stört der Offset den Nulldurchgang, sodass die Phase scheinbar „wandert“?
Gibt es eine einfache Möglichkeit, die Messung so zu stabilisieren – z. B. softwareseitig oder schon beim Messen?
Die Aufgabe ist es, die Phasenmessung auch über längere Zeiträume verlässlich zu vergleichen.
Oder stört der Offset den Nulldurchgang, sodass die Phase scheinbar
„wandert“?
Was meinst du mit "Nulldurchgang"?
Der Nulldurchgang eines Sinus liegt nur dann bei Phase 0° bzw. 180°, wenn dem Sinus keine DC-Komponente überlagert ist.
Es kommt also auf dein Fitting an, ob es mit einem Offset umgehen kann.
Oder stört der Offset den Nulldurchgang, sodass die Phase scheinbar
„wandert“?
Was meinst du mit "Nulldurchgang"?
Der Nulldurchgang eines Sinus liegt nur dann bei Phase 0° bzw. 180°,
wenn dem Sinus keine DC-Komponente überlagert ist.
Es kommt also auf dein Fitting an, ob es mit einem Offset umgehen kann.
Nein, das ist die Frage "Phasenlage zwischen Spannung und Strom bestimmen" wie beschrieben,
Eine Phasenbestimmung nur am Nulldurchgang festzumachen, ist ja auch
übler Murks. Da reicht schon ein DC-Offset um die Phasenbestimmung
in die Irre zu führen.
Richtig würde man die Summe der Abstandsquadrate zu einer Referenz
bestimmen, und durch Iteration der Phase der Referenz das Minimum
suchen. Das ist natürlich ein /wenig/ aufwendiger.
Eine Phasenbestimmung nur am Nulldurchgang festzumachen, ist ja auch
übler Murks. Da reicht schon ein DC-Offset um die Phasenbestimmung
in die Irre zu führen.
Richtig würde man die Summe der Abstandsquadrate zu einer Referenz
bestimmen, und durch Iteration der Phase der Referenz das Minimum
suchen. Das ist natürlich ein /wenig/ aufwendiger.
wie geschrieben
"Bei einem LCR-Messgeräte-Projekt soll ich mittels Fitting einer
Sinusfunktion die Phasenlage zwischen Spannung und Strom bestimmen. Das
funktioniert anfangs gut: Ich messe mit einem STM32 beide Signale (Strom
und Spannung) und passe dann jeweils Phase, Amplitude und Offset der
Sinuskurven für den Strom an, um die Phasendifferenz zu berechnen."
Genau das macht die Funktion ja, also wieso ist es denn jetzt Murks?
Abtastung synchron zur Anregung?
Fitverfahren?
Sinus geht als linear least Square
Kann auch einen Offset mit fitten.
Liefert Amplitude und Phase nur begrenzt von Noise bzw Messedauer.
Im Prinzip ist das bei Software auch mein erster Gedanke, aber der Code ist so aufgebaut das es keine Variablen gibt, die von Messung zu Messung angepasst werden.
Aber vielleicht lass ich mir die trotzdem nochmal alle anzeigen, weil wenn ein Fehler drin ist, dann ist das ja unbeabsichtigt, vielleicht greift was auf den Speicher zu.
Abtastung synchron zur Anregung?
Fitverfahren?
Sinus geht als linear least Square
Kann auch einen Offset mit fitten.
Liefert Amplitude und Phase nur begrenzt von Noise bzw Messedauer.
Also bei mir ist das quasi synchron, weil sowohl DAC als auch ADC denselben Takt vom STM32 benutzen – also nicht „wild asynchron“, sondern beide hängen am gleichen Timer-Teiler, wenn ich das richtig verstanden hab.
Ich lasse den DAC einen Sinus ausgeben und messe dann mit zwei ADC-Kanälen gleichzeitig:
einmal die Spannung direkt am Prüfling
und den Strom (über einen Messwiderstand in Reihe zum Prüfling)
Pro Messung erfasse ich genau eine oder zwei Perioden, aktuell sind’s 512 Werte pro Kanal im DMA-Modus. Die sind dann gleichmäßig verteilt über den Sinus.
Im Speicher sieht das so aus: Es kommen abwechselnd Werte rein – erst einer für U, dann zwei für I, dann wieder zwei für U, usw. Am Ende bleibt ein einzelner U-Wert übrig, sodass ich insgesamt 1024 Messwerte habe.
U I I U U I I U U I I U U I I U U I I U U I I ...I I U
dann werden die beiden ersten U gemittelt und die beiden ersten I, das ist mein erster neuer Wert
dann 3. und 4. für den zweiten neuen Wert
Danach bilde ich für jedes Messpaar den Mittelwert, sodass ich am Ende 256 Werte für U und 256 für I habe.
Dann passe ich die neuen Stromkurve (I) so an, dass sie möglichst gut zur neunen Spannungskurve (U) passt – also Offset, Amplitude und Phase werden so geändert, dass die Summe der Fehlerquadrate möglichst klein ist (klassisches Least Squares-Fit). Daraus ergibt sich dann die Phasenlage zwischen Spannung und Strom.
Aus der Amplitude und der Phase kann ich dann den komplexen Widerstand berechnen und mit f dann L oder C
Aber wenn ich jetzt die Langzeitmessung sehe, dann läuft Oszi zu STM weg
Ich hoffe, das war halbwegs verständlich beschrieben
Dann würde ich U und I alternierend messen, Mittelwertbildung erfolgt ja über den Fit. Der Phase- bzw Timedelay durch das Multiplexing ist fix, kann man rechnen und oder messen.
Mach dich mal schlau über den Sinusfit , Quellen kann ich Dir morgen schicken. Beim Sinusfit musst du die Matrix invertieren, aber das brauchst Du nur einmal (pro Frequenz) zu machen.
Ergebnis ist dann pro Kurve asin(w)+bcos(w)+C
Über arctan dann die Phasen und dann die Phasendifferenz ...
Und dann so viele Perioden wie der Speicher hergibt ;)
Grundregel der Signalverarbeitung: Das überlegene Verfahren integriert länger:D
Dann würde ich U und I alternierend messen, Mittelwertbildung erfolgt ja
über den Fit. Der Phase- bzw Timedelay durch das Multiplexing ist fix,
kann man rechnen und oder messen.
Ja richtig, kann man messen und ist dann fix, in der Theorie ergibt sich aber ein minimaler Fehler wenn die Frequenz des STM nicht stabil ist, das ist bei 200 ppm nicht weltbewegend, das Projekt hat aber auch theoretische Hintergründe "unnötige" Fehlerquellen vollständig auszuschließen
Mach dich mal schlau über den Sinusfit , Quellen kann ich Dir morgen
schicken. Beim Sinusfit musst du die Matrix invertieren, aber das
brauchst Du nur einmal (pro Frequenz) zu machen.
Ich denke schon dass Sinus Fit funktioniert, weil wenn ich verschiedene Phasen durch Austausch des Messobjektes habe, dann werden die Phasen jeweils korrekt angezeigt wenn ich das mit dem Oszilloskop vergleiche.
Ergebnis ist dann pro Kurve asin(w)+bcos(w)+C
Über arctan dann die Phasen und dann die Phasendifferenz ...
Und dann so viele Perioden wie der Speicher hergibt ;)
Das Problem ist die Abweichung zum Oszi über einen längeren Zeitraumm, der STM zeigt teils weniger Veränderung. Deswegen die Frage, was muss ich für die Phasenberechnung anders machen als das Signal wie es gemessen wird zu U zu fitten, ich habe Offset, Phase und Amplitude als Variablen. Muss ich den Offset doch noch in die Phase reinrechnen, ich denke doch eher nicht.
Grundregel der Signalverarbeitung: Das überlegene Verfahren integriert
länger:D
ich habe das Verfahren auch über mehrere Perioden getestet, 2 und 4, aber kein Unterschied, obwohl jede Langzeitmessung immer etwas anders aussieht, aber die Größenordnung ähnlich.
Die Phasendrift zum Oszi ist so max 1° meist weniger, also nicht so viel das ich glaube das die Formel für den Fit falsch ist, da würde ich größere Fehler erwarten und nicht das die so "driften"
Aber die 1° sind entscheidend wenn ich L oder C bestimmen will und die Phase zwischen Strom und Spannung nicht nahe genug an 90° ist
Hmm.
Also ich will es so ausdrücken: Deine Schilderung wirkt etwas
planlos -- aber ich kann nicht beurteilen, ob schon die Auf-
gabe planlos gestellt ist, oder nur Dein Vorgehen nicht optimal
ist.
Mir wird nicht klar, was feste Vorgaben sind, was als Vorschläge
oder Empfehlungen aufzufassen ist, und wo Freiheitsgrade für
eigene Entscheidungen bestehen.
Oder stört der Offset den Nulldurchgang, sodass die Phase
scheinbar „wandert“?
Kann man ohne Kenntnis des Algorithmus/Programms m.E. nicht
beantworten.
Gibt es eine einfache Möglichkeit, die Messung so zu
stabilisieren – z. B. softwareseitig oder schon beim
Messen?
???
Ich würde einen als zuverlässig bekannten zweikanaligen
DDS-Generator direkt an den U- und I-Kanal anschließen
und schauen, ob die Phasendrift immer noch auftritt.
Noch einfacherer Test als Vorstufe: I- und U-Kanal am µC
verbinden, EINEN Generator anschließen und schauen, ob
zuverlässig 0° Phasenverschiebung gemessen werden.
Die Aufgabe ist es, die Phasenmessung auch über längere
Zeiträume verlässlich zu vergleichen.
Dann passe ich die neuen Stromkurve (I) so an, dass sie möglichst gut
zur neunen Spannungskurve (U) passt – also Offset, Amplitude und Phase
werden so geändert, dass die Summe der Fehlerquadrate möglichst klein
ist (klassisches Least Squares-Fit).
Warum möchtest du überhaupt irgendetwas anpassen?
Rechne die Werte doch direkt aus. Da du den Sinus selber ausgibst, kennst du seine Amplitude und die Zeit des Nulldurchgangs. Du musst dir dazu nur auch noch den Cosinus erzeugen und kannst dann deine Messdaten einmal mit dem Wert des Sinus und einmal mit dem Wert des Cosinus multipliziert über komplette Perioden aufintegrieren (s.u. Orthogonalität Seite 1-3). Phase und Amplitude kannst du direkt aus den beiden Integralen berechnen und irgendein Offset kann dir egal sein. Oder brauchst du den Offset irgendwozu?
Stichwort: Additionstheoreme für Sinus und Kosinus,
Orthogonalität (S.1-3) https://vhm.mathematik.uni-stuttgart.de/Vorlesungen/Fourieranalysis/Folien_Reelle_Fourier-Reihe.pdf
Warum möchtest du überhaupt irgendetwas anpassen?
Rechne die Werte doch direkt aus. Da du den Sinus
selber ausgibst, kennst du seine Amplitude und die
Zeit des Nulldurchgangs.
Stimmt zwar -- ist aber für die Rechnung gar nicht
notwendig.
Du musst dir dazu nur auch noch den Cosinus erzeugen
und kannst dann deine Messdaten einmal mit dem Wert
des Sinus und einmal mit dem Wert des Cosinus
multipliziert über komplette Perioden aufintegrieren
(s.u. Orthogonalität Seite 1-3). Phase und Amplitude
kannst du direkt aus den beiden Integralen berechnen
Korrekt.
und irgendein Offset kann dir egal sein.
Hier habe ich erstmal gewaltig gestutzt -- aber Du hast
Recht: Konstante und Sinus (bzw. Cosinus) sind ja AUCH
orthogonal... man braucht den Offset tatsächlich nicht.
Stimmt zwar -- ist aber für die Rechnung gar nicht
notwendig.
Naja, die Anzahl der Summanden für das Integral, i.e. die Periodendauer braucht man schon, damit z.B. Offsets sauber rausfallen. Die Amplitude geht in das Integral als Faktor ein.
Die Methode kann den Wert des Offsets nicht liefern. Man könnte allerdings zusätzlich das Signal über eine Periode integrieren und hätte ihn dann. Ob der Wert irgend wozu gebraucht wird, war eine Frage.
Naja, die Anzahl der Summanden für das Integral, i.e. die Periodendauer
braucht man schon, damit z.B. Offsets sauber rausfallen.
Dann sprechen wir hier offensichtlich von verschiedenen Methoden.
Wenn ich mir eine handvoll Messdaten hernehme und da einen Fit mit der Funktion
$$y = amp * sin( frq * x + pha) + off$$
drauflege, dann bekomme ich schon brauchbare Werte für Amplitude, Frequenz, Phase und Offset.
Es muß nur der zeitlich Abstand zwischen den Samples bekannt sein.
Mit dem Fit kann man auch gleich prüfen, wie sinusförmig die Messwerte wirklich sind (unterste Kurve).
Bei der Anwendung hier dürfte es einfacher werden, da die Frequenz vorgegeben ist.
Allerdings driftet der Messfehler über längere Zeiträume
Was passiert bei einem Widerstand z.B. 10 kOhm als Messobjekt?
Lass Dir doch die 512 Werte pro Kanal mal alle paar Minuten ausgeben und vergleiche die miteinander.
Hmm.
Also ich will es so ausdrücken: Deine Schilderung wirkt etwas
planlos -- aber ich kann nicht beurteilen, ob schon die Auf-
gabe planlos gestellt ist, oder nur Dein Vorgehen nicht optimal
ist.
Was ist daran planlos, vielleicht ein bisschen zu kompakt, also es ist ein Projekt wie man ein LCR entwickelt, Baugruppen vorhanden die werden verschaltet und auf dem STM, Herzstück des LCR Meters der Algorithmus programmiert.
Bei der Phase die ermittellt wird läuft es zum Vergleichmessgereät über Zeit davon. Darum gehts,
Oder stört der Offset den Nulldurchgang, sodass die Phase
scheinbar „wandert“?
Kann man ohne Kenntnis des Algorithmus/Programms m.E. nicht
beantworten.
Gibt es eine einfache Möglichkeit, die Messung so zu
stabilisieren – z. B. softwareseitig oder schon beim
Messen?
???
Ich würde einen als zuverlässig bekannten zweikanaligen
DDS-Generator direkt an den U- und I-Kanal anschließen
und schauen, ob die Phasendrift immer noch auftritt.
Noch einfacherer Test als Vorstufe: I- und U-Kanal am µC
verbinden, EINEN Generator anschließen und schauen, ob
zuverlässig 0° Phasenverschiebung gemessen werden.
das ist ein guter Punkt, mit einem Generator als Quelle wo alles fix bleibt kann ich Softwarefehler, ausschließen.
Aber wie geschrieben, es hat den Anschein, das der Offset eine Rolle spielt. Wenn es damit funktioniert kann ich Software als Fehler ausschließen und das es keinen Offset gibt, bleibt diese Möglichkeit bestehen.
Die Aufgabe ist es, die Phasenmessung auch über längere
Zeiträume verlässlich zu vergleichen.
Dann passe ich die neuen Stromkurve (I) so an, dass sie möglichst gut
zur neunen Spannungskurve (U) passt – also Offset, Amplitude und Phase
werden so geändert, dass die Summe der Fehlerquadrate möglichst klein
ist (klassisches Least Squares-Fit).
Warum möchtest du überhaupt irgendetwas anpassen?
Ja, ist schon korrekt das es mehrere Lösungen gibt, natürlich kann ich für die Grundwelle die Fourier Komponenten bestimmen und dann habe ich auch die Phasenlage und Amplitude, das setzt aber voraus, das ich die Frequenz immer auch selber vorgebe wie ich es gerade mache, so das die Messung exakt ganzzahlige Perioden im Speicher lädt.
Es gibt auch andere Versuche, wo die Frequenz so eingestellt wird, das nicht exakt n Perioden in den Speicher passen und zwischen zwei Perioden auch nicht eine ganzzahlige Anzahl an Samples liegt.
Natürlich kann man dann auch erst die Frequenz genau bestimmen und dann mit bekannter Frequenz das Verfahren anwenden die Fourier Komponenten zu bestimmen, aber dann kann ich es eigentlich auch machen wie bisher.
Aber wenn ich es anders mache, wie soll dass das Problem mit der Drift lösen?
Die 'Drift' wird um Code liegen..
Andere Methoden machen andere Fehler.
Der 4 Parameter Sinusfit ist schon erfunden... Ist auch schon genormt .. anders als bei der FFT funktioniert der bei allen Frequenzen ohne Leakage ..
Ist halt 'etwas' rechenaufwendiger.
Dann sprechen wir hier offensichtlich von verschiedenen Methoden.
Offensichtlich - ich sprach von einer Methode ohne Fitterei mit direkter Berechnung der Werte aus einem Integral über ganzzahlige Vielfache der Periodendauer, so wie in dem verlinkten PDF geschrieben.
..., das setzt aber voraus, das ich die
Frequenz immer auch selber vorgebe wie ich es gerade mache, so das die
Messung exakt ganzzahlige Perioden im Speicher lädt.
Du schriebst, dass du den Sinus über den ADC ausgibst. Wo ist also das Problem.
Den Speicher bräuchtest du nur, wenn dein Rechner es nicht schafft, online die Integrationen zu rechnen.
Dann sprechen wir hier offensichtlich von verschiedenen Methoden.
Offensichtlich - ich sprach von einer Methode ohne Fitterei mit direkter
Berechnung der Werte aus einem Integral über ganzzahlige Vielfache der
Periodendauer, so wie in dem verlinkten PDF geschrieben.
..., das setzt aber voraus, das ich die
Frequenz immer auch selber vorgebe wie ich es gerade mache, so das die
Messung exakt ganzzahlige Perioden im Speicher lädt.
Du schriebst, dass du den Sinus über den ADC ausgibst. Wo ist also das
Problem.
Den Speicher bräuchtest du nur, wenn dein Rechner es nicht schafft,
online die Integrationen zu rechnen.
Das problem ist, das es ja nicht die ursache für die ursprüngliche Fragestellung löst. Es gibt alternativen, ok, wusdte ich auch vorher.
Wir haben uns aber für diese verfahren entschieden, weil du es anders machen würdest ist dieser ansatz ja nicht falsch.
Und die frage wo kommt die drift her klärt das nicht
Wenn nach einigen Stunden die Ergebnisse nicht mehr passen, jedoch ein Neustart Deines Systems diesen Fehler beseitigt, wird es wohl an der Software liegen.
Du weißt aber schon, das eine Phasenverschiebung durch Ableitung nur für
einen reinen Sinus durch eine Zeitverschiebung gleichzusetzen ist?
Ja, um deine Frage zu beantworten, weiß ich
Aber wie kommst darauf das ich was ableiten will
Wieso kommst du auf die idee das es kein sinus ist
Die Ableitung ( oder Integration) besorgt dir die Impedanz (L oder C), die Du messen möchtest.
Wenn in Deiner Anregung Oberwellen und andere Störungen wie Brummen drin sind, dann kann dies bei Deinem Ansatz U und I zu skalieren und zu verschieben um Aussagen zur Impedanz zu machen, dazu führen dass das Fehler-Minimum nicht an der gewünschten Stelle liegt. (Kann man sicher auch mal schön simulieren..)
Wenn Du die Anregung kontrollieren kannst, dann wäre eine synchrone Abtastung über ganze Perioden (je mehr desto besser) mit FFT und Betrachtung des ensprechenden BINs am einfachsten.
Wenn die Anregung asynchron ist und man bei der FFT Leakage hat, kann man das mit den NachbarBINS korrektur rechnen.
Oder man nimmt einen Sinusfit nach IEEE-STD-1057, der funktioniert bei beliebigen Frequenzen und Abtastzeitpunkten. Hier hatte ich mal ein paar Quellen dazu verlinkt: Beitrag "Re: 100A Stromquelle für Messzwecke"
(Englisch und mit Mathe ;) )
Und die frage wo kommt die drift her klärt das nicht
Richtig, es vermeidet die Frage.
Ihr werdet die Ursache für die Drift schon ermitteln müssen. Alleine eure Beobachtung, dass sie da ist, reicht dafür nicht aus. Das anzuwendende Verfahren heißt "debuggen". Die hier im Thread nicht genannten Details zum verwendeten Algorithmus könnten schon eher helfen. Wie sehen die erfassten Daten aus und was rechnet ihr genau damit?
Die Phasendrift zum Oszi ist so max 1° meist weniger
Für die Drift müsste die Einheit ein s^-1 o.ä. enthalten.
Meinst du Phasenlage? Was genau meinst du mit "Phasendrift zum Oszi"?
über mehrere Stunden betrachtet gehen die Phasen im Bereich 1/10° rauf und runter, bei STM wie auch beim Oszi, aber die Differenz zum Oszi veränderts sich, läuft manchmal wieder zurück das am Ende gleich ist, manchmal aber auch weiter weg
arbeitest du da vielleicht mit kontinuierlicher phase???
wenn du da z.B mit einem double in eine sin/cos funktion reingehst, dann wundert mich das überhaupt nicht... da stoßt du einfach irgendwann an die numerischen grenzen.
arbeitest du da vielleicht mit kontinuierlicher phase???
wenn du da z.B mit einem double in eine sin/cos funktion reingehst, dann
wundert mich das überhaupt nicht... da stoßt du einfach irgendwann an
die numerischen grenzen.
73
Nein einen Fit mache ich nicht über mehrere stunden, sondern über 1, 2 oder 4 perioden, im moment, es soll aber auch über nicht ganzzahlige perioden später funktionieren.
Wad och über mehrere Stunden mache, ist den Fit berechenen und das ergebnis ablegen da fas mit dem Fit aber schnell geht macht das system einen delay, so dass ich nach 10 s die nächste messung starte.
Dann habe ich 360 werte pro stunde und nach 20 bis 12 stunden dann entsprechend
Parallel hängt das oszilloskop dran und misst den abstand zwischen den phasen, d.h. alle 10 sekunen, aber nicht richtig synchron wird eine messung abgelegt und ein python script berechnet die phasendifferenz, süäter offline.
So vergleiche ich dann die messungen miteinander über mehrere stunden, das ist so aber ein standardverfahren bei der überprüfung von messgeräten.
Nur mal zum Vergleich: Ich messe die komplexe Übertragungsfunktion von Vertstärkern (Signalkonditionierer) mit einem Signalgenerator und 2 ADCs, alles schön synchronisiert. Ebenfalls mit Sinusanregung (5mHz bis 300 kHz).
Eine Messung ist über 5 bis 500 Perioden. So ~50k Sample
Auf beide Signale wird ein 3 Parameter Sinusfit (nach IEEE-STD-1057) angewendet.
Bei 50 Wiederholungen liegt die rel. Standardabweichung des Amplitudenverhälnisses bei kleiner 2 ppm (wenn der Verstärker wenig rauscht) und die Standardabweichung der Phasendifferenz liegt bei 0,0003°
(leicht steigend zu höheren Frequenzen, bei 100 kHz etwa 5 mal mehr)
(Achtung, das ist nicht die Messunsicherheit! ;))
Das ist der Grund, warum ich vom Sinusfit nach 1057 überzeugt bin.
Es gibt Leute, die weitaus mehr von Mathe und Signaltheorie verstehen und die behaupten, dass dies Verfahren das mathematisch beste Ergebnis liefert.
Wenn man genau n Perioden erfasst, dann ist die FFT mit Rechteckfenster identisch, ansonsten ist das Sinusfitverfahren überlegen.
Diese Art der Auswertung unterscheidet sich erheblich von Deiner Methode (so wie ich sie Verstanden habe), da sie sehr schmalbandig ist (1/Messdauer). Deine Methode 'frisst' das gesammte Rauschen und alle Frequenzanteile.
Schaue Dir mal das Residuum von Deinen Messdaten an, nachdem Du über einen Sinusfit den Grundton abgezogen hast, oder eine FFT deiner Messdaten bzw des Residuums.
Wenn Du einen Kondensator misst, dann werden Oberwellen in Deiner Spannungsanregung im Strom linear stärker.. Auch weitere Störfrequenzen (Netz, Netzteile, ...) haben auf Dein Fitverfahren einen Einfluß.
Wenn Du nun gezwungen bist, genau Dein Verfahren zu benutzen, dann würde ich es mit einen digitalen Notchfilter (sehr schmalbandigen Bandpass) bei der Anregungsfrequnenz auf beide Signale versuchen und erst dann Deinen Fit. Da der Filter auf beide Signale gleich wirkt, hat er bei der Verhältnisbetrachtung keinen Einfluß.
das Projekt hat aber auch
theoretische Hintergründe "unnötige" Fehlerquellen vollständig
auszuschließen
Dann ist Dein Fitverfahren meiner Meinung nach eine Fehlerquelle, da
nicht schmalbandig.
Du hast deine IEEE STD1057 erwähnt, ich habe beschrieben das ich phase offset und amplitude fitte, deswegen ist mein verfahren die Fehlerquelle, schon mal auf die idee gekommen das ich die frequenz nicht fitte weil die bekannt ist und ich deshalb nur die unbekannten suche.
Du sagst mein verfahren ist nicht schmalbandig genug, wenn die frequenz unbekannt wäre, dann würden zu wenig messpunkte natürlich bei der frequenz einen fehler verursachen können, meinst du das mit schmalbandig.
Aber die frequenz ist immer bekannt, sie passt nur nicht immer auf ganzzahlige samples, weswegen das fit verfahren und keine fft gewählt wurde ider fourierkoeffizienten
Sorry, ich habe Dein Fitverfahren so verstanden, das Du die Stromkurve auf die Spannungskurve fittest. Wenn Du einen Sinusfit jeweils auf U und I anwendest, OK.
Dann brauchst Du nur mehr Daten (länger messen) damit du schmalbandiger wirst. Mindestens 20ms ;) damit Netzbrumm sicher nicht in den Fit spuckt.
Sorry, ich habe Dein Fitverfahren so verstanden, das Du die Stromkurve
auf die Spannungskurve fittest. Wenn Du einen Sinusfit jeweils auf U und
I anwendest, OK.
Dann brauchst Du nur mehr Daten (länger messen) damit du schmalbandiger
wirst. Mindestens 20ms ;) damit Netzbrumm sicher nicht in den Fit
spuckt.
Ja mache ich auch, ich habe nur nicht die ganzen details beschrieben weil ich dachte, das das nichts mit der drift uu tun hat, also konkret fitte ich die gemessene stromkurve zum bekannten sinus im programm und das selbe mache ich auch mit der gemessenen spannungskurve, somit habe ich für strom und spannung eine phase zum sinus in der software, die differenz ist die phase strom zu spannung am messobjekt. Deswegen fitte ich die strommessung zur spannungsmessung, wie ich es ausdrücken würde.
Ich dachte die details erklären sich von selbst wenn ich von einem LCR messgeräte projekt schreibe.
Auf diesem weg ermittel ich dann auch das rauschen für strom und spannung.
Dein punkt netzbrumm unterdrückung ist denke ich ein wertvoller hinweis. Da ich 10s paus von messung zu messung mache, könnten kleine toleranzen der uC frequenz und schwankungen der netzfrq eine schwebung verursachen, das werde ich mal anpassen das die messdauer 20ms beträgt
Auch wenn Deine Anzahl der Messpunkte begrenzt ist, lieber länger messen
und wenn es nur 4, besser 16 Punkte pro Periode sind.
Wenig punkte pro periode kann man machen, aber dann sollte die abtastfrequenz kein ganzzahliges vielfaches der messfrequenz sein.
Das wird bei den hohen frequenzen für die messung gemacht, aber bis 1khz sollte es kein problem sein 20ms zu messen und mehr als 4 punkte zu sampeln pro periode, haben 128kB speicher, davon mindetesn di hälft zum messen für 2 kanäle, als 32 kB.
Aber die letzte messung hatte wieder abweichungen zum oszi, da fehlt die idee
Werde den aufbau nochmals komplett durchgehen müssen
Werde den aufbau nochmals komplett durchgehen müssen
erhöhe Einfach Einmal Den signal-rauschabstand. wenn Sich Die phase Dann Immer Noch Genauso Erratisch Benimmt, Liegt Es Am algorithmus, Sonst Wohl Eher An Deiner bandbreite. hast Du Schon Einmal Die fehlerfortpflanzung Deines messrauschens Auf Die phasenbestimmung Angesehen?
Werde den aufbau nochmals komplett durchgehen müssen
erhöhe Einfach Einmal Den signal-rauschabstand. wenn Sich Die phase Dann
Immer Noch Genauso Erratisch Benimmt, Liegt Es Am algorithmus, Sonst
Wohl Eher An Deiner bandbreite. hast Du Schon Einmal Die
fehlerfortpflanzung Deines messrauschens Auf Die phasenbestimmung
Angesehen?
Ich denke mal Signal Rauschabstand hat nicht wirklich was mit Drift zu tun, ich würde es auch nicht als "Erratisch" bezeichnen, ich habe kein Problem mit der Wiederholbarkeit.
Und der Algorithmus zum Fitten funktioniert prinzipiell, also alle direkten Teste zeigt er richtig an, einzig die Langzeitmessung im Vergleich zum Oszilloskop hat eine Drift.
Du musst nicht mehr Fehler hineindeuten als ich beschrieben habe.
Fehlerfortpflanzung ist ein anderes Thema, da liegt eine Verwechslung vor und Messrauschen hat auch nichts mit Drift zu tun, Messung zu Messung ist sehr stabil.
Das Problem bei der Langzeitdrift ist das man nicht zig Messungen hintereinander machen kann, das dauert immer 12h-24h für eine Messreihe.
Hast Du denn eine Möglichkeit dir die Rohdaten rauszuziehen?
Bei Drift reicht es ja, das alle fünf Minuten zu machen.
Dann würde ich die Verarbeitung (Fit, Differenz, etc.) auf dem PC machen und weitere Untersuchung dort anstellen...
Hast Du denn eine Möglichkeit dir die Rohdaten rauszuziehen?
Bei Drift reicht es ja, das alle fünf Minuten zu machen.
Dann würde ich die Verarbeitung (Fit, Differenz, etc.) auf dem PC machen
und weitere Untersuchung dort anstellen...
Auf jeden Fall.
Daten von STM und Oszi. Rohdaten ansehen. Auf beide nen Sinusfit legen und die Differenz Daten-Fit ansehen.
Evtl. nimmt das Oszi nur den steilen Nulldurchgang und der Sinusfit wird durch kleine systematische Störungen verschoben. Zahl der Messpunkte, Messdauer etc. weicht beim Oszi sicher auch ab.
Ist die Phase am Oszi in der Langzeitmessung (evtl. thermisches
Gleichgewicht abwarten) konstant?
Phase am Oszi reproduzierbar deutlich genauer als 1°?
(Ein-/Ausschalten)
Phase am STM reproduzierbar deutlich genauer als 1°? (Ein-/Ausschalten
und Neustart der Software)
Was macht die gedriftete Phasenlage am STM nach Ein-/Ausschalten bzw.
Reset? Immer noch gedriftet oder wieder der ursprüngliche Wert?
Das oszi ist permanent an, das oszi misst nur den bereich wo die nulldurchgänge von strom und spannung liegen und speichert dies alle 10s, plus minus eingen ms misst auch der stm
Die daten vom oszi werden mit einem script ausgewertet, also die rohdaten, wegen begrenzten speicher und dem wunsch nach hoher auflöung sehe ich aber nicht die ganze periode in diesen Daten.
Hier sehe ich eine drift, die größer ist als die vom stm, es driften letztendlich beide messungen rauf und runter.
Es ist aber nicht klar was messfehler ist und was wirklich echt ust, wenn das messobjekt sich tatsächlich verändert.
Ein Ausschalten am stm oder reset bewirken keine änderung des ergebnisses.
Die daten vom oszi werden mit einem script ausgewertet, also die
rohdaten, wegen begrenzten speicher und dem wunsch nach hoher auflöung
sehe ich aber nicht die ganze periode in diesen Daten.
Hier sehe ich eine drift, die größer ist als die vom stm, es driften
letztendlich beide messungen rauf und runter.
Es ist aber nicht klar was messfehler ist und was wirklich echt ust,
wenn das messobjekt sich tatsächlich verändert.
Ein Ausschalten am stm oder reset bewirken keine änderung des
ergebnisses.
Es driften also Oszi und STM. Das Oszi sogar mehr.
Da würde ich mal mindestens deine Kommunikation als erratisch bezeichnen...
Ausschalten/Reset am STM liefert genau das vorherige (gedriftete) Ergebnis, richtig? Und 2-20 Stunden später ists um 1° verschoben und Ausschalten/Reset liefert aber wieder genau das unmittelbar vorherige Ergebnis, richtig?
Dann ists wohl eher eine Abhängigkeit von Temperatur / Luftfeuchte / etc. des Prüflings. Schwebung mit Störsignalen ist dann eher unwahrscheinlich. Vorausgesetzt du gehst bei der Analyse einigermaßen planvoll vor, wo ich mir inzwischen aber nicht so ganz sicher bin.
Wenn die Oszi-Messung mehr driftet taugt es wohl nicht als Referenz (Oszi selbst oder Messmethode). Wenn der Prüfling driftet musst du für konstante Bedingungen sorgen, dann driftet der stationär auch nicht mehr.
Wenn der Kopf driftet vielleicht mal paar Tage Abstand und neu überlegen.
Was mir imer wieder hilft (wir setzten die Sinusfit an vielen Stellen ein ;) ): Ein Blick auf die Residuen und mit dem Scope mal FFT schauen. Harmonische sind nicht das Problem, aber andere Störfrequenzen, gerade deutlich Tiefere, die dann im Messfenster eine Rampe hinterlassen.
Wenn Du die Rohdaten Deiner Messungen hast, dann würde ich mir die Residuen von U und I bei den erwähnten extremen Schwankungen ansehen.
Dann sind da immer noch die Sampleclocks für ADC und DAC.
Wenn die nicht wirklich sauber und mit geringem Jitter sind, kann das böse Effekte haben.
Was auch ein sehr netter Effekt ist, wenn der DAC und ADC quasi gleichzeitig sampeln, das kann dann mal etwas verrutschen und schon liegt man erratisch einen Sampleclock daneben. Keine Ahnung ob man dem STM beibiegen kann, bei gleichem Clock das eine auf steigende und das andere auf fallende Flanke zu legen. Aber das sollte nie nimmer nicht zur 'gleichen' Zeit passieren.
Hier sehe ich eine drift, die größer ist als die vom stm, es driften
letztendlich beide messungen rauf und runter.
Hast Du Deine Auswertung mal auf synthetisch generierte Daten losgelassen?
Da kann man dann auf das ideale Signal mal Rauschen oder andere Störkomponenten draufrechnen und schaut, wie empfindlich die eigentliche Rechnung ist.
Nach mehreren Langzeitmessungen über 12 h und 24 h – mit verschiedenen Einstellungen am Oszilloskop und Datenaufzeichnungen am STM – sieht es aktuell sehr danach aus, dass das Oszilloskop über den Messzeitraum hinweg einen variierenden DC-Offset aufweist, in der Größenordnung von ±1 LSB bei 8 Bit Y-Auflösung.
Zur Phasenbestimmung wird ein Python-Skript verwendet, das auf den vom Oszilloskop exportierten Daten arbeitet. Das Skript geht von einem Offset 0 aus, da im AC-Modus gemessen wird. Diese Methode wurde gewählt, um mit möglichst hoher X-Auflösung die Zeitdifferenz der Nulldurchgänge zu bestimmen – per Geradenanpassung an den Sinus (±15° um den Nulldurchgang, wegen Rauschen), aus der der Nulldurchgangszeitpunkt berechnet wird.
Das Steuerskript führt nun alle 10 Minuten zwei Messungen durch: einmal die Nulldurchgangsanalyse und einmal die Aufzeichnung einer vollen Periode. Damit kann die „Null“ der Geradengleichung jeweils angepasst werden – und die Ergebnisse stimmen seitdem gut mit der STM-Auswertung überein.
dass das Oszilloskop über den Messzeitraum
hinweg einen variierenden DC-Offset aufweist, in der Größenordnung von
±1 LSB bei 8 Bit Y-Auflösung.
Welches Scope auch immer es ist, das dürfte innerhalb der Spezifikation des Herstellers sein.
LeCroy gibt z.B. für seine WaveSurfer folgendes an:
±(1.0% of offset value + 1.5%FS + 1 mV)
aus der der Nulldurchgangszeitpunkt berechnet wird.
Vielleicht sollte man noch mal den Algorithmus überdenken, wenn der so
empfindlich auf Offsetfehler reagiert.
Wie geschrieben ist doch genau das jetzt passiert und es zeigt auf, das man mit Messgeräte genauer messen kann als spezifiziert wenn man die richtigen Algorithmen zur Auswertung entwickelt.
... dass das Oszilloskop über den Messzeitraum hinweg einen variierenden
DC-Offset aufweist, in der Größenordnung von ±1 LSB bei 8 Bit Y-Auflösung.
Jedes Gerät besitzt einen variierenden DC-Offset, wenn man nur genau genug guckt. Du glaubst doch nicht etwa dem vom Oszi gelieferten Phasenwert, ohne bei dieser Größenordnung eine Fehlerbetrachtung zu machen.
Du könntest bspw. die Messfrequenz ändern, um größere Phasenverschiebungen zu erhalten und nicht in den Messunsicherheiten deines Setups herumzustochern. Oder wie groß sind deine Phasenwerte?
Jedes Gerät besitzt einen variierenden DC-Offset, wenn man nur genau
genug guckt. Du glaubst doch nicht etwa dem vom Oszi gelieferten
Phasenwert, ohne bei dieser Größenordnung eine Fehlerbetrachtung zu
machen.
Willst du jetzt nur klugscheißen oder was.
Genau diese Fehlerbetrachtung habe ich gemacht und hier im Forum waren die meisten Beiträge nur, ich soll "meinen" Algorithmus prüfen.
Die Fehler des Oszi waren schon betrachtet, allerdings das dieser auch in AC Stellung noch den signifikanten Anteil hat war erst mal nicht erwartet.
Du könntest bspw. die Messfrequenz ändern, um größere
Phasenverschiebungen zu erhalten und nicht in den Messunsicherheiten
deines Setups herumzustochern. Oder wie groß sind deine Phasenwerte?
Du hast es verstanden :-) wenn der DC Offset den Phasenfehler macht, dann hat die Frequenz keinen Einfluss, aber ich könnte die Amplitude ändern, das würde etwas bewirken :-)
Du könntest bspw. die Messfrequenz ändern, um gröere
Phasenverschiebungen zu erhalten und nicht in den Messunsicherheiten
deines Setups herumzustochern. Oder wie groß sind deine Phasenwerte?
Der "Fehler Phasenwinkel" aufgrund des DC Offset bleibt vom Winkel konstant wenn man die Frequenz ändert.
Phasenwinkel = sin^-1(dcoffset)
da kommt erst mal keine Frequenz drin vor
Erst die Zeit = Peridendauer * Phase / 360
Hier wurde die Zeit gemessen weil man die Phase haben wollte, es wurde auch immer von Phasenfehler geschrieben
Phase = Zeit/Periodendauer * 360
Entsprechend hat sich Periodendauer rausgekürzt und die Frequenz damit keine Bedeutung gehabt