Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public class Preprocessor extends BasicProducer<Event> implements Processor<Even
case Type.AVG_COMPR:
case Type.MIN_COMPR:
case Type.MAX_COMPR: applyIntervalProcessor(event, type, param); break
case Type.SWD_COMPR: applySwingingDoor(event, type, param/2.0); break
case Type.SWD_COMPR: applySwingingDoor(event, type, param); break
}
} else {
// forward unmodified
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class SwingingDoorProcessor extends BasicProducer<Event> implements Processor<Ev
double deviation

private static class Slopes {
double upper, lower
double upper, lower, direct
}

private Event first, last
Expand Down Expand Up @@ -72,30 +72,36 @@ class SwingingDoorProcessor extends BasicProducer<Event> implements Processor<Ev
// check slopes?
if (slopes!=null) {
Slopes slopesTmp=calculateSlopes(first, e)
// open swinging door
if (slopesTmp.upper>slopes.upper) {
slopes.upper=slopesTmp.upper
if (slopesTmp.direct <= slopes.upper && slopesTmp.direct >= slopes.lower) {
// Punkt ist innerhalb der Swinging Door, alten Punkt verwerfen

// Swinging Door weiter schließen
if (slopesTmp.upper < slopes.upper) {
slopes.upper = slopesTmp.upper
}
if (slopesTmp.lower > slopes.lower) {
slopes.lower = slopesTmp.lower
}

last = e
return
}
if (slopesTmp.lower<slopes.lower) {
slopes.lower=slopesTmp.lower
}
// overwind?
if (slopes.upper>slopes.lower) {
else {
// Punkt ist außerhalb der Swinging Door
// store last
produce last
// restart
first=last
last=e
slopes=calculateSlopes(first, e)
return
}
// value is within slopes
}
}
else {
// second event, calculate initial slopes
last=e
return
slopes=calculateSlopes(first, e)
}
// second event, calculate initial slopes
last=e
slopes=calculateSlopes(first, e)
}

public void close() {
Expand All @@ -120,8 +126,9 @@ class SwingingDoorProcessor extends BasicProducer<Event> implements Processor<Ev
}

private Slopes calculateSlopes(Event begin, Event end) {
double upper=((Number)end.pv.value-((Number)begin.pv.value+deviation))/(end.pv.timestamp.time-begin.pv.timestamp.time)
double lower=((Number)end.pv.value-((Number)begin.pv.value-deviation))/(end.pv.timestamp.time-begin.pv.timestamp.time)
new Slopes(upper: upper, lower: lower)
double upper = ((Number)end.pv.value + deviation - (Number)begin.pv.value) / (end.pv.timestamp.time - begin.pv.timestamp.time)
double lower = ((Number)end.pv.value - deviation - (Number)begin.pv.value) / (end.pv.timestamp.time - begin.pv.timestamp.time)
double direct = ((Number) end.pv.value - (Number) begin.pv.value) / (end.pv.timestamp.time - begin.pv.timestamp.time)
new Slopes(upper: upper, lower: lower, direct: direct)
}
}