PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Maxima einer Schwingung per Software



Robotik84
23.11.2006, 16:02
Hallo leutz,

ich stehe hier vor einem problem und komme einfach net weiter.

also mein problem:
Ich habe eine Sinusschwingung. Diese ist nicht richtig sauber, d. h. sie besitzt 2 oder mal 3 kleine ausreißer. zudem ist noch das der sinus aus experimentellen werte ermittelt wurde und somit hat der sinus auch kleine ecken drin.
Nun ist es meine aufgabe bei jedem Maxima (pos. oder neg.) soll eine variable hochgezählt werden. Und zwar nur bei den Maxima. D. h. auch dass i die ausreißer nicht beachten soll.

kann mir jemand einen algorithmus sagen, der das erfüllt?

ich soll dies in C programmieren.

gruß robotik ...

pandadriver
23.11.2006, 22:22
Du kannst immer in kleinen Zeitabständen die differenz der Spannung messen. Wenn die Änderung am kleinsten ist, dann ist ein Peak-Wert erreicht. Diese Lösung ist aber warscheinlich nicht sonderlich genau. Ich persönlich würde das Signal Hardwaremässig filtern und bearbeiten...

Robotik84
24.11.2006, 07:43
hardwaremäßig kann i nix mehr filtern ... i bekomme die daten von einer wegmessung über encoderscheiben und dort will i sobald hoher bzw niedriger wert erreicht ist einen wechsel zählen ...
hab mir schon überlegt über 10 werte zu mitteln und den von den nexten 10 werten gemittelten wert zu vergleichen und ist die differenz sehr klein dann zähle i einen wechsel ...
weiss aber net, ob das die beste lösung ist ...
werds mal testen ...

über weitere anregungen würd i mich freuen ...

gruß robotik

PicNick
24.11.2006, 08:05
Wenn die Werte nach der Reihe daherkommen, kannst du den aktuellen Werte immer mit dem vorhergehenden vergleichen.
Das ergibt die "steigung" an der Stelle.
Wenn du nun die Steigung mir der vorherigen vergleichst, kriegst du Wendepunkte. d.h. zwischen dem aktuellen und vorherigen Sample muß eine Nullstelle gewesen sein. Und die kannst du brauchen.
Mit Lust und Liebe und Interpolieren kannst du die Nullstelle auch noch genauer kriegen.

Vorteil: eine "Treppenstufe" in der Kurve kannst du damit erkennen und ausschließen. (Also bergauf, flach und wieder bergauf)

Robotik84
24.11.2006, 08:31
also der sinus hat einen offset und dann kann i dann keine nullstelle bestimmen ...
so du meinst i soll den aktuellen durch den vorherigen wert teilen und dann mit der voherigen steigung vergleichen und dann hab i ein wechsel oder wie???
nur was i au net versteh wie soll i dann die treppenstufen erkennen???
also ein maximum erkenn i ja wenn die steigung ca. null ist ... nur was mache i wenn i dann im nexten maximum bin bzw wie soll i da die maxima rausholen???

PicNick
24.11.2006, 08:40
Geh ein Stück zur Seite, du stehst grad auf der Leitung :-)
Bei der Differenzierung fällt jedes Offset in den Kübel.
Nicht Teilen, Abziehen.
Ist die Differenz +, gehts bergauf, - bergab, logo. --> +/- merken.
Wars vorher - und jetzt +, dann war ein Minimum
Wars vorher + und jetzt -, dann war ein Maximum
Differenz=NULL vergißt du einfach, das hilft dir alleine nix

magnetix48
24.11.2006, 09:05
Wenn du eine Sinus differenzierst, bekommst du eine Cosinus und der hat da, wo der Sinus seine Maxima hat, einen Nulldurchgang.
Aus der Erkennung der Maxima wird eine Erkennung der Nulldurchgänge und das dürfte einfacher sein.

Gruß
Detlef

Gock
05.02.2007, 15:02
Was Picknick beschreibt heißt bei Ladegeräten -deltaU-Abschaltung und funktioniert ganz gut. Im Vergleich dazu gibts auch noch die Delta0-Abschaltung (oder so ähnlich), die den Punkt f'=0 erkennt. Das ist aber schwieriger. Was DIr in jedem Fall gegen Deine Ausreißer hilft und Dein Ergebnis zuverlässiger machen würde, ist ein Tiefpass mit geeigneter Grenzfrequenz. Sehr zu empfehlen! Das geht hard- wie softwaremäßig.
Gruß

PS: Gib Dir mal bitte ein bisschen mehr Mühe beim Schreiben. Den kryptischen Mist verstehen zu wollen zehrt an der Geduld. Du schreibst ihn nur einmal, gelesen wird er aber zig-mal.