Forum: Mikrocontroller und Digitale Elektronik digitale Spiezenwertmessung


von Sandy (Gast)


Lesenswert?

Liebe Kollegen!

Ich muss herausfinden welcher Algorithmus der Spitzenwertmessung 
zugrunde liegt.

Zitat:
Mittels einer Spitzenwertmessung soll gezeigt werden, wie die maximale 
Amplitude eines sinusförmigen Signals gemessen, und für die weitere 
Verarbeitung genutzt werden kann.
Diese Funktion bekommt einen neuen Spannungswert vom ADC im Bereich von 
0 bis 1023 und prüft dann den neuen Wert gegen die letzten beiden, ob 
dieser Mittlere ein Maximum ist. Trifft dies zu, so wird das Maximum 
zurückgeliefert. Im gegenteiligen Fall wird -1 zurückgegeben.

Könnt ihr mir das sagen? Ich finde im google nichts.

DANKE!

Bussi
Sandy

von Michael B. (laberkopp)


Lesenswert?

Sandy schrieb:
> Ich finde im google nichts

Hast du bisher alle Hausaufgaben so gelöst,
gegoogelt und was du gefunden hast als Antwort hingeschrieben
und niemals selber nachgedacht ?

Uff.

Der Algorithmus steht doch schon in der Aufgabenberschreibung,
den kann man doch quasi Wort für Wort in eine Programmiersprache
nach Wahl umformulieren.

Der Algorithmus funktioniert nur, wenn die 3 Messwerte in kurzen 
Zeitabständen ermitelt werden und die Frequenz der Sinuskurve dagegen 
niedrig ist, denn je grösser die Zahlenunterschiede der Messwerte 
werden, um so weiter kann man die Stelle des Maximums verpassen.

Sind die Zahlenwerte deutlich unterschiedlich, wäre es besser durch die 
3 Punkte an bekannten Zeitpunkten eine Sinuskurve zu interpolieren und 
dann deren Sitzenwert und Zeitpunkt wann er auftrat zurückzuermitteln. 
Das müsste in jeder Schule in der 11. Klasse dran gewesen sein.

von Sven B. (scummos)


Lesenswert?

Michael B. schrieb:
> Sind die Zahlenwerte deutlich unterschiedlich, wäre es besser durch die
> 3 Punkte an bekannten Zeitpunkten eine Sinuskurve zu interpolieren und
> dann deren Sitzenwert und Zeitpunkt wann er auftrat zurückzuermitteln.
Nur als Randnotiz, eine Parabel ist dafür m.E. eine bessere Wahl, die 
passt explizit durch die 3 Punkte durch und man muss nix groß rechnen. 
Das Ergebnis wird dasselbe sein.

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

So wie sich Das liest, ist nicht mal 'halbwegs durchdachter Code' 
gefordert - und der geforderte Algorithmus steht in Deinem Post 
eigentlich schon drin.

Hier geht es um reine Theorie, oder?

MfG

von A. S. (Gast)


Lesenswert?

Dem Zitat wohnt keine Frage inne.

So wie Du die Frage gestellt hast, passt sie nicht zum Zitat.

Stelle doch bitte die ganze Aufgabe ein, bzw. den betreffenden Teil.

von THOR (Gast)


Lesenswert?

Sven B. schrieb:
> Michael B. schrieb:
>> Sind die Zahlenwerte deutlich unterschiedlich, wäre es besser durch die
>> 3 Punkte an bekannten Zeitpunkten eine Sinuskurve zu interpolieren und
>> dann deren Sitzenwert und Zeitpunkt wann er auftrat zurückzuermitteln.
> Nur als Randnotiz, eine Parabel ist dafür m.E. eine bessere Wahl, die
> passt explizit durch die 3 Punkte durch und man muss nix groß rechnen.
> Das Ergebnis wird dasselbe sein.

Nennt sich auch die Keplersche Faßformel.

von THOR (Gast)


Lesenswert?

Sandy schrieb:
> Liebe Kollegen!

Ich würd kündigen.

von Sven B. (scummos)


Lesenswert?

