Hallo, ich versuche momentan ein Skript in Diadem zu pflegen, das mir die Minimumwerte in einem Zeitkontinuierlichen Signal(Spannungseinbrüche wegen mehreren Autostart) ermittelt. Der Code funktionniert nicht. Kann mir jemand sagen warum. Ich wäre super dankbar für jede Hilfe. Den CODE habe ich reichlich mit Kommentare versehen: DIM Num_C(100), zaehl, start, peak_index I start = 1 ' Initialisierung: Anfang des ersten Startvorgangs peak_index = 1 ' Initialisierung: Annahme für das erste Minimum Num_C(1) = CNo("Spannung") Num_C(2) = CNo("Time") '1KHz Spannungsmessung Num_C(3) = CNo("PeakY") Num_C(4) = CNo("PeakX") Num_C(5) = CNo("Motor_laeuft") '(=0 Motor AUS) '(=1 Motor AN) I=ChnLength(Num_C(4)) FOR zaehl = 1 TO I IF (chd(zaehl,Num_C(4))-chd(start,Num_C(4))) <0.5 THEN 'Betrachte nur Minima innerhalb eines kurzen Zeitraums/Startvorgangs ' Finde abs. Minimum im Zeitraum. IF (chd(peak_index,Num_C(3)) > chd(zaehl,Num_C(3))) THEN chd(peak_index,Num_C(3))= NOVALUE peak_index = zaehl ELSE chd(zaehl,Num_C(3)) = NOVALUE ' Lösche/markiere lokale Minima. END IF ELSE ' Starte je Suche in weiterem Zeitraum von Neuem. start = zaehl peak_index = zaehl END IF Next FOR zaehl = 1 TO L1 IF chd(zaehl,Num_C(3))= NOVALUE THEN 'Sofern y-Wert mit NOVALUE markiert wurde, chd(zaehl,Num_C(4))= NOVALUE 'setze nachträglich auch Zeit-Werte zu NOVALUE. END IF Next ' NOVALUES löschen... CALL ChnNovHandle("PeakX","PeakY","Delete","XY",1,0,0) ' Alle gefundenen Peaks betrachten: FOR peak_index = 1 TO ChnLength("PeakX") 'Nächststehenden Zeitpunkt des Peaks in der 10Hz-Domäne finden: zaehl = Find( "abs( Ch(""Daten_L_10Hz: Time"") - " & str(CHV(peak_index,"PeakX")) & " ) < 0.1 ") 'Diejenigen Peaks löschen, bei denen Motor_laeuft = 1 gültig ist IF chd(zaehl,Num_C(5))=1 THEN chd(peak_index, Num_C(3)) = NOVALUE ELSE 'Berechnung zwischen letztem "Motor-geht-Aus" und aktuellen "PeakX". start= zaehl 'Von PeakX rückwärts zählen bis zu Zeitpunkt, an dem Motor aus geht IF start>1 THEN WHILE (chd(start-1,Num_C(5))=0) AND (start > 1) start = start -1 WEND END IF END IF Next ' NOVALUES löschen... CALL ChnNovHandle("PeakX","PeakY","Delete","XY",1,0,0)
Peters dada schrieb: > Der Code funktionniert nicht. Das ist ja mal eine ausführliche Fehlerbeschreibung.
Die Ausführung des Skriptes ergibt "Gruppen" von Minimas innerhalb von Zeitintervallen. D.h. 20s...21s--->3 Minimas 90s...91s--->3 Minimas . . . Bis Ende der Zeitaxe Num_C(2) = CNo("Time") Was ich aber gerne bräuchte ist "ein" Minima. Dafür braucht das Program nach dem es die Minimumwerte ermittelt hat noch eine Methode die mir den kleinsten Minima in den einzelnen Zeitintervallen sucht. Jemand eine Idee?
Peters dada schrieb: > Jemand eine Idee? Hysterese für deine Peakerkennung oder die automatische Peaksuche von DIAdem?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.