Forum: Mikrocontroller und Digitale Elektronik Extrahierung von Sinus Peaks


von Frank Hertel (Gast)


Lesenswert?

Hallo,

bei einer Anwendung liegen mir verschiedene Sinusschwingungen vor, die 
alle die gleiche Amplitude besitzen, jedoch unterschiedliche Frequenzen. 
Ziel ist es eine mathematische Überlagerung zu finden, sodass immer wenn 
EINE Sinusschwingung den Wert 1 erreicht, diese auch die "Endfunktion" 
herrausgibt. An den anderen Stellen ist es ziemlich egal, was 
herrausgegeben wird, darf nur nicht 1 sein.

Mein Problem ist offensichtlich eher mathematischer Natur, da die 
Implementation ein Kinderspiel wäre. Ich hatte mir schon überlegt, den 
Wert in jede einzelne Funktion einzusetzen, aber bei ca. 1000 
Sinusschwingungen ist das schon zu viel Rechenaufwand.

Abstrahiert wären es einfach nur Zahlenreihen von periodischen 
Messungen:
3,6,9,12,15...
4,9,14,19,24...
6,17,28,39...

Die Funktion als I/O würde dann folgendes Verhalten aufweisen:

Eingang: 5 --> Ausgang: irgendetwas ungleich 1
Eingang: 4 --> Ausgang: 1

Vielen Dank schonmal für Eure Antworten!

von Michael K. (Gast)


Lesenswert?

Fang noch mal ganz von vorn an.
Ich habe nicht die leiseste Vorstellung davon was Du uns mitteilen 
wolltest, was Du machen willst, was Du dazu an Hardware benutzt und was 
genau Deine Frage an uns ist.

von Mark B. (markbrandis)


Lesenswert?

Du meinst vielleicht "wenn EINE der Sinusfunktionen die maximale 
Amplitude erreicht, dann soll der Wert eins ausgegeben werden, ansonsten 
null"?

Aber ja, das ist geraten. Eine Skizze könnte hilfreich sein.

von Route_66 H. (route_66)


Lesenswert?

Hallo!
Man kann Probleme nur lösen, wenn man in der Lage ist, sie zu 
beschreiben.
Selbst ich kann aus Deiner Schilderung keinen sinnvollen Zusammenhang 
erkennen.
Also: versuche es noch mal.

von lalala (Gast)


Lesenswert?

Ich glaube, ich verstehe Dein Ausgangs'problem'. Du hast verschiedene 
Perioden und willst immer wenn eine Periode vorbei ist einen 'ping' 
bekommen.
Nur leider verstehe ich nicht was für eine 'Lösung' Du möchtest:

Frank Hertel schrieb:
> Mein Problem ist offensichtlich eher mathematischer Natur, da die
> Implementation ein Kinderspiel wäre. Ich hatte mir schon überlegt, den
> Wert in jede einzelne Funktion einzusetzen, aber bei ca. 1000
> Sinusschwingungen ist das schon zu viel Rechenaufwand.

Ok. Du willst keine Implementation. Du willst Mathe? Ich nehme mal 
Cosinus statt Sinus, das kannst Du ja anpassen
Dann sei n die Anzahl der 'Cosinusse'(:-)), sei F: N<=n -> R eine 
Funktion die zu jedem Index die Frequenz gibt
dann ist T= U_i {1/F_i k | k Element von N}
die Menge aller 'pings', wobei U die Vereinigung ist, N die natürlichen 
Zahlen

Das hilft Dir vermutlich zwar nicht, aber wenn Du keine Implementation 
brauchst, was dann?

von Frank Hertel (Gast)


Angehängte Dateien:

Lesenswert?

Zunächst einaml tut es mir Leid, dass ich die Frage ziemlich wirr 
gestellt habe.
Deswegen formulier ich hier noch mal mein Ziel:

Aus verschiedenen Sinusfunktionen unterschiedlicher Frequenz, aber 
gleicher Amplitude soll eine neue Funktion generiert werden, die für 
jedes Maximum eines beliebigen Sinus eine "1" ausgibt. Andernfalls soll 
keine "1" ausgegeben werden.

Zum besseren Verständnis habe ich die Zeichnung angehängt. Die neue 
Funktion soll bei jedem Pfeil eine "1" ausgeben, andernfalls soll sie 
keine "1" ausgeben. Ich hab natürlich nicht alle Pfeile gezeichnet, da 
ich denke das das Prinzip klar geworden ist.

Also, vielen Dank schonmal für Eure Unterstützung.

von holger (Gast)


Lesenswert?

>Zum besseren Verständnis habe ich die Zeichnung angehängt.

Ein Signal in der Form wie du es gemalt hast gibt es nicht.
Die Amplituden der Sinuswellen addieren sich zu jedem Zeitpunkt.

von Michael H. (dowjones)


Lesenswert?

Frank Hertel schrieb:
> Zum besseren Verständnis habe ich die Zeichnung angehängt. Die neue
> Funktion soll bei jedem Pfeil eine "1" ausgeben, andernfalls soll sie
> keine "1" ausgeben.

Vielleicht sowas wie
?

von lalala (Gast)


Lesenswert?

Michael H. schrieb:
> Vielleicht sowas wie?
Schöne Lösung!

von Mark B. (markbrandis)


Lesenswert?

