//Get frequency and update running totals double getFreq(int gate){ gettimeofday(¤tTime[gate], NULL); long long timeDiff = timeval_diff(¤tTime[gate], &lastTime[gate]); lastTime[gate] = currentTime[gate]; // High pass to ignore first trigger when a car passes, and catch only // actual edges of the blink if (TO_FREQ(timeDiff) < MIN_CUTTOFF) { return 0; } //Running average calulation, runningDiff[gate] = runningDiff[gate] + EXP_CONST * (timeDiff - runningDiff[gate]); //Don't divide by 0 if (runningDiff[gate] == 0) return 0; return TO_FREQ(runningDiff[gate]); }
static void extension_zone(int accrochage,int debut,int fin,int to,short *tableau) { #define POURCENTAGE 25 #define SEUIL 20 #define MAUVAIS_CHEMIN() #define ECART_CORRECT(a,b) ( (maximum(a,b) - minimum(a,b)) < minimum(SEUIL,(POURCENTAGE * minimum(a,b) / 100)) ) int trame,avant,i,m,j; RESULT table[AVANCE+1][cst_pics_amdf]; RESULT normal[cst_pics_amdf]; tableau[accrochage] = avant = to; /* ---------------on etend a gauche ---------------------------*/ for (trame=accrochage;trame>debut;) { table[0][0].rang = avant; for (i=1;i<=AVANCE && trame-i >=debut; i++) trier(trame-i,table[i-1][0].rang,table[i]); trier( m=maximum(trame-AVANCE , debut) ,avant,normal); i--; if ( table[i][0].rang != -1 && normal[0].rang != -1 && table[i][0].rang && normal[0].rang && avant && abs(TO_FREQ(table[i][0].rang) - TO_FREQ(avant)) > abs(TO_FREQ(normal[0].rang) - TO_FREQ(avant)) ) { for (j=1;j<=i; j++) tableau[trame-j] = interpolation(trame,avant,m,normal[0].rang,trame-j); trame -= i; avant = normal[0].rang; } else { if ( table[1][0].rang && ECART_CORRECT(TO_FREQ(avant),TO_FREQ(table[1][0].rang))) avant = tableau[--trame] = table[1][0].rang; else tableau[--trame] = 0; } } /* ------------------ on etend a droite -----------------------*/ avant = tableau[accrochage]; for (trame=accrochage;trame<fin;) { table[0][0].rang = avant; for (i=1;i<=AVANCE && trame+i <= fin; i++) trier(trame+i,table[i-1][0].rang,table[i]); trier( m = minimum(trame+AVANCE , fin) ,avant,normal); i--; if ( table[i][0].rang != -1 && normal[0].rang != -1 && table[i][0].rang && normal[0].rang && avant && abs(TO_FREQ(table[i][0].rang) - TO_FREQ(avant)) > abs(TO_FREQ(normal[0].rang) - TO_FREQ(avant)) ) { for (j=1;j<=i; j++) tableau[trame+j] = interpolation(trame,avant,m,normal[0].rang,trame+j); trame += i; avant = normal[0].rang; } else { if ( table[1][0].rang && ECART_CORRECT(TO_FREQ(avant),TO_FREQ(table[1][0].rang))) avant = tableau[++trame] = table[1][0].rang; else tableau[++trame] = 0; } } #undef MAUVAIS_CHEMIN #undef SEUIL #undef ECART_CORRECT #undef POURCENTAGE }