ähnlichen Verlauf muss eine Berechnung gemacht werden:
Das Signal muss durch Rechtecken ersetzt werden, die des Spitzenwerts hoch sind und solange dauern, wie das Signal 80% des Spitzenwerts übersteigt.
Aber bedenken: das Signal ist ggf. verrauscht und man kann nicht annehmen, dass es kontinuierlich bis zum Spitzenwert ansteigt und danach kontinuierlich absteigt, "Nebenspitzen" sind möglich.
Wer hat gute Ideen?
Danke.
P.S. das gezeigte Beispiel hat eine feste Periodizität, davon kann nicht ausgegangen werden.
Immer!
Und, immer nur "gute".
(Zumindest, "ich" finde sie gut. Meistens, anfangs, manchmal auch über längere Zeit, und dann auch mal, ganz plötzlich nicht mehr.)
Wenn du in der Lage bist, dein Problem sorgfältig und mit Disziplin in Worte zu fassen, dann kannst du es auch in ein Programm/Hardware umformen. Eher nicht.
Solange deine Sprache, Problembeschreibung so eierig ist, geht es nicht Richtung Lösung.
Beispiel 1:
"Nebenspitzen" sind möglich.
Was ist das?
Was soll dann passieren?
Beispiel 2:
Eine obere Schwelle habe ich vernommen, aber eine Untere, hast du unterschlagen.
Und nein, ohne Hysterese wird es nicht gehen.
Beispiel 3:
Irgendwie hast du sogar vergessen zu sagen, ob das mit diskreter Elektronik, oder als Programm, realisiert werden soll.
Tipp:
Male ein paar verschiedene Signalabläufe, und male jeweils dazu, wie der Ausgang aussehen soll.
Combies Anmerkungen sind häufig ziemlich knapp und für Nicht-Insider schwer verständlich.
Wenn ich Deine Beschreibung richtig verstehe, möchtest Du einen „Schmitt-Trigger“ bauen oder durch Programmierung nachbilden. Genau das macht aus einer Kurve wie der gezeigten eine Folge von high/low-Pegeln.
Sieh Dir am besten mal den Wikipedia-Artikel an. Wenn Du dann noch Fragen hast, kommst Du wieder hier vorbei.
um Kriterien zu finden, musst du selbst erst mal überlegen wie ein "worst Case" Signal aussehen kann.
Um "gute" von "schlechten" Spitzen zu unterscheiden, kann man z.B. Zeitkriterien anlegen: das signal muss mindestens tbd ms über einer Schwelle liegen, um als gültig erkannt zu werden.
Es sind auch Pegel-kriterien denkbar.
Scherheinz:
Zumal noch Angaben zu Spannungswert und Zeit fehlen. Die beiden Achsen sind auf dem Bild nicht zu erkennen....
Wenn man das Bild anguckt, das im Posting gezeigt wird: ja. Wenn man einen Rechtsklick auf das Bild macht, „Grafik anzeigen“ wählt und dann auf Originalgröße zoomt: nein.
Doch: Man könnte die X-Achse als Jahre, Minuten, Wochen oder ähnliches interpretieren. Mit der Y-Achse ist ähnliches möglich. Wirkliche Angaben fehlen dann immer noch.
Tommy56:
Doch: Man könnte die X-Achse als Jahre, Minuten, Wochen oder ähnliches interpretieren. Mit der Y-Achse ist ähnliches möglich. Wirkliche Angaben fehlen dann immer noch.
Das stimmt. Man kann aber wohl davon ausgehen, dass weder Jahrzehnte noch Megavolt gemeint sind.
Warum sollte man überhaupt von irgendwas ausgehen?
Denn es wird sich doch sowieso mit großer Wahrscheinlichkeit als Irrtum/falsch/unvollständig herausstellen.
Und dann muss man sich korrigieren, von vorne anfangen, oder was auch immer...
Nee, für solche Nummern, bin ich eindeutig viel zu faul.
RIN67630:
Ich rätsele, wie ich folgende Aufgabe lösen könnte.
Aus einem diesem Bild
ähnlichen Verlauf muss eine Berechnung gemacht werden:
Das Signal muss durch Rechtecken ersetzt werden, die des Spitzenwerts hoch sind und solange dauern, wie das Signal 80% des Spitzenwerts übersteigt.
Ich habe mal ein anderes Bild genommen, das die Problematik möglicherweise besser darstellt.
Also um zu präzisieren: Die ursprüngliche Abbidung stammte aus dem Seriellen Plotter der Arduino-IDE.
Es geht nicht darum ein signal elektrisch und im Programm zu erfassen, das ist schon erledigt.
Die Einzelmesspunkte fallen im Sekundentakt an. Zwischen 2 Spitzen verlaufen ca. 2 Minuten, aber auch viel mehr. Es geht darum, aus dem Verlauf eine Bewertung zu berechnen.
Das Kriterium "80% des Spitzenwerts" kann man nur nachträglich festlegen, denn wie hoch die Spitze sein wird, weiss man am Anfang nicht.
Desweiteren ist das Signal "verrauscht": es kann auf der Flanke einer Hauptspitze kleine "Zwischenspitzen" geben, die ignoriert werden müssen.
Sicher ist nur, dass eine Hauptspitze ca. 2 Minuten +-30Sekunden dauert.
Ich denke, ich werde nicht darum kommen, zuerst ein Array zu füllen (eine Art Durchlauf-FiFo) und die Analyse nach 2-3 Minuten durchzuführen. Da gehört aber noch eine Menge echtes Multitasking dazu, weil während der Analyse die Datenerfassung weiterlaufen muss.
guntherb:
um Kriterien zu finden, musst du selbst erst mal überlegen wie ein "worst Case" Signal aussehen kann.
Um "gute" von "schlechten" Spitzen zu unterscheiden, kann man z.B. Zeitkriterien anlegen: das signal muss mindestens tbd ms über einer Schwelle liegen, um als gültig erkannt zu werden.
Es sind auch Pegel-kriterien denkbar.
Aber dazu brächte man ein unsauberes Signal.
Voll einverstanden. So unsauber (und ggf auch mehr) kann es sein:
Dazu kommt, dass das Kriterium 80% des Spitzenwertes nur nachträglich berechnet werden kann.
Brauchst du einen Filter, der aus diesem Lärm ein Signal wie in deinem ersten Beitrag macht.
Entweder per Tiefpass, oder du wertest die Bedingung: Spitzen alle 90 .. 150 sec aus.
Da müssten deine neuen "Lärm-Graph" aber eigentlich rausfallen, weil da für mich nur insgesamt 2 Spitzen erkennbar sind und kein einigermaßen regelmäßiger2 Minuten-Zyklus.
RIN67630:
Ich denke, ich werde nicht darum kommen, zuerst ein Array zu füllen (eine Art Durchlauf-FiFo) und die Analyse nach 2-3 Minuten durchzuführen. Da gehört aber noch eine Menge echtes Multitasking dazu, weil während der Analyse die Datenerfassung weiterlaufen muss.
Blöd, dass es die STL nicht auch für die avrlibc gibt. Da gibt es eine FIFO-Vorlage. Sowas mit bekannten Größen selbst zu programmieren ist allerdings nicht so irre schwer.
Was das Multitasking angeht: Evtl. hilft Dir mein Geschreibsel hier.
Also zerfällt deine Aufgabe in 2 Teile:
a) Signal erfassen und in einem Speicher ablegen, in dem es bearbeitet werden kann
b) Signal auswerten.
zu a) ist ja schon einiges Geschrieben worden. FiFo, oder zwei Speicherbereiche, in denen der eine beschrieben wird, während der andere ausgewertet wird.
zu b): sind ja schon 3 Aussagen:
"Die Einzelmesspunkte fallen im Sekundentakt an."
"Zwischen 2 Spitzen verlaufen ca. 2 Minuten, aber auch viel mehr."
"Sicher ist nur, dass eine Hauptspitze ca. 2 Minuten +-30Sekunden dauert."
wobei sich die letzten beiden widersprechen. !!!!
Aber ok. zunächst mußt du nur erkennen, was eine Spitze ist.
z.B: Wenn dein Ruhepegel halbwegs stabil ist eine Triggerschwelle einführen.
Bei tbd Volt/dB Aufzeichnung starten. Dauer: entweder Zeit oder wieder unter Triggerschwelle
in den Daten das Maximum suchen.
prüfen wann 80% zum ersten Mal überschritten wurden, und wann zum letzten Mal.
Ich würde KEINEN Filter einsetzen, der verfälscht dir dein Maximum.
Filter brauchst du höchstens, wenn dein Ruhepegel nicht stabil ist und du den Trigger nachführen musst.
guntherb:
Also zerfällt deine Aufgabe in 2 Teile:
a) Signal erfassen und in einem Speicher ablegen, in dem es bearbeitet werden kann
b) Signal auswerten.
...
Ein Ring-Fifo ist als Bibliothek verfügbar.
Ich überlege den Fifo als feste Zeitverzögerung von ca. 2,5 Minuten zu verwenden. Im Fifo wird ein filtriertes Signal aufgenommen.
In Echtzeit suche ich das Maximum einer Spitze aus dem unfiltrierten Signal.
Damit habe ich dann die 80% Schwellen, um später die Dauer des Ereignis aus dem Fifo zu messen.
Selbst wenn die Filterfunktion eine Verzögerung einbringt, ist sie symmetrisch und sollte auf die Berechnung der Dauer keinen Einfluss auswirken.
guntherb:
Woher weißt du, ob dein Maximum wirklich ein Maximum ist, oder nur eine Spitze?
Ich stelle mir eine feste Schwelle vor. Darüber wird das Maximum ständig ermittelt, darunter wird das Maximum an die Nachbearbeitung weitergeleitet, aber nur wenn die Schwelle mindestens 1 Minute und nicht länger als 3 Minuten* überschritten wurde.
*Es gilt auch Nachbarn mit Rasenmäher oder Laubbläser oder ein verliebtes Vogel, der sich gerade 80cm neben dem Mikrofon nistet... Diese Effekte dürfen wenn möglich nicht mit gezählt werden.