optimize left edge finding in autotune

This commit is contained in:
xtaci
2020-10-10 11:47:03 +08:00
parent dd1ac88f92
commit 88fc14ae6d
+5 -7
View File
@@ -27,20 +27,18 @@ func (tune *autoTune) Sample(bit bool, seq uint32) {
// Period
// Falling Edge Rising Edge
func (tune *autoTune) FindPeriod(bit bool) int {
// find left and right edges for a bit
// last pulse and initial index setup
lastPulse := tune.pulses[0]
idx := 1
// left edge
var leftEdge int
for ; idx < len(tune.pulses); idx++ {
if lastPulse.seq+1 == tune.pulses[idx].seq {
if lastPulse.bit != bit && tune.pulses[idx].bit == bit {
if lastPulse.bit != bit && tune.pulses[idx].bit == bit { // edge found
if lastPulse.seq+1 == tune.pulses[idx].seq { // ensure edge continuity
leftEdge = idx
break
}
} else {
return -1
}
lastPulse = tune.pulses[idx]
}
@@ -51,8 +49,8 @@ func (tune *autoTune) FindPeriod(bit bool) int {
idx = leftEdge + 1
for ; idx < len(tune.pulses); idx++ {
if lastPulse.seq+1 == tune.pulses[idx].seq {
if lastPulse.bit == bit && tune.pulses[idx].bit != bit {
if lastPulse.seq+1 == tune.pulses[idx].seq { // ensure pulses in this level monotonic
if lastPulse.bit == bit && tune.pulses[idx].bit != bit { // edge found
rightEdge = idx
break
}