Forum: Digitale Signalverarbeitung / DSP / Machine Learning Minimum und Maximum aus Messreihe berechnen


von D. S. (datasheet)


Lesenswert?

Hi,

ich habe einen Signalverlauf gesampled und ich hätte gern die beiden 
Extremwerte. In erster Näherung hab ich einfach den kleinsten und den 
größten Messwert der Reihe genommen. Ich möchte aber eigentlich noch 
genauer werden. Gibt es da einen Algorithmus für sowas?

Meine Gedanken:
Im Prinzip lässt sich ja der Anstieg für jedes Intervall berechnen.

index j = i+1
m = (y_j-y_i) / (x_j-x_i)

Wenn sich das Vorzeichen dreht, hab ich die beiden Punkte zwischen denen 
der Extremwert liegt.
Dann müsste ich ja aus dem Verhältnis zwischen dem vorherigen und dem 
nachfolgenden Anstieg (nur Betrag) bestimmen können, ob die X-Koordinate 
eher links oder eher rechts liegt.

Das sagt dann aber immer noch nichts über den Y-Wert aus.

Hat da jemand eine Idee?

viele Grüße
data

: Verschoben durch Moderator
von Karl H. (kbuchegg)


Lesenswert?

D. S. schrieb:
> Hi,
>
> ich habe einen Signalverlauf gesampled und ich hätte gern die beiden
> Extremwerte. In erster Näherung hab ich einfach den kleinsten und den
> größten Messwert der Reihe genommen.


Nicht 'erste Näherung'.
Das ist das, was deine Daten ohne weiteres Wissen und Annahmen hergeben.

Solange du keine Annahmen über den Signalverlauf (zb Sinusschwingung) 
treffen kannst, geben die Daten nicht mehr her.

von Reinhard Kern (Gast)


Lesenswert?

D. S. schrieb:
> Wenn sich das Vorzeichen dreht, hab ich die beiden Punkte zwischen denen
> der Extremwert liegt.

Nein, hast du nicht. Die Steigungen gelten für ein Intervall, nicht für 
einen Punkt. An den beiden Intervallen sind 3 Punkte beteiligt - welchen 
beiden willst du die Steigung zuordnen? Jede Möglichkeit ist völlig 
willkürlich und hat mit der Realität nichts zu tun.

Gruss Reinhard

von Vlad T. (vlad_tepesch)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Nicht 'erste Näherung'.
> Das ist das, was deine Daten ohne weiteres Wissen und Annahmen hergeben.

naja, wenn man die nächsten Nachbarpunbkte auch kennt, könnte man ja ein 
Spline reinfitten und sich dort die Extremstelle berechnen.
Genauer, als einfach den Messwert zu nehmen, wird das schon sein.

von D. S. (datasheet)


Lesenswert?

Vielen Dank Vlad!

Spline war genau der richtige Suchbegriff. Kannte ich irgendwie schon 
vom Linien zeichnen lassen, aber war für mich aber grad nicht greifbar.

Die Berechnung hat es ganz schön in sich. Da ich aber äquidistante 
Punkte habe, vereinfacht sich das ganze. Man benötigt nur die 
Y-Koordinaten.

Bsp.:

y0=30
y1=28
y2=27
y3=29

um die Werte zwischen y1 und y2 zu errechnen müssen die Koeffizienten 
der kubischen Funktion
y=ax^3+bx^2+cx+d

a = y3 - y2 - y0 + y1 = 0
b = y0 - y1 - a       = 2
c = y2 - y0           = -3
d = y1                = 28

wenn man x jetzt im Intervall [0,1] variiert, kriegt man den 
Kurvenverlauf zwischen y1 und y2.
So gesehen alles recht einfach.

Beim ausprobieren hab ich allerdings gemerkt, dass Reinhard leider recht 
hat. Der Wechsel des Anstiegs kein Garant für das Minimum im Intervall 
ist.
Da ist wohl die richtige Vorgehensweise:
- kleinsten Messwert herausfinden
- spline mit zwei Punkten links und einem Punkt rechts davon
- spline mit einem Punkt links und zwei Punkten rechts davon
- Minimum aus beiden splines

Danke euch
data [:-]

von Wolfgang (Gast)


Lesenswert?

D. S. schrieb:
> - Minimum aus beiden splines

