Forum: Digitale Signalverarbeitung / DSP / Machine Learning Interpolation nicht äquidistanter Messdaten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gustav G. (gustavgggg)


Angehängte Dateien:

Lesenswert?

Ich messe mit einer Quelle Strom und Spannung über einer Last, hier 
einmal über einem Widerstand. Nun sind die gemessenen Werte mit rauschen 
behaftet und die Quelle kann nicht mit beliebiger Genauigkeit 
eingestellt werden.

Im Beispielplot sieht man eine Aufnahme der gemessenen Daten. Es sind 
die kleinen Cluster zu erkennen je nach eingestellter Spannung. 
Insgesamt handelt es sich also um eine Punktwolke, die eine 
Strom-Spannunsgkennlinie darstellt.

Meine Frage ist nun was eine gute Interpolationsmöglichkeit wäre um für 
eine beliebige Spannung einen Strom zu berechnen. Zu beachten ist dabei, 
dass alle Messwerte letztendlich beliebig in einer 2D Ebene verteilt 
sein können. Idealerweise möchte ich für jeden interpolierten Punkt noch 
einen Fehlerbalken angeben können. Was wäre hier Ansätze oder wo kann 
ich anfangen zu recherchieren?

von Nils B. (hbquax)


Lesenswert?

In Matlab und Tecplot gibts  entsprechende Curve-Fits. Mit Python gehts 
bestimmt auch.

Aber bei den paar Daten gehts bestimmt auch mit Excel. Datennplotten, 
Trendlinie hinzufügen. Es ist ja fast kinear, also wirst du mit einem 
Polinom 2. oder 3. Grades gut hinkommen.

Was hast du denn bisher? Womit erfasst und plottest du deine Daten?

von Nils B. (hbquax)


Lesenswert?

Stellst du den Strom oder Spannung ein?
Deine Daten sind ja offensichtlich keine Punktewolke, sondern für jede 
Stromstufe hast du eine Streuung der Spannungswerte. Ich würde es glaube 
ich mal andersrum plotten, Spannung über Strom.

: Bearbeitet durch User
von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

Radial basis function wäre eins der zauberwörter.

Ansonsten ist ein 2d curve-fit auch nicht außergewöhnlich kompliziert... 
Die Position und Anzahl der stützstellen ist aber durchaus kritisch. 
Mehr ist dabei nicht unbedingt besser.

Sinc-interpolation kann auch sinnvoll sein, weil du dadurch einen 
glatteren/stetigeren Verlauf bekommst.

Ist halt die Frage, was du später mit den Daten machst.

73

von Gustav G. (gustavgggg)


Lesenswert?

Nils B. schrieb:
> Was hast du denn bisher? Womit erfasst und plottest du deine Daten?

Die Daten kommen von einer Messelektronik in einem Textformat (CSV). Ich 
lese die mit Python (pandas) ein.

Als ersten Schritt habe ich noch veruscht mal den Strom für gleiche 
Spannungswerte zu mitteln. Jeder der Werte ist am Ende diskret und es 
gibt pro Spannung immer mehrere Stromwerte je nach rauschen.

Nils B. schrieb:
> Es ist ja fast kinear, also wirst du mit einem
> Polinom 2. oder 3. Grades gut hinkommen.

Ja das ist hier nun linear weil ich einen Widerstand vermessen. Es muss 
nicht linear sein ich könnte ja auch nicht Lineare Lasten vermessen oder 
das externe Rauschen ist extrem hoch.

Nils B. schrieb:
> Stellst du den Strom oder Spannung ein?
> Deine Daten sind ja offensichtlich keine Punktewolke, sondern für jede
> Stromstufe hast du eine Streuung der Spannungswerte. Ich würde es glaube
> ich mal andersrum plotten, Spannung über Strom.

Ich stelle an der Quelle die Spannung ein und messe den Strom. Die Daten 
sind ja durchaus eine Punktwolke, wenn sie aus dem Sourcemeter kommen, 
nur befinden sich die Punkte eben annähernd um eine gerade.

von Nils B. (hbquax)


Lesenswert?

Wenn du schon alles in Python hast, wird sich doch irgendein curve fit 
modul finden lassen oder zur Not eine Methode selber programmieren 
lassen.

Ich finde aber deine Daten komisch. Du sagst, du stellst die Spannung 
ein, aber du hast zu jedem Messpunkt mehre unterschiedliche 
Spannungswerte mit nahezu gleichem Strom. Da frage ich mich wie das 
zustande kommt. Irgendwas ist faul am Versuchsaufbau oder der 
Datenerfassung. Warum ist dein Scatter in der Eingangsgröße soviel 
größer als der Scatter der Ausgangsgröße?