THOR schrieb:
> Sven B. schrieb:
>> Michael B. schrieb:
>>> Sind die Zahlenwerte deutlich unterschiedlich, wäre es besser durch die
>>> 3 Punkte an bekannten Zeitpunkten eine Sinuskurve zu interpolieren und
>>> dann deren Sitzenwert und Zeitpunkt wann er auftrat zurückzuermitteln.
>> Nur als Randnotiz, eine Parabel ist dafür m.E. eine bessere Wahl, die
>> passt explizit durch die 3 Punkte durch und man muss nix groß rechnen.
>> Das Ergebnis wird dasselbe sein.
>
> Nennt sich auch die Keplersche Faßformel.

Naja. Die Kepler'sche Fassregel ist ein Integrationsverfahren, was auch 
eine Parabel durch 3 Punkte verwendet, ja. Das Ziel sowie die Formel ist 
aber eine andere. Hier willst du ja nicht die Fläche unter der Kurve 
sondern den x-Wert des Maximums.

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Sven B. schrieb:
> Hier willst du ja nicht die Fläche unter der Kurve
> sondern den x-Wert des Maximums.

Äh, eigentlich willst DU 'nur' wissen, ob der gerade aktuelle Wert 
gleich dem Maximum ist (wenn Er größer war, ist Er Es ja jetzt).

Riecht nach 'nem Komparator, einem Spannungsfolger, einer Diode, einem 
Widerling (zum Entladen des) und einen Kondensator.


MfG

von Wolfgang (Gast)


Lesenswert?

Sven B. schrieb:
> Nur als Randnotiz, eine Parabel ist dafür m.E. eine bessere Wahl, die
> passt explizit durch die 3 Punkte durch und man muss nix groß rechnen.

Problem ist nur, dass eine Parabel das falsches Modell ist, um einen 
Sinus zu approximieren. Mit zunehmendem Abstand der Stützpunkte wirst du 
zunehmen Mist rauskriegen. Ganz schlimm wird es, wenn du mit solch einem 
falschen Modell versuchst, zu extrapolieren weil beispielsweise deine 
Stützpunkte gerade nur auf der einen Seite vom Maximum des 
Sinuskurvenabschnitts liegen.

von Sven B. (scummos)


Lesenswert?

Wolfgang schrieb:
> Sven B. schrieb:
>> Nur als Randnotiz, eine Parabel ist dafür m.E. eine bessere Wahl, die
>> passt explizit durch die 3 Punkte durch und man muss nix groß rechnen.
>
> Problem ist nur, dass eine Parabel das falsches Modell ist, um einen
> Sinus zu approximieren. Mit zunehmendem Abstand der Stützpunkte wirst du
> zunehmen Mist rauskriegen.

Eine Parabel ist ein hervorragendes Modell um einen Sinus an seinem 
Maximum zu interpolieren. Ich glaube sogar es ist mathematisch eh ideal 
wenn du nur 3 Punkte hast wie hier vorgegeben war (will ich jetzt mal 
aber nicht zu fest behaupten), aber es ist jedenfalls sehr gut.

Wir extrapolieren hier ja nicht nach rechts und links, sondern 
interpolieren zwischen den gegebenen Punkten. Dass es nach rechts falsch 
wird ist klar.

: Bearbeitet durch User
von Sandy (Gast)


Lesenswert?

Liebe Kollegen!

Vielleicht habe ich mich falsch ausgedrückt. Ich verstehe schon was das 
Stück Code macht. Ich soll allerdings den Algorithmus dazu aufschreiben. 
Rein theoretisch.

Ich glaube nicht, dass er eine analoge Schaltung mit C und Diode meint.

@Thor: Ich würde Dir in den Kaffee spucken ;)

Bussi
Sandy

von STK500-Besityer (Gast)


Lesenswert?

Sandy schrieb:
> Vielleicht habe ich mich falsch ausgedrückt. Ich verstehe schon was das
> Stück Code macht. Ich soll allerdings den Algorithmus dazu aufschreiben.
> Rein theoretisch.

Struktogramm, Programmablaufplan malen. Wo ist das Problem?

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Sven B. schrieb:
> Eine Parabel ist ein hervorragendes Modell um einen Sinus an seinem
> Maximum zu interpolieren.

Alles klar.

Wenn du nachts einen Schlüssel verloren hast, suchst du ihn dann auch 
unter der Laterne, weil es leichter zu rechnen ist - äh - weil es dort 
heller ist?