Damit greifst du willkürlich eines Punkt raus. Warum nimmst du nicht den 
Mittelwert. Warum sollte der wahre Signalverlauf dichter am Minimum als 
am Mittel liegen?
Um ein besseres Minimum zu bestimmen, müßte man mehr Wissen in die 
Interpolation stecken. Man könnte als Filter ein Modell des Prozesses 
laufen lassen, z.B. einen Zustandsschätzer in Form eines Kálmán-Filters.

von Klaus D. (kolisson)


Lesenswert?

du kannst (wie gesagt wurde, vollkommen willkürlich)
. den MIN / MAX feststellen
.. den Median
... den absoluten Mittelwert
.... den gleitenden Mittelwert
..... die Nullstellen
...... und wohl noch mehr

was da dann herauskommt liegt definitiv im Auge des Betrachters.

Gruss Klaus

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

D. S. schrieb:
> Spline war genau der richtige Suchbegriff. Kannte ich irgendwie schon
> vom Linien zeichnen lassen, aber war für mich aber grad nicht greifbar.

Mal ganz ehrlich:

Splines, gleitende Mittelwerte u.ä. sind für Banker, Excel, Manager und
Powerpoint, also pure Augenwischerei ;-)

Du willst deine Messdaten aber nicht beschönigen, sondern fehlende
Zwischenwerte rekonstruieren. Deswegen brauchst du

Karl Heinz Buchegger schrieb:
> weiteres Wissen

über die Eigenschaften des Signals.

Ohne dieses kannst du die Zwischenwerte genauso gut würfeln. Mag sein,
dass Splines in vielen Fällen bessere Ergebnisse liefern als die lineare
Interpolation. Je nach Signalform können die Ergebnisse u.U. aber auch
schlechter sein.

Aber zum Glück hast du das zur Signalrekonstruktion benötigte Wissen
(vielleicht ohne es zu wissen ;-)):

D. S. schrieb:
> ich habe einen Signalverlauf gesampled

D. S. schrieb:
> äquidistante Punkte

Du hast also ein klassisches Abtastsystem mit einer gegebenen Abtastfre-
quenz. Ich gehe mal davon aus, dass du sichergestellt hast, dass das
Abtasttheorem erfüllt ist, dass also die höchste im Signal vorkommende
Frequenz kleiner als die halbe Abtastfrequenz ist.¹

Damit sind die Voraussetzungen gegeben, das Originalsignal vollständig
zu rekonstruieren. Das Zauberwort dafür heißt sin(x)/x-Interpolation.

Das Diagramm im Anhang zeigt deren Verhalten im Vegleich zur Interpola-
tion mit kubischen Splines. Das Eingangssignal ist im Beispiel die Über-
lagerung zweier Sinusschwingungen mit den Frequenzen 1,1 kHz und 2,4 kHz
und den Amplituden 0,5 und 1,0. Das Signal wird mit 5 kHz > 2 · 2,4 kHz
abgetastet, womit das Abtasttheorem erfüllt ist.

Während die Spline-Interpolation hier eher als Weichzeichner agiert,
gibt die sin(x)/x-Interpolation das Originalsignal messerscharf wieder.
Du kannst natürlich wesentlich mehr Zwischenpunkte berechnen als im
Diagramm dargestellt, um die Maxima genau zu treffen.

Die sin(x)/x-Interpolation ist zudem leicht zu programmieren, Literatur
dazu findest du im Netz zuhauf.

Praktisch jedes Digitaloszi hat so etwas übrigens eingebaut, weil dort
genau die gleiche Problematik vorliegt.

Wahrscheinlich gibt es auch ein Verfahren, das die Maxima direkt (ohne
den Umweg über die Zwischenpunkte) berechnet. Im Moment habe ich dazu
aber nichts im Kopf.

—————————————
¹) Wenn nicht, misst du sowieso Müll. Du solltest dich dann erst um eine
   geeignete Vorfilterung des Signals kümmern, bevor du die gesampelten
   Daten in irgeneiner Form weiterverarbeitest.

von Arc N. (arc)


Lesenswert?

D. S. schrieb:
> Beim ausprobieren hab ich allerdings gemerkt, dass Reinhard leider recht
> hat. Der Wechsel des Anstiegs kein Garant für das Minimum im Intervall
> ist.
> Da ist wohl die richtige Vorgehensweise:
> - kleinsten Messwert herausfinden
> - spline mit zwei Punkten links und einem Punkt rechts davon
> - spline mit einem Punkt links und zwei Punkten rechts davon
> - Minimum aus beiden splines
>
> Danke euch
> data [:-]

