aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJulian Picht <julian.picht@gmail.com>2016-12-20 20:01:05 +0100
committerJulian Picht <julian.picht@gmail.com>2016-12-20 20:01:05 +0100
commit6fbf801a0a1181861f82eab5af738a4290b21978 (patch)
tree2e25beeb5b34de58b942be7bf4912cbb6cbfd3ed /tools
parent1de8438b569e798a78d5f7dbea335539ebf68620 (diff)
downloadlibsurvive-6fbf801a0a1181861f82eab5af738a4290b21978.tar.gz
libsurvive-6fbf801a0a1181861f82eab5af738a4290b21978.tar.bz2
looks like disambiguate is probably working pretty well(?)
Diffstat (limited to 'tools')
-rw-r--r--tools/disambiguate/disambiguate.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/tools/disambiguate/disambiguate.c b/tools/disambiguate/disambiguate.c
index 581e964..9a52c16 100644
--- a/tools/disambiguate/disambiguate.c
+++ b/tools/disambiguate/disambiguate.c
@@ -33,6 +33,7 @@ typedef struct disambiguator_ {
int scores[DIS_NUM_VALUES];
dis_state state;
long last;
+ int max_confidence;
} disambiguator;
typedef struct classified_pulse_ {
@@ -45,15 +46,22 @@ void disambiguator_init(disambiguator * d) {
memset(&(d->scores), 0x0, sizeof(d->times));
d->state = D_STATE_UNLOCKED;
d->last = 0;
+ d->max_confidence = 0;
}
void disambiguator_discard(disambiguator * d, long age) {
+ int confidence = 0;
for (unsigned int i = 0; i < DIS_NUM_VALUES; ++i) {
if (d->times[i] != 0 && d->times[i] < age) {
d->times[i] = 0;
d->scores[i] = 0;
+ } else {
+ if (d->scores[i] > confidence) {
+ confidence = d->scores[i];
+ }
}
}
+ d->max_confidence = confidence;
}
int disambiguator_find_nearest(disambiguator * d, long time, int max_diff) {
@@ -101,11 +109,18 @@ pulse_type disambiguator_step(disambiguator * d, long time, int length) {
if (d->scores[idx] >= 30) {
d->state = D_STATE_LOCKED;
// printf("MATCH: %li %d\n", time - d->times[idx], scores[idx]);
- return P_SYNC;
}
+/*
+ for (unsigned int i = 0; i < DIS_NUM_VALUES; ++i) {
+ if (d->scores[i] > 0 && d->times[i] != 0)
+ printf("TS %2d %li %d\n", i, d->times[i], d->scores[i]);
+ }
+*/
d->times[idx] = time;
d->last = time;
- return d->state == D_STATE_LOCKED ? P_SYNC : P_UNKNOWN;
+ return d->state == D_STATE_LOCKED ? (
+ d->scores[idx] >= d->max_confidence ? P_SYNC : P_SWEEP
+ ) : P_UNKNOWN;
}
return d->state == D_STATE_LOCKED ? P_SWEEP : P_UNKNOWN;
@@ -125,9 +140,6 @@ int main() {
}
long last = 0;
- int num = 0;
- long data[12];
- memset(&data, 0x0, sizeof(data));
disambiguator d;
disambiguator_init(&d);
@@ -141,16 +153,6 @@ int main() {
if (fscanf(f, "%s %d %d %d %li", controller, &sensor, &unknown, &length, &time) != 5) {
break;
}
- if (length > 2750) {
- char cc = length_to_pulse(length);
- printf("PULSE %d %c%d ", length, cc & 0x1 ? 'j' : 'k', (cc >> 1) & 0x3);
- for (int i = 0; i < 12; ++i) {
- if (data[i] != 0)
- printf("%8li ", (time-data[i]) % 400000);
- }
- printf("\n");
- data[num++ % 12] = time;
- }
switch (disambiguator_step(&d, time, length)) {
default: