Versuchsingenieure / Produktionsingenieure (m/w)
Prozessentwicklung, Versuchswesen in den Bereichen Messtechnik, Elektronik, Getriebetechnik
über Steinbach Partner Executive Consultants
Region Stuttgart und Unterfranken
Test Engineer (m/w)
Durchführung und Analyse von Versuchen an PKW-Innenraumkomponenten
Johnson Controls Automotive Experienc über Scheerer Werbung GmbH
Burscheid
Folgende Kanäle sind vorhanden:
- CopyYFv,
- CopyYFz,
- CopyYResultXY and
- CopyYFvn
Berechnet habe ich daraus folgende Kanäle:
- winkel,
- Fc_winkel,
- Fcn_winkel und
- Frad_wkzg_winkel
Jetzt ziehe ich "Fc_winkel, Fcn_winkel und Frad_wkzg_winkel" jeweils in ein seperates 2D-Diagramm, so dass man alle Maximum-Peaks sehen kann. Jeder Graph sollte ca. 44 Peaks zeigen:
- die Peaks von "Fc_winkel" befinden sich auf einem Level von ca. 150 N,
- die Peaks von "Fcn_winkel" befinden sich auf einem Level von ca. 70 N und
- die Peaks von "Frad_wkzg_winkel" befinden sich auf einem Level von ca. 160 N.
Meine Frage:
Ist es irgendwie möglich den Mittelwert aller Messwerte der Maximum-Peaks einer Kurve (z.B. "Fc_winkel") auszurechnen? Am besten automatisch, denn ich habe sehr viele Messdateien...
DIAdem-Version: 10.2, 11.1, 2010 und auf alten CD's runter bis 3.0 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 1996
Beiträge: 569
Registriert seit: Oct 2008
RE: Kurve: Mittelwert der Maximum-Peaks?
Hallo Alex,
es gibt zwar in DIAdem unter Basis / Kanalfunktionen / Peak suchen ein Tool, aber das findet auch lokale Maxima und ist sicher nicht das was Du suchst. Da hilft nur selber programmieren...
Ich habe mal was ganz schnell zusammengeschustert ...
Code:
Dim myFc_winkel, i, j, myMittel, myPeak, myFc_winkel_peak, suche_peak, mymin
Call Data.Root.ChannelGroups.Add("Peak", 2).Activate()
Set myFc_winkel_peak = Data.Root.ChannelGroups("Peak").Channels.Add("Fc_winkel_peak",DataTypeFloat64)
set myFc_winkel = Data.Root.ChannelGroups("test").Channels("Fc_winkel")
j = 1
suche_peak = True
mymin = myFc_winkel.Properties("minimum").Value
myPeak = mymin
myMittel = (myFc_winkel.Properties("maximum").Value - myFc_winkel.Properties("minimum").Value) / 2
for i = 1 to myFc_winkel.Properties("length").Value
if suche_peak then
if myFc_winkel(i) > myPeak and myFc_winkel(i) > myMittel+10 then
myPeak = myFc_winkel(i)
end if
if myFc_winkel(i) < myMittel-10 and myPeak <> mymin then
suche_peak = false
end if
else
if myFc_winkel(i) > myMittel+10 then
suche_peak = true
myFc_winkel_peak(j) = myPeak
j = j +1
myPeak = mymin
end if
end if
next
Also über eine For Schleife durchsuchst Du die Daten, merkst Dir das Maximum bis Du unter den Mittelwert (-10) fällst. Peak in Kanal speichern, nächstes Maximum suchen (welches über Mittelwert plus 10 liegt) usw. Die +- 10 sind eine kleine Hysterese, damit nicht ein kleiner Anstieg sofort als Peak erkannt wird.
Danach Mittelwertberechnung mit Diademfunktion.
Gruß
Bruno
Dim myFc_winkel, iFc_winkel, jFc_winkel, myMittelFc_winkel, myPeakFc_winkel, myFc_winkel_maxpeaks, suche_peakFc_winkel, myminFc_winkel
Set myFc_winkel_maxpeaks = Data.Root.ChannelGroups("Mittelwerte-Max-Peaks").Channels.Add("Fc_winkel_maxpeaks",DataTypeFloat64)
set myFc_winkel = Data.Root.ChannelGroups("[1]").Channels("Fc_winkel")
jFc_winkel = 1
suche_peakFc_winkel = True
myminFc_winkel = myFc_winkel.Properties("minimum").Value
myPeakFc_winkel = myminFc_winkel
myMittelFc_winkel = (myFc_winkel.Properties("maximum").Value - myFc_winkel.Properties("minimum").Value) / 2
for iFc_winkel = 1 to myFc_winkel.Properties("length").Value
if suche_peakFc_winkel then
if myFc_winkel(iFc_winkel) > myPeakFc_winkel and myFc_winkel(iFc_winkel) > myMittelFc_winkel+10 then
myPeakFc_winkel = myFc_winkel(iFc_winkel)
end if
if myFc_winkel(iFc_winkel) < myMittelFc_winkel-10 and myPeakFc_winkel <> myminFc_winkel then
suche_peakFc_winkel = false
end if
else
if myFc_winkel(iFc_winkel) > myMittelFc_winkel+10 then
suche_peakFc_winkel = true
myFc_winkel_maxpeaks(jFc_winkel) = myPeakFc_winkel
jFc_winkel = jFc_winkel +1
myPeakFc_winkel = myminFc_winkel
end if
end if
next
Dim myFcn_winkel, iFcn_winkel, jFcn_winkel, myMittelFcn_winkel, myPeakFcn_winkel, myFcn_winkel_maxpeaks, suche_peakFcn_winkel, myminFcn_winkel
Set myFcn_winkel_maxpeaks = Data.Root.ChannelGroups("Mittelwerte-Max-Peaks").Channels.Add("Fcn_winkel_maxpeaks",DataTypeFloat64)
set myFcn_winkel = Data.Root.ChannelGroups("[1]").Channels("Fcn_winkel")
jFcn_winkel = 1
suche_peakFcn_winkel = True
myminFcn_winkel = myFcn_winkel.Properties("minimum").Value
myPeakFcn_winkel = myminFcn_winkel
myMittelFcn_winkel = (myFcn_winkel.Properties("maximum").Value - myFcn_winkel.Properties("minimum").Value) / 2
for iFcn_winkel = 1 to myFcn_winkel.Properties("length").Value
if suche_peakFcn_winkel then
if myFcn_winkel(iFcn_winkel) > myPeakFcn_winkel and myFcn_winkel(iFcn_winkel) > myMittelFcn_winkel+10 then
myPeakFcn_winkel = myFcn_winkel(iFcn_winkel)
end if
if myFcn_winkel(iFcn_winkel) < myMittelFcn_winkel-10 and myPeakFcn_winkel <> myminFcn_winkel then
suche_peakFcn_winkel = false
end if
else
if myFcn_winkel(iFcn_winkel) > myMittelFcn_winkel+10 then
suche_peakFcn_winkel = true
myFcn_winkel_maxpeaks(jFcn_winkel) = myPeakFcn_winkel
jFcn_winkel = jFcn_winkel +1
myPeakFcn_winkel = myminFcn_winkel
end if
end if
next
Dim myFrad_wkzg_winkel, iFrad_wkzg_winkel, jFrad_wkzg_winkel, myMittelFrad_wkzg_winkel, myPeakFrad_wkzg_winkel, myFrad_wkzg_winkel_maxpeaks, suche_peakFrad_wkzg_winkel, myminFrad_wkzg_winkel
Set myFrad_wkzg_winkel_maxpeaks = Data.Root.ChannelGroups("Mittelwerte-Max-Peaks").Channels.Add("Frad_wkzg_winkel_maxpeaks",DataTypeFloat64)
set myFrad_wkzg_winkel = Data.Root.ChannelGroups("[1]").Channels("Frad_wkzg_winkel")
jFrad_wkzg_winkel = 1
suche_peakFrad_wkzg_winkel = True
myminFrad_wkzg_winkel = myFrad_wkzg_winkel.Properties("minimum").Value
myPeakFrad_wkzg_winkel = myminFrad_wkzg_winkel
myMittelFrad_wkzg_winkel = (myFrad_wkzg_winkel.Properties("maximum").Value - myFrad_wkzg_winkel.Properties("minimum").Value) / 2
for iFrad_wkzg_winkel = 1 to myFrad_wkzg_winkel.Properties("length").Value
if suche_peakFrad_wkzg_winkel then
if myFrad_wkzg_winkel(iFrad_wkzg_winkel) > myPeakFrad_wkzg_winkel and myFrad_wkzg_winkel(iFrad_wkzg_winkel) > myMittelFrad_wkzg_winkel+10 then
myPeakFrad_wkzg_winkel = myFrad_wkzg_winkel(iFrad_wkzg_winkel)
end if
if myFrad_wkzg_winkel(iFrad_wkzg_winkel) < myMittelFrad_wkzg_winkel-10 and myPeakFrad_wkzg_winkel <> myminFrad_wkzg_winkel then
suche_peakFrad_wkzg_winkel = false
end if
else
if myFrad_wkzg_winkel(iFrad_wkzg_winkel) > myMittelFrad_wkzg_winkel+10 then
suche_peakFrad_wkzg_winkel = true
myFrad_wkzg_winkel_maxpeaks(jFrad_wkzg_winkel) = myPeakFrad_wkzg_winkel
jFrad_wkzg_winkel = jFrad_wkzg_winkel +1
myPeakFrad_wkzg_winkel = myminFrad_wkzg_winkel
end if
end if
next
Aber was ist, wenn ich jetzt Messdaten habe, in welchen die Kurven "Fc_winkel, Fcn_winkel und Frad_wkzg_winkel" eine starke "Zick-Zack-Form" aufzeigen (z.B. durch Schwingungen), siehe folgende Beispieldatei:
Kann es sein, dass es dann zu Fehler in der Auswertung kommt? Wäre die Hysterese in diesem Fall zu klein, so dass ein Maximum erkannt wird, wo keines ist? Macht es Sinn das Intervall der Hysterese zu vergrößern?