Etwas vereinfacht...
Das globale Maximum ist definiert als f(y) >= f(x) für alle x.
Lokales Maximum f(y) >= f(x) wenn |x - y| < epsilon. bzw.
f'(x) = 0 und f''(x) != 0
Wendepunkt: f''(x) = 0, f'''(x) != 0

Kalman wurde schon genannt, Partikel-Filter wäre eine andere Variante.
Je nach Daten könnten auch andere Spline-Basisfunktionen sinnvoll sein 
oder monotone kubische Splines.
Aber solange niemand weiß, um was für Daten/welche Signale es geht, wird 
niemand sagen können, ob die bislang vorgeschlagenen Sachen sinnvoll 
sind oder nicht.

von D. S. (datasheet)


Angehängte Dateien:

Lesenswert?

Hallo Yalu,

danke für Deinen ausführlichen Beitrag. Ist ja echt beeindruckend was 
sin(x)/x kann.
Nyquist-Shannon kenn ich, ignoriere ich, messe trotzdem keinen Mist ;-)
Ich habe im Prinzip eine Lade- und Entladekurve eines Kondensators. 
Dieses periodische Signal taste ich mit fast der Erregerfrequenz ab und 
bekomme so den Kurvenverlauf.

Hier mal eine Messreihe:
1
0,0
2
0,2
3
-1,0
4
-1,0
5
-0,4
6
-0,2
7
0,1
8
-0,1
9
-0,1
10
0,3
11
0,0
12
0,0
13
0,1
14
0,1
15
-0,1
16
0,2
17
-0,1
18
-0,9
19
-67,9
20
-97,5
21
-90,6
22
-75,7
23
-61,6
24
-48,9
25
-39,1
26
-31,2
27
-24,1
28
-19,9
29
-15,2
30
-12,1
31
-9,6
32
-7,4
33
-5,8
34
-4,5
35
-3,5
36
-2,7
37
-1,7
38
-1,2
39
-1,1
40
-0,8
41
-0,1
42
-0,3
43
-0,1
44
0,0
45
0,2
46
0,1
47
-0,1
48
0,2
49
0,1
50
0,3
51
0,1
52
0,5
53
66,8
54
93,8
55
86,4
56
72,5
57
59,2
58
48,3
59
39,2
60
31,8
61
25,4
62
20,8
63
16,7
64
13,7
65
11,0
66
8,8
67
7,2
68
5,9
69
4,6
70
3,8
71
3,2
72
2,6
73
2,2
74
1,8
75
1,6
76
1,3
77
1,0
78
0,9
79
0,8
80
0,6
81
0,5
82
0,3
83
0,5
84
0,3
85
0,3
86
0,3
87
0,2
88
0,3
89
0,1
90
0,4
91
0,5
92
-0,1
93
0,1
94
0,1
95
0,0
96
0,3
97
0,1
98
0,3
99
0,4

Im Anhang die vier Punkte um das Maximum herum und das was Spline daraus 
gemacht hat.
So gesehen, sicherlich nicht schlecht, aber vielleicht auch noch 
verbesserungswürdig.
Höchster Messwert: 93,8
Spline Maximum:    96,4
und passt optisch ganz gut. (Sagt der BWLer in mir g)

von Klaus D. (kolisson)


Lesenswert?

@Autor: Yalu X. (yalu) (Moderator)
ich fand deinen Beitrag und die Grafik dazu super.

danke von
Klaus de Lisson

von Frank M. (aktenasche)


Lesenswert?

D. S. schrieb:
> Nyquist-Shannon kenn ich, ignoriere ich

ich musste spontan lachen :D

> Ich habe im Prinzip eine Lade- und Entladekurve eines Kondensators.

wenn du das weisst, wieso bestimmst du dann nicht die zeitkonstante?

> Dieses periodische Signal taste ich mit fast der Erregerfrequenz ab und
> bekomme so den Kurvenverlauf.

d.h. du schickst in irgendetwas 20kHz rein und tastest mit fast 20kHz 
ab? siehe obiges gelächter.

solang du keine genaue beschreibung abgibst, ist jede antwort imho 
sinnfrei. was hast du für messgeräte? was misst du? was willst du 
wissen?

wenn du ein oszi hast und tatsächlich nur maximale/minimale werte haben 
willst: ich würde mit dem trigger solang rumwursteln bis ich habe was 
ich will. modernere oszis haben afaik spike detektoren.

von Klaus W. (mfgkw)


Lesenswert?

Yalu X. schrieb:
> Splines, gleitende Mittelwerte u.ä. sind für Banker, Excel, Manager und
> Powerpoint, also pure Augenwischerei ;-)

Mach dir nicht die Maschinenbauer zum Feind; sie bauen dein nächstes 
Auto, deine Herz-Lungen-Maschine und einiges mehr!
Ohne Splines geht da nicht viel.

Yalu X. schrieb:
> ... Das Zauberwort dafür heißt sin(x)/x-Interpolation. ...

Der Zauber funktioniert sehr gut, wenn man keine Meßfehler hat und unter 
den Voraussetzungen deines Beispiels (Shannon knapp erfüllt). Dann sieht 
es beeindruckend aus (Werte des tatsächlichen Verlaufs, die weit über 
die Meßwerte hinausgehen, werden tatsächlich rekonstruiert) - das muß 
aber nicht in jedem Fall so sein.
Besonders wenn du deine Meßwerte noch etwas verfälschst (und nicht wie 
bei dir beschönigend genau auf die exakte Kurve gelegt), ist es auch 
beeindruckend, aber nicht mehr beeindruckend gut.
Genau dann machst du nämlich Augenwischerei: es entsteht ein fiktiver 
Verlauf mit enormen Ausschlägen, der mit der Realität nicht im 
Mindestens etwas zu tun hat.

Zudem sind Splines nicht gleich Splines. Eben wenn man über den 
tatsächlichen Verlauf zwischen den Stützstellen nicht viel weiß, ist es 
seriöser, keine Ausschläge hinein zu interpretieren.
Dann fallen mir B-Splines ein - damit kann man sehr gutmütige Verläufe 
erreichen.

Natürlich ist jede Art von Interpolation oder Ausgleich 
Kaffesatzleserei, aber Ausschläge weit jenseits der Messwerte sind kaum 
seriös, wenn sie von ungenauen Meßwerten angefacht werden können.

von so siehts aus (Gast)


Lesenswert?

und außerdem gehört der THread ins Forum: Digitale Signalverarbeitung / 
DSP

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

D. S. schrieb:
> Nyquist-Shannon kenn ich, ignoriere ich, messe trotzdem keinen Mist ;-)

Ok, in diesem Fall bringt sin(x)/x wahrscheinlich nicht das gewünschte
Ergebnis.

> Ich habe im Prinzip eine Lade- und Entladekurve eines Kondensators.

Wenn das nicht nur im Prinzip, sondern tatsächlich so ist, kannst du ja
den theoretischen Signalverlauf ermitteln, der dann wahrscheinlich noch
ein paar unbekannte Parameter enthält. Diese Parameter bestimmst du,
indem du den theoretischen Signalverlauf mit geringstmöglichen Fehlern
in den tatsächlichen Signalverlauf hineinfittest. Damit kannst du dann
die Funktionswerte an beliebigen Stellen berechnen.

Solche Approximationsverfahren auf Basis einer physikalisch fundierten
Funktion haben zwei Vorteile:

- Sie geben die Physik des Systems richtig wieder. Das erhöht die
  Chance, auch in atypischen Fällen noch brauchbare Ergebnisse liefern
  zu können.

- Sie sind relativ unempfindlich gegenüber Messrauschen, da in die
  berechneten Ergebnisse nicht nur ein paar, sondern alle Messwerte
  eingehen.

Voraussetzung ist natürlich, dass man die zugrundeliegende Physik in der
Formel für den Signalverlauf richtig erfasst hat.

> Hier mal eine Messreihe:
> ...

Das sieht aus wie ein Rechtecksignal, das mit einem Bandpass 2. Ordnung
gefiltert wurde. Könnte das zu deinem System, das wir nicht kennen,
passen?

Ich habe mal angenommen, es würde sich um einen Tiefpass mit einem
nachgeschalteten Hochpass handeln. Sind τ1 und τ2 deren Zeitkonstanten,
ergibt sich jeweils ab der steigenden Flanke des Rechtecksignals fol-
gender Signalverlauf:

(Edit: Da waren noch ein paar Tippfehler in den Formeln. Jetzt sollten
       sie behoben sein)

K1 und K2 sind dabei Skalierungsparameter.

Ich habe von deinen Daten mal einen Ausschnitt genommen und manuell
versucht, diese Funktion hineinzufitten. Für

  τ1 = 0,717
  τ2 = 4,77
  K1 = 154

und einer Verschiebung  entlang der x-Achse um 7,45 ergibt sich das
Bild im Anhang. Ich würde sagen, das passt ganz ordentlich, zumal man
das per Computer sicher noch etwas besser hinbekommt.


Klaus Wachtler schrieb:
>> Splines, gleitende Mittelwerte u.ä. sind für Banker, Excel, Manager und
>> Powerpoint, also pure Augenwischerei ;-)
>
> Mach dir nicht die Maschinenbauer zum Feind; sie bauen dein nächstes
> Auto, deine Herz-Lungen-Maschine und einiges mehr!

Ich habe ja deswegen auch einen Smiley dahintergesetzt :)

Ein gewissenhaft arbeitender Ingenieur, der eine Spline-Interpolation
verwendet, wird ja auch mathematisch begründen können, warum er genau
diese Methode und keine andere gewählt hat. Der BWLer hingegen urteilt
i.Allg. subjektiv und jeden Tag anders. Anders sieht es natürlich aus,
wenn Spline-Funktionen tatsächlich nur für's Auge eingesetzt werden,
bspw. bei Autokarosserien. Da darf dann auch subjektiv entschieden
werden.

> Der Zauber funktioniert sehr gut, wenn man keine Meßfehler hat und unter
> den Voraussetzungen deines Beispiels (Shannon knapp erfüllt).

Natürlich funktioniert der Zauber genauso gut, wenn Shannon nicht nur
knapp erfüllt ist. Nur funktionieren dann andere Methoden nicht mehr so
schlecht :)

Was die Messfehler betrifft: Der Fehler der interpolierten Daten liegt
bei der sin(x)/x-Interpolation in der Größenordnung der Messfehler. Da
ist sie nicht besser und nicht schlechter als andere Interpolationsver-
fahren.

Unempfindlicher gegenüber Messfehler sind i.Allg. Approximationen, da
dort Fehler bis zu einem gewissen Grad herausgemittelt werden können.
Dazu muss man aber das betrachtete System genauer kennen, um den theo-
retischen Signalverlauf ermitteln zu können (s.o.).


so siehts aus schrieb:
> und außerdem gehört der THread ins Forum: Digitale Signalverarbeitung /
> DSP

Ja, dort passt er besser hinein.

von D. S. (datasheet)


Lesenswert?

Frank Meier schrieb:
> D. S. schrieb:
>> Nyquist-Shannon kenn ich, ignoriere ich
>
> ich musste spontan lachen :D
So war es auch gemeint

>> Ich habe im Prinzip eine Lade- und Entladekurve eines Kondensators.
> wenn du das weisst, wieso bestimmst du dann nicht die zeitkonstante?
Weil sich die Lade- und Entladekurven der verschiedenen Messungen nicht 
großartig voneinander unterscheiden. Das Minimum, Maximum allerdings 
schon

>> Dieses periodische Signal taste ich mit fast der Erregerfrequenz ab und
>> bekomme so den Kurvenverlauf.
> d.h. du schickst in irgendetwas 20kHz rein und tastest mit fast 20kHz
> ab? siehe obiges gelächter.
Lach' nur nicht zu laut, nicht dass Du Dich noch verschluckst.
Bei periodischen Kurvenverläufen ist das schon OK so. Wenn sich die 
Werte verändern, Audio o.ä. ist das natürlich fatal.

> solang du keine genaue beschreibung abgibst, ist jede antwort imho
> sinnfrei. was hast du für messgeräte? was misst du? was willst du
> wissen?
Ich hab den Signalverlauf so wie er ist in digitaler Form im PC. Ich 
möchte, möglichst automatisch, d.h. nicht mit 
Tabellenkalkulationsprogramm o.ä. eine Kurve so lange reinfitten bis es 
passt. Sondern erkennen wie stark die Extremwerte einbrechen.
Ich suche also nicht nur nach der Möglichkeit die Funktion auszuwerten, 
sondern auch nach einer Routine (deshalb auch das Forum PC 
Programmierung) die mir diese Kurve bewertet.

von Wolfgang (Gast)


Lesenswert?

D. S. schrieb:
> Ich hab den Signalverlauf so wie er ist in digitaler Form im PC. Ich
> möchte, möglichst automatisch, d.h. nicht mit
> Tabellenkalkulationsprogramm o.ä. eine Kurve so lange reinfitten bis es
> passt.

Und was hindert dich daran, das Modell im PC zu rechnen. Ganz einfach 
wird es, falls sich nur die Amplitude und nicht die beiden 
Zeitkonstanten ändern. Um das zu entscheiden, müßte man mehr über deinen 
Prozess wissen.

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.