Frank Hertel schrieb:
> Aus verschiedenen Sinusfunktionen unterschiedlicher Frequenz, aber
> gleicher Amplitude soll eine neue Funktion generiert werden, die für
> jedes Maximum eines beliebigen Sinus eine "1" ausgibt. Andernfalls soll
> keine "1" ausgegeben werden.
>
> Zum besseren Verständnis habe ich die Zeichnung angehängt. Die neue
> Funktion soll bei jedem Pfeil eine "1" ausgeben, andernfalls soll sie
> keine "1" ausgeben.

Also praktisch sowas hier?


Das wäre eine Funktion im mathematischen Sinne einer eindeutigen 
Zuordnung. Das "keine 1 ausgeben" muss man aber schon durch einen 
konkreten Wert ersetzen, z.B. null, sonst ist es ja keine Funktion. 
Außerdem ist eine solche Funktion natürlich unstetig.

von mahwe (Gast)


Lesenswert?

realisierung:
für jeden Kanal einen Comparator=> op summierer=> schmitt trigger

von Frank Hertel (Gast)


Lesenswert?

>> Schöne Lösung!

Dem kann ich nur zustimmen. Herzlichen Dank für die Unterstützung. Mein 
Problem wurde gelöst!

von Reinhard Kern (Gast)


Lesenswert?

mahwe schrieb:
> für jeden Kanal einen Comparator=> op summierer=> schmitt trigger

Wenn ich Frank richtig verstanden habe - was zugegebenermassen recht 
schwierig ist - liegt ihm nur die Summe aller Signale vor. Sonst wäre 
die Aufgabe ja recht trivial.

Ist das so, muss man erstmal die einzelnen Kanäle trennen und dann 
auswerten, entweder wie bei dir mit Hardware, oder man trennt sie mit 
Software per Fourier-Analyse (da hat er sich auch nicht geäussert was er 
eigentlich haben möchte).

Eine Frage ist auch, wie genau das sein soll, die maximale Amplitude ist 
viel schwieriger zu bestimmen als der Nulldurchgang.

Gruss Reinhard

von Karl H. (kbuchegg)


Lesenswert?

Was bist du bereit als 'Funktion' zu akzeptieren?

Kannst du ein max benutzen.
Denn wie mir scheint, würde es doch einfach reichen, das Maximum aller 
Einzelfunktionswerte zu bestimmen und wenn dieses 1 ist, dann wird eine 
1 generiert ansonsten eine 0.
Den Vergleich kannst du auch weglassen, wenn dir die Nicht-1 Ergebnisse 
vom Zahlenwert her nicht wichtig sind.

magic(t) = max( s1(t), s2(t), s3(t), ... )

von Mark B. (markbrandis)


Lesenswert?

Michael H. schrieb:
> Frank Hertel schrieb:
>> Zum besseren Verständnis habe ich die Zeichnung angehängt. Die neue
>> Funktion soll bei jedem Pfeil eine "1" ausgeben, andernfalls soll sie
>> keine "1" ausgeben.
>
> Vielleicht sowas wie
>
?

Versteh ich nicht. Soll dabei gelten:


Oder wie?

Ähm. Anscheinend geht durch das Zitieren die Formel kaputt. Da steht 
doch am Ende kein > Zeichen?

: Bearbeitet durch User
von Mark B. (markbrandis)


Lesenswert?

Also wenn ich das bei Wolfram Alpha eingebe:

http://www.wolframalpha.com/input/?i=%28sin%28t%29-1%29+*+%28sin%282t%29-1%29+*+%28sin%283t%29-1%29+%2B1

sieht das irgendwie nicht nach der Lösung aus...

...oder vielleicht doch. Hm. Ich verstehe nur denn Sinn des Ganzen 
nicht. Warum will man eine Funktion haben, die für eine große Zahl an 
Eingangswerten beliebige Werte (außer 1) ausgibt? Was ist der praktische 
Nutzen davon?

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mark Brandis schrieb:
> sieht das irgendwie nicht nach der Lösung aus.
Es ist problematisch, weil gefortdert war, dass der Wert 1 nur dann 
auftreten darf, wenn einer der Sinusse 1 ist. Das ist bei der 
angegebenen Formel der Fall. Wenn alle Sinusse != 1 sind, dann kommt 
irgendein anderer Wert heraus.

Glück gehabt, dass es die 1.0 als exakte Fließkommazahl gibt. Mit vielen 
anderen Zahlen geht diese Formel schief...

von Frank Hertel (Gast)


Lesenswert?

Hallo alle zusammen,

nachdem mir letztes Mal so vorzüglich geholfen wurde, wende ich mich 
diesmal wieder an diese überragende community.

Ich besitze die Summe aus mehreren linearen "Treppenfunktionen". Das 
sieht beispielsweise so aus:

Durch die Gaußklammer hat sozusagen jede Funktion nur eine Auswirkung 
auf mein f(x), falls sie einen ganzzahligen Wert erreicht.

Das Problem ist: Wie fasse ich diese linearen Terme zu einem Term 
zusammen?

Wären da nicht die Gaußklammern, könnte man ja alles nach 
Schulmathematik addieren. Im Moment muss ich für jeden Wert zunächst die 
Ergebnisse aller Gaußklammern bestimmen(einfach abrunden) und dann alles 
zusammenzählen.

Problem ist, dass das zu viel Rechenaufwand ist.
Deshalb: Gibt es mathematisch eine Methode diese Funktion zu 
vereinfachen?

Vielen Dank schonmal für eure Hilfe!

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.