von Sandy (Gast)


Lesenswert?

Ich habe kein Struktogramm oder Programmablaufplan.
Ich habe nur das bisschen Text.

Bussi Sandy

von Wolfgang (Gast)


Lesenswert?

Sandy schrieb:
> Ich habe kein Struktogramm oder Programmablaufplan.

STK500-Besityer schrieb:
> Struktogramm, Programmablaufplan malen.

Was genau verstehst du an dem Wort "malen" nicht?

von Sven B. (scummos)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> Sven B. schrieb:
>> Eine Parabel ist ein hervorragendes Modell um einen Sinus an seinem
>> Maximum zu interpolieren.
>
> Alles klar.
>
> Wenn du nachts einen Schlüssel verloren hast, suchst du ihn dann auch
> unter der Laterne, weil es leichter zu rechnen ist - äh - weil es dort
> heller ist?

Junge, du hast deinen einen Messpunkt bei kleiner als 0.2 gewählt. Das 
ist fast 90° neben dem Maximum. Ich hab gesagt "an seinem Maximum". Nimm 
mal drei Punkte die weniger als 10° neben dem Maximum liegen und mach 
ein paar Promille Rauschen drauf, dann wirst du keinen Unterschied mehr 
sehen.

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Es ist genau so, wie STK und Wolfgang schreiben: aufmalen
Du hast einem Punkt, wo Du die Spannung erfasst, wo verglichen wird, wo 
der Ausgang gesetzt wird, wo der aktuelle Wert angapasst wird.

Die Punkte können auch zusammen gefasst werden.

Die Kunst ist es, diese Punkte so zu verschachteln, daß jeder Punkt nur 
1x vor kommt.

Zuerst ist es aber egal, ob Di den neuen Wert öfter mit dem Alt-Wert 
vergleichst um z.B.
1. den Ausgang auf Wert zu setzen, wenn Wert>Altwert
2. den Altwert anzugleichen, wenn Wert>Altwert

Hiermit solltest Du zumindest in ein paar Zeilen Text zusammen schreiben 
können, wie der Ablauf aussieht, Mehrfachnennungen sind vorerst egal.

MfG

von Wolfgang (Gast)


Lesenswert?

Sven B. schrieb:
> Junge, du hast deinen einen Messpunkt bei kleiner als 0.2 gewählt. Das
> ist fast 90° neben dem Maximum. Ich hab gesagt "an seinem Maximum".

Klar, wenn man nahe genug am Maximum misst, lässt sich jede beliebige, 
krumme Kurve durch eine Parabel approximieren. Aber auch dann wird der 
Fehler bei gleicher Anzahl freier Parameter größer sein, als mit dem 
richtig gewählten Modell - du siehst die Abweichung nur nicht mehr so 
oder wegen der Messfehler spielt der Modellfehler praktisch keine Rolle 
mehr.

von Sven B. (scummos)


Lesenswert?

Wolfgang schrieb:
> Sven B. schrieb:
>> Junge, du hast deinen einen Messpunkt bei kleiner als 0.2 gewählt. Das
>> ist fast 90° neben dem Maximum. Ich hab gesagt "an seinem Maximum".
>
> Klar, wenn man nahe genug am Maximum misst, lässt sich jede beliebige,
> krumme Kurve durch eine Parabel approximieren.
Nö -- x^4 in 0 zum Beispiel nicht. Aber beim Sinus geht es eben.

> du siehst die Abweichung nur nicht mehr so
> oder wegen der Messfehler spielt der Modellfehler praktisch keine Rolle
> mehr.
Genau das war meine Aussage ... und dann hast du aus irgendeinem Grund 
diese Diskussion angefangen ;)

von Michael B. (laberkopp)


Lesenswert?

Sandy schrieb:
> Ich habe kein Struktogramm oder Programmablaufplan.
> Ich habe nur das bisschen Text.

Wir können dir nicht die verpassten 10 Jahre Schulbildung hier in einem 
Beitrag nachreichen, bei dir scheint bereits die erste Stunde der 
Informatikausbildung zu fehlen so daß du mit den Worten "Algorithmus" 
und "prüfen auf Maximum" nichts anfangen kannst.

