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.