Ein grundsätzliches Problem könnte außerdem sein, einen mathematischen 
Ansatz zu funden, der nicht nur diesen, sondern jeden Verlauf sinnvoll 
abbildet. Nicht ihne Grund gibt es ja verschiedene Ansätze, linear, 
polynomisch, logarithmisch usw.

ChatGPT schon gefragt?

von Nils B. (hbquax)


Lesenswert?

"es gibt pro Spannung immer mehrere Stromwerte je nach rauschen"

Ich sehe pro Strom mehrere Spannungswerte.

von Gustav G. (gustavgggg)


Lesenswert?

Nils B. schrieb:
> Ich finde aber deine Daten komisch. Du sagst, du stellst die Spannung
> ein, aber du hast zu jedem Messpunkt mehre unterschiedliche
> Spannungswerte mit nahezu gleichem Strom.

Ja das ist auch klar, denn die ADCs liefern diskete Werte pro 
eingestelltem Spannungspunkt und messen nicht immer den gleichen 
Spannungswert. Die Auflösung der ADCs muss nicht zwangsweise gleich sein 
das macht meiner Ansicht nach schon Sinn.

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Wenn ich mal feine Details aus dem Diagramm weg ignoriere, sehe ich 
folgendes:

Die Spannung wurde in recht groben Stufen eingestellt, jedoch mit einer 
viel höheren Auflösung und erheblichem Rauschen gemessen wurde.

Der Strom wurde mit einer zu geringen Auflösung gemessen. Eine 
Interpolation würde eine Messgenauigkeit vortäuschen, die nicht 
vorhanden war. Statt einer Linie müssee man einen Korridor einzeichnen, 
wie bei der Temperaturprognose der Wettervorhersage.

Für den gewählten Bereich waren alle drei Geräte (Spannungsquelle, 
Voltmeter und Amperemeter) ungeeignet.

: Bearbeitet durch User
von Nils B. (hbquax)


Lesenswert?

Wenn das, was du dort gemessen hast, wirklich ein einfacher Widerstand 
ist, würde ich mir den Messaufbau nochmal vorknöpfen, und nicht an den 
Daten rummachen.

von Gustav G. (gustavgggg)


Lesenswert?

Nils B. schrieb:
> Wenn das, was du dort gemessen hast, wirklich ein einfacher Widerstand
> ist, würde ich mir den Messaufbau nochmal vorknöpfen, und nicht an den
> Daten rummachen.

Intern macht das Gerät einen Faktor 250 für die Spannungsmessung. Das 
sollte also überschlagen passen wenn man mal annimmt, dass der ADC 
anstatt 16 effektiv 15 Bit Auflösung hat.

von Nils B. (hbquax)


Lesenswert?

Wie wurde denn gemessen? Immer auf/absteigende Reihen mit je einem 
Messpunkt pro Wert? Oder x Messerte hintereinander bei jedem Wert?
Zeichne doch mal die Verbingskurven der Messwerte ein.

Vielleicht sehen wir von Messreihe zu Messreihe auch nur die Erwärmung 
des Messobjektes oder des Messhunts?

Und ich verstehe immer noch nicht warum die angeblich eingestellten 
Spannungswerte so eine große Streuung haben.

von Motopick (motopick)


Lesenswert?

Das Verfahren nennt sich "lineare Regression". Allerdings scheint
dein "Messverfahren" durchaus noch verbesserungswuerdig zu sein.
Auch bei einer Ausgleichsrechnung gilt: "Murks rein" := "Murks raus".

von Gustav G. (gustavgggg)


Lesenswert?

Nils B. schrieb:
> Wie wurde denn gemessen? Immer auf/absteigende Reihen mit je einem
> Messpunkt pro Wert? Oder x Messerte hintereinander bei jedem Wert?
> Zeichne doch mal die Verbingskurven der Messwerte ein.

Es wurde ein Spannungswert eingestellt und X Messwerte gemessen (Hier 
10). Dann wird der nächste Spannungswert angefahren.

Nils B. schrieb:
> Vielleicht sehen wir von Messreihe zu Messreihe auch nur die Erwärmung
> des Messobjektes oder des Messhunts?

Möglich das kann ich nicht überprüfen.

Nils B. schrieb:
> Und ich verstehe immer noch nicht warum die angeblich eingestellten
> Spannungswerte so eine große Streuung haben.