Erkenne einfach, daß mit der Methode "man kann alles googlen und muss 
nichts selber denken" eines Tages einfach Ende im Gelände ist, und der 
Tag ist (spätestens) heute erreicht.

Wer nicht erkennt, daß die Lösung direkt vor einem liegt, dem ist auch 
nicht mit fertig gelösten Hausaufgaben geholfen.

von Nop (Gast)


Lesenswert?

Ich erinnere aus der Mathe-Vorlesung im zweiten Semester noch den Spruch 
des Profs: "wer mit Polynomen interpoliert, ist zu faul, sich um die 
richtigen Ansatzfunktionen Gedanken zu machen". ;-)

Andererseits braucht man dafür halt auch nur wenig Rechenaufwand, was 
auf einem µC ein schlagendes Argument ist.

Übrigens merkt man im Forum, daß Semester-Ende ist und die Klausuren 
anstehen. Jetzt kriegen die ganzen Leute Panik, die im Semester nur 
Party gemacht haben. Klar, daß das im Februar/März geschieht, weil das 
der Erstsemesterjahrgang ist und die erste Siebung einsetzt.

von Sven B. (scummos)


Lesenswert?

Nop schrieb:
> Ich erinnere aus der Mathe-Vorlesung im zweiten Semester noch den Spruch
> des Profs: "wer mit Polynomen interpoliert, ist zu faul, sich um die
> richtigen Ansatzfunktionen Gedanken zu machen". ;-)

Stimmt auch ;)
Aber: Die Ansatzfunktion kennen und dann im relevanten Punkt geeignet 
durch eine Taylorreihe nähern ist was anderes als einfach irgendein 
Polynom draufwerfen.

> Andererseits braucht man dafür halt auch nur wenig Rechenaufwand, was
> auf einem µC ein schlagendes Argument ist.

Genau -- ist das mit dem Sinus überhaupt analytisch lösbar? Ich glaube 
nicht, und dann muss man direkt nichtlineares least squares auf einem 
Mikrocontroller machen oder sowas. Für effektiv keinen Gewinn an 
Genauigkeit.

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

Nop schrieb:
> Ich erinnere aus der Mathe-Vorlesung im zweiten Semester noch den Spruch
> des Profs: "wer mit Polynomen interpoliert, ist zu faul, sich um die
> richtigen Ansatzfunktionen Gedanken zu machen". ;-)
>
> Andererseits braucht man dafür halt auch nur wenig Rechenaufwand, was
> auf einem µC ein schlagendes Argument ist.

Noch weniger Rechenaufwand benötigt man, wenn man sich mit der 
"Berechnung" auf die laut Spezifikation geforderte Genauigkeit 
beschränkt ;-)

Sandy schrieb:
> und prüft dann den neuen Wert gegen die letzten beiden, ob
> dieser Mittlere ein Maximum ist. Trifft dies zu, so wird das Maximum
> zurückgeliefert.

@TO: ich denke es könnte dir helfen nochmal nachzugucken, wie man in der 
Mathematik Hoch- und Tiefpunkte einer Funktion ermittelt 
(Kurvendiskussion).

http://www.mathebibel.de/extremwerte-berechnen

Um aus abgetasteten Daten die erste Ableitung zu erhalten, zieht man 
einfach den letzten Messwert vom aktuellen Messwert ab (= 
differenzieren).
Wenn man möchte kann man so auch die 2. Ableitung hinbekommen 
(Differenzbildung zwischen den bereits differenzierten Werten).

Um eine Nullstelle der 1. Ableitung von abgetasteten Werten zu erkennen, 
sollte man allerdings nicht davon ausgehen, dass man hier genau eine 0 
"trifft". Stattdessen guckt man, ob sich die erste Ableitung (Steigung 
der Kurve) von positiv nach negativ ändert, dann muss die Nullstelle 
irgendwo dazwischen gelegen haben.

: Bearbeitet durch User
von Sandy (Gast)


Lesenswert?

Neben all den Aussagen wie dumm ich bin,

ist Taylorreihe die richtige Antwort?
Ist der Algorithmus, der dahinter liegt die Taylorreihe?

Bussi
Sandy

von Joe F. (easylife)


Lesenswert?

Sandy schrieb:
> ist Taylorreihe die richtige Antwort?

