www.pudn.com > eval-1.2.zip > stat.h


#ifndef JKL_STAT
#define JKL_STAT

#include "def.h"

void CalcTime(dump_t *, unsigned, char *);
void CalcLoss(dump_t *, unsigned, loss_t *, char *);
void CalcDist(dump_t *, unsigned, loss_t *);
void CalcJitter(dump_t *, unsigned);
void CalcDelay(dump_t *, unsigned);

void PoBLoss(data_t *, unsigned);

void OutJitter(dump_t *, unsigned, char *);
void CalcSRate(dump_t *, unsigned, double, char *);
void CalcRRate(dump_t *, unsigned, double, char *);
void CalcHist(dump_t *, unsigned, unsigned, unsigned, char *);

double min(avg_t *, DIR, double, double);
double max(avg_t *, DIR, double, double);
double avg(avg_t *, DIR, double, double);
double std(avg_t *, DIR, double, double, double);
double expsmooth(avg_t *, DIR, double, double, double);

void norm(avg_t *);
void norm1(avg_t *, double);

int pred(avg_t *, DIR, int, double);

double KorrKoeff(avg_t *, double, double);
double AutoKorr(avg_t *, double, double);

void Hist(double *, unsigned, double, double, unsigned);
double Avg_D(double *, unsigned);
double Std_D(double *, unsigned, double);

#define MINV(v, a, dir, start, end, field) {                                       \
  int i = 0;                                                                       \
  double min;                                                                      \
  while (i < a.nP && a.P[i].t[dir] < start) i++;                                   \
  min = a.P[i++].field[dir];                                                       \
  while (i < a.nP && (a.P[i].t[dir] < end || a.P[i].t[dir] == -1 || end == -1)) {  \
    if (a.P[i].field[dir] != 0 && a.P[i].t[dir] != -1) {                           \
      if (a.P[i].field[dir] < min)                                                 \
        min = a.P[i].field[dir];                                                   \
    }                                                                              \
    i++;                                                                           \
  }                                                                                \
  v = min;                                                                         \
}

#define MAXV(v, a, dir, start, end, field) {                                       \
  int i = 0;                                                                       \
  double max;                                                                      \
  while (i < a.nP && a.P[i].t[dir] < start) i++;                                   \
  max = a.P[i++].field[dir];                                                       \
  while (i < a.nP && (a.P[i].t[dir] < end || a.P[i].t[dir] == -1 || end == -1)) {  \
    if (a.P[i].field[dir] != 0 && a.P[i].t[dir] != -1) {                           \
      if (a.P[i].field[dir] > max)                                                 \
        max = a.P[i].field[dir];                                                   \
    }                                                                              \
    i++;                                                                           \
  }                                                                                \
  v = max;                                                                         \
}
/*
#define NORM(a, field) {                                                                       \
  unsigned i;                                                                                  \
  double min1, max1, min2, max2;                                                               \
  MINV(min1, a, TO_MOBILE, a.P[0].t[TO_MOBILE], a.P[a.nP - 1].t[TO_MOBILE], field);            \
  MINV(min2, a, FROM_MOBILE, a.P[0].t[FROM_MOBILE], a.P[a.nP - 1].t[FROM_MOBILE], field);      \
  MAXV(max1, a, TO_MOBILE, a.P[0].t[TO_MOBILE], a.P[a.nP - 1].t[TO_MOBILE], field);            \
  MAXV(max2, a, FROM_MOBILE, a.P[0].t[FROM_MOBILE], a.P[a.nP - 1].t[FROM_MOBILE], field);      \
  for (i=0; i