Nehmen wir an ich habe einen 16 Bit ADC mit differentiellem Eingang und 
2,5V Referenzspannung. Dann entspricht ein LSB 5V / 2^16 = 76,3µV. Über 
einen Messwiderstand für die Spannung mit dem Faktor 250 entspicht ein 
LSB demnach 76,3µV * 250 = 19mV. Wenn man nun annimmt, dass der ADC nur 
15 Bit effektiv hat und extern noch rauschen da ist kann man die 
Streuung erklären.

von Nils B. (hbquax)


Lesenswert?

Wenn es immer mehre Messwerte für den gleichen Messpunkt sind, würde ich 
doch mal gucken, on es zufällig hin und herspringt oder sich tendenziell 
in eine  Richtung bewegt.

von Motopick (motopick)


Lesenswert?

Gustav G. schrieb:

> Nehmen wir an ich habe einen 16 Bit ADC mit differentiellem Eingang und
> 2,5V Referenzspannung. Dann entspricht ein LSB 5V / 2^16 = 76,3µV. Über
> einen Messwiderstand für die Spannung mit dem Faktor 250 entspicht ein
> LSB demnach 76,3µV * 250 = 19mV. Wenn man nun annimmt, dass der ADC nur
> 15 Bit effektiv hat und extern noch rauschen da ist kann man die
> Streuung erklären.

Versuche es einmal mit einem "echten" Vorverstaerker.
Dann musst du auch weniger "annehmen".

von Gustav G. (gustavgggg)


Lesenswert?

Motopick schrieb:
> Versuche es einmal mit einem "echten" Vorverstaerker.
> Dann musst du auch weniger "annehmen".

Du hast recht aber der bringt nicht viel wenn man zum Beispiel einen 
Bereich von +-250V abdecken will. Dann kann man zwar für kleinere 
Bereiche die Auflösung erhöhen aber wird nach oben begrenzt. Wenn der 
Verstärkungsfaktor 1 ist dann wird es bei den 19mV bleiben oder verstehe 
ich es falsch worauf du hinaus willst?

von Gustav G. (gustavgggg)


Lesenswert?

Nils B. schrieb:
> Wenn es immer mehre Messwerte für den gleichen Messpunkt sind, würde ich
> doch mal gucken, on es zufällig hin und herspringt oder sich tendenziell
> in eine  Richtung bewegt.

Das werde ich mal probieren. Das müsste man ja prüfen können indem man 
pro Spannungswert mal deutlich mehr Punkte aufnimmt.

von Motopick (motopick)


Lesenswert?

Gustav G. schrieb:

> ich es falsch worauf du hinaus willst?

Ich wuerde Spannungsabfaelle ueber einem Messshunt ja auch
nicht im 200 V Bereich eines Multimeters messen. Liegt der Shunt
potentialmaessig "hoch", muss man eben entweder mit einem
geeigneten Verstaerker "highside" messen, oder das Ganze
potentialfrei machen.

von Gustav G. (gustavgggg)


Lesenswert?

Motopick schrieb:
> Ich wuerde Spannungsabfaelle ueber einem Messshunt ja auch
> nicht im 200 V Bereich eines Multimeters messen. Liegt der Shunt
> potentialmaessig "hoch", muss man eben entweder mit einem
> geeigneten Verstaerker "highside" messen, oder das Ganze
> potentialfrei machen.

Also der Shunt ist low side und der wird vorverstärkt es geht sich hier 
um die Messung der Spannung. Diese wird über einen Spannungsteiler 
gemessen der eben 250 Teilungsfaktor hat.

von Jan K. (jan_k776)


Lesenswert?

Was genau möchtest du denn haben? Ein datenbasiertes Modell? Z.B. eine 
stetige, geschlossen darstellbare Funktion f mit f(V)=I, wobei V die 
unabhängige, eingestellte Spannung, und I der gemessene Strom ist, oder 
ist es was anderes? Welche Größen sind fehlerbehaftet, beide?

Das hat nämlich Konsequenzen auf die Methode, die genutzt werden soll. 
Meistens ist es eine Art von Least-Squares, siehe 
https://en.wikipedia.org/wiki/Least_squares. Ist aber die unabhängige 
Variable fehlerbehaftet, müsstest du eher 
https://en.wikipedia.org/wiki/Errors-in-variables_model und ähnliches 
nutzen.

Eventuell ist das für dich aber auch überhaupt kein Problem hier, weil 
z.B. inkonsistente Schätzer hier egal sind.

Mal doch mal eine Kurve in deine Daten, wie stellst du dir die vor?

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
Noch kein Account? Hier anmelden.