Wie kommst du darauf?

von Sven B. (scummos)


Lesenswert?

Sandy schrieb:
> ist Taylorreihe die richtige Antwort?
> Ist der Algorithmus, der dahinter liegt die Taylorreihe?
Nein und die Taylorreihe ist auch kein Algorithmus.

von Sandy (Gast)


Lesenswert?

Dann war das das Missverständnis. Ich dachte ich soll eine mathematische 
Methode finden. Es geht einfach nur darum was der Code macht!?

Das bekomme sogar ich hin.

von Wolfgang (Gast)


Lesenswert?

Joe F. schrieb:
> Noch weniger Rechenaufwand benötigt man, wenn man sich mit der
> "Berechnung" auf die laut Spezifikation geforderte Genauigkeit
> beschränkt ;-)

So gesehen ist hier der Rechenaufwand Null gefordert.

Lt. Aufgabenstellung soll ein neuer Messwert nur mit den letzten beiden 
verglichen werden und genau dann zurück geliefert werden, wenn er größer 
als diese beiden ist, sonst -1.

Die Aufgabe liegt bestenfalls auf 7.Klasse Niveau und hat nichts mit 
Kurvendiskussion oder sonstigen "höheren" Weihen der Mathematik zu tun 
;-)

von Joe F. (easylife)


Lesenswert?

Wolfgang schrieb:
> Lt. Aufgabenstellung

Die Aufgabenstellung ist (mir zumindest) einigermaßen unklar.
Geht es darum, den Algorithmus zu erklären? Wohl kaum, denn er steht in 
der Aufgabe.
Geht es darum, zu begründen, wie/warum der Algorithmus funktioniert? 
Dann wären die Grundlagen der Kurvendiskussion evtl. nützlich.
Vielleicht geht es auch nur darum ein Wort aus dem Vorlesungsscript zu 
zitieren, um nachzuweisen, dass man es gelesen hat. Könnte dann sowas 
wie "lineare Suche" oder "sequentielle Suche" sein, oder 
"Entscheidungsalgorithmus" oder "Annäherungsverfahren"...
Man weiss es nicht.

: Bearbeitet durch User
von Sandy (Gast)


Lesenswert?

Danke für Eure Hilfe.

Ich glaube mit "lineare Suche" und dgl. komme ich durch die 
Wiederholung.
Mal sehen wie streng er ist. Notfalls schau ich ganz arm drein und bin 
lieb. Ein Vorteil wenn man ein Mädchen ist.

Bussi
Sandy

von Joe F. (easylife)


Lesenswert?

Sandy schrieb:
> Notfalls schau ich ganz arm drein und bin
> lieb. Ein Vorteil wenn man ein Mädchen ist.

Klar. Plane einfach genug Zeit für Frisör und Nagellack ein. Wird schon 
gut gehen.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Taylor-Reihen, Polynom-Interpolationen und und und ... Glaube, das 
Problem ist vmtl viel einfacher ...

Per ADC kommen laufend neue Werte rein und man hat die 2 alten Werte.

Bei einem Sinus sieht es doch wohl so aus:
1
  *
2
 *
3
*

oder
1
*
2
 *
3
  *

oder
1
 *
2
* *

oder halt noch andersrum ... Sowas kann man doch mit einer if-Abfrage 
lösen, ob es sich um ein Extremwert handelt und das ist dann auch der 
Spitzenwert ...

Und - oh Wunder - das passt sogar zur Aufgabenstellung ;-)

> Diese Funktion bekommt einen neuen Spannungswert vom ADC im Bereich
> von 0 bis 1023 und prüft dann den neuen Wert gegen die letzten beiden,
> ob dieser Mittlere ein Maximum ist. Trifft dies zu, so wird das
> Maximum zurückgeliefert.

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?

Sandy schrieb:
> Ein Vorteil wenn man ein Mädchen ist.

Das erinnert mich an einen Schulaufsatz in MAD, unter den der Lehrer 
schreibt:

"Liebe Sandy, leider nur eine 4. Eincremen schreibt man mit c und nicht 
mit k. Komm' doch nach der Schule bei mir vorbei, damit wir das üben 
können!"


;-)

Gruß

Jobst

: Bearbeitet durch User
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.