Ejemplo n.º 1
0
Archivo: b2mc.c Proyecto: celsius/sptk
int main(int argc, char **argv)
{
   int m = ORDER, m1;
   FILE *fp = stdin;
   double a = ALPHA, *x;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'a':
            a = atof(*++argv);
            --argc;
            break;
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   m1 = m + 1;

   x = dgetmem(m1);

   while (freadf(x, sizeof(*x), m1, fp) == m1) {
      b2mc(x, x, m, a);
      fwritef(x, sizeof(*x), m1, stdout);
   }
   return (0);
}
Ejemplo n.º 2
0
int main(int argc, char **argv)
{
   int m = ORDERA, n = ORDERC;
   FILE *fp = stdin;
   double *c, *a;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 'M':
            n = atoi(*++argv);
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   a = dgetmem(m + n + 2);
   c = a + m + 1;

   while (freadf(a, sizeof(*a), m + 1, fp) == m + 1) {
      lpc2c(a, m, c, n);
      fwritef(c, sizeof(*c), n + 1, stdout);
   }
   return (0);
}
Ejemplo n.º 3
0
void main(int argc, char **argv)
{
    int		m = ORDER, i;
    FILE	*fp = stdin;
    double	*x, k;
    
    
    if ((cmnd = strrchr(argv[0], '/')) == NULL)
	cmnd = argv[0];
    else
	cmnd++;
    while (--argc)
	if (**++argv == '-') {
	    switch (*(*argv+1)) {
		case 'm':
		    m = atoi(*++argv);
		    --argc;
		    break;
		case 'h':
		    usage(0);
		default:
		    fprintf(stderr, "%s : Invalid option '%c' !\n", cmnd, *(*argv+1));
		    usage(1);
		}
	}
	else 
	    fp = getfp(*argv, "r");

    x = dgetmem(m+1);
    
    while(freadf(x, sizeof(*x), m+1, fp) == m+1){
	norm0(x, x, m);
	fwritef(x, sizeof(*x), m+1, stdout);
    }
    exit(0);
}
Ejemplo n.º 4
0
int main(int argc, char **argv)
{
   int m = DEF_M;
   FILE *fp = stdin;
   double *csm, *r;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   csm = dgetmem(2 * m + 2 * m);
   r = csm + 2 * m;

   while (freadf(csm, sizeof(*csm), 2 * m, fp) == 2 * m) {
      csm2acr(csm, r, m);
      fwritef(r, sizeof(*r), 2 * m, stdout);
   }

   return 0;
}
Ejemplo n.º 5
0
Archivo: ifft.c Proyecto: celsius/sptk
int main(int argc, char *argv[])
{
   FILE *fp;
   char *s, *infile = NULL, c;
   int size2;
   double *x, *y;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;

   while (--argc) {
      if (*(s = *++argv) == '-') {
         c = *++s;
         if ((c == 'l') && (*++s == '\0')) {
            s = *++argv;
            --argc;
         }
         switch (c) {
         case 'l':
            size = atoi(s);
            break;
         case 'i':
         case 'r':
            c -= ('a' - 'A');
         case 'I':
         case 'R':
            out = c;
            break;
         case 'h':
         default:
            usage();
         }
      } else
         infile = s;
   }

   fp = stdin;

   if (infile) {
      fp = getfp(infile, "rb");
   }

   x = dgetmem(size2 = size + size);
   y = x + size;

   while (!feof(fp)) {
      if (freadf(x, sizeof(*x), size2, fp) != size2)
         break;

      ifft(x, y, size);

      if (out != 'I')
         fwritef(x, sizeof(*x), size, stdout);
      if (out != 'R')
         fwritef(y, sizeof(*y), size, stdout);
   }

   if (infile) {
      fclose(fp);
   }

   return (0);
}
Ejemplo n.º 6
0
int main(int argc, char **argv)
{
   int m = ORDER, num = 0, otype = OTYPE, i;
   FILE *fp = stdin, *fp1 = NULL;
   double *x, *y, sub, sum, z = 0.0;
   Boolean frame = FRAME;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 'o':
            otype = atoi(*++argv);
            --argc;
            break;
         case 'f':
            frame = 1 - frame;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else if (fp1 == NULL)
         fp1 = getfp(*argv, "rb");
      else
         fp = getfp(*argv, "rb");

   x = dgetmem(m + m + 2);
   y = x + m + 1;

   while (freadf(x, sizeof(*x), m + 1, fp) == m + 1
          && freadf(y, sizeof(*y), m + 1, fp1) == m + 1) {
      sum = 0.0;
      for (i = 1; i <= m; i++) {
         sub = x[i] - y[i];
         sum += sub * sub;
      }

      if (otype == 0) {
         sum = sqrt(2.0 * sum);
         sum *= LN_TO_LOG;
      } else if (otype == 2)
         sum = sqrt(sum);

      if (!frame) {
         z += sum;
         num++;
      } else
         fwritef(&sum, sizeof(sum), 1, stdout);
   }

   if (!frame) {
      z = z / (double) num;
      fwritef(&z, sizeof(z), 1, stdout);
   }

   return 0;
}
Ejemplo n.º 7
0
Archivo: pca.c Proyecto: EQ4/SPTK
int main(int argc, char *argv[])
{
   FILE *fp = stdin, *fp_eigen = NULL;
   int i, j, k, n = PRICOMP_ORDER, leng = LENG, total = -1;
   BOOL out_evecFlg = FALSE, out_evalFlg = FALSE;
   double sum;
   double *buf = NULL;
   double *mean = NULL, **var = NULL;
   double eps = EPS;
   int itemax = ITEMAX;
   double **e_vec = NULL, *e_val = NULL;        /* eigenvector and eigenvalue */
   double *cont_rate = NULL;    /* contribution rate */
   double jacobi_conv;
   float_list *top, *cur, *prev, *tmpf, *tmpff;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;

   while (--argc)
      if ((**++argv) == '-') {
         switch (*(*argv + 1)) {
         case 'l':
            leng = atoi(*++argv);
            --argc;
            break;
         case 'n':
            n = atoi(*++argv);
            --argc;
            break;
         case 'e':
            eps = atof(*++argv);
            --argc;
            break;
         case 'i':
            itemax = atoi(*++argv);
            --argc;
            break;
         case 'v':
            out_evecFlg = TRUE;
            break;
         case 'V':
            out_evalFlg = TRUE;
            fp_eigen = getfp(*++argv, "wb");
            --argc;
            break;
         case 'h':
            usage(EXIT_SUCCESS);
         default:
            fprintf(stderr, "%s : Invalid option '%s'!\n", cmnd, *argv);
            usage(EXIT_FAILURE);
         }
      } else
         fp = getfp(*argv, "rb");

   if (n > leng) {
      fprintf(stderr, "\n %s (Error) output number of pricipal component"
              " must be less than length of vector.\n", cmnd);
      usage(EXIT_FAILURE);
   }

   /* -- Count number of input vectors and read -- */
   buf = dgetmem(leng);
   top = prev = (float_list *) malloc(sizeof(float_list));
   top->f = fgetmem(leng);
   total = 0;
   prev->next = NULL;
   while (freadf(buf, sizeof(*buf), leng, fp) == leng) {
      cur = (float_list *) malloc(sizeof(float_list));
      cur->f = fgetmem(leng);
      for (i = 0; i < leng; i++) {
         cur->f[i] = (float) buf[i];
      }
      total++;
      prev->next = cur;
      cur->next = NULL;
      prev = cur;
   }
   free(buf);
   buf = dgetmem(total * leng);
   for (i = 0, tmpf = top->next; tmpf != NULL; i++, tmpf = tmpff) {
      for (j = 0; j < leng; j++) {
         buf[i * leng + j] = tmpf->f[j];
      }
      tmpff = tmpf->next;
      free(tmpf->f);
      free(tmpf);
   }
   free(top);

/* PCA */
   /* allocate memory for mean vectors and covariance matrix */
   mean = dgetmem(leng);
   var = malloc_matrix(leng);

   /* calculate mean vector */
   for (i = 0; i < leng; i++) {
      for (j = 0, sum = 0.0; j < total; j++)
         sum += buf[i + j * leng];
      mean[i] = sum / total;
   }
   /* calculate cov. mat. */
   for (i = 0; i < leng; i++) {
      for (j = 0; j < leng; j++) {
         sum = 0.0;
         for (k = 0; k < total; k++)
            sum +=
                (buf[i + k * leng] - mean[i]) * (buf[j + k * leng] - mean[j]);
         var[i][j] = sum / total;
      }
   }

   /* allocate memory for eigenvector and eigenvalue */
   e_vec = malloc_matrix(leng);
   e_val = dgetmem(leng);

   /* calculate eig.vec. and eig.val. with jacobi method */
   if ((jacobi_conv = jacobi(var, leng, eps, e_val, e_vec, itemax)) == -1) {
      fprintf(stderr, "Error : matrix is not symmetric.\n");
      exit(EXIT_FAILURE);
   } else if (jacobi_conv == -2) {
      fprintf(stderr, "Error : loop in jacobi method reached %d times.\n",
              itemax);
      exit(EXIT_FAILURE);
   }

   /* allocate memory for contribution rate of each eigenvalue */
   cont_rate = dgetmem(leng);

   /* calculate contribution rate of each eigenvalue */
   for (j = 0; j < leng; j++) {
      sum = 0.0;
      for (i = 0; i < leng; i++)
         sum += e_val[i];
      cont_rate[j] = e_val[j] / sum;
   }
/* end of PCA */

   /* output mean vector and eigen vectors */
   if (out_evecFlg == TRUE) {
      fwritef(mean, sizeof(*mean), leng, stdout);
      for (i = 0; i < n; i++)
         fwritef(e_vec[i], sizeof(*(e_vec[i])), leng, stdout);
   }

   /* output eigen values and contribution ratio */
   if (out_evalFlg == TRUE) {
      for (i = 0; i < n; i++) {
         fwritef(e_val + i, sizeof(*e_val), 1, fp_eigen);
         fwritef(cont_rate + i, sizeof(*cont_rate), 1, fp_eigen);
      }
      fclose(fp_eigen);
   }

   return EXIT_SUCCESS;
}
Ejemplo n.º 8
0
void mlsacheck(double *mcep, int m, int fftlen, int frame,
               double a, double r, int c)
{
   int i;
   double gain, *x, *y, *mag = NULL, max = 0.0;

   x = dgetmem(fftlen);
   y = dgetmem(fftlen);

   fillz(x, sizeof(*x), fftlen);
   fillz(y, sizeof(*y), fftlen);

   /* calculate gain factor */
   for (i = 0, gain = 0.0; i <= m; i++) {
      x[i] = mcep[i];
      gain += x[i] * pow(-a, i);
   }

   /* gain normalization */
   x[0] -= gain;

   /* check stability */
   if (c == 0 || c == 2 || c == 3) {    /* usual mode */
      mag = dgetmem(fftlen);
      fillz(mag, sizeof(*mag), fftlen);
      fftr(x, y, fftlen);
      for (i = 0; i < fftlen; i++) {
         mag[i] = sqrt(x[i] * x[i] + y[i] * y[i]);
         if (mag[i] > max)
            max = mag[i];
      }
   } else {                     /* fast mode */
      for (i = 0; i <= m; i++)
         max += x[i];
   }

   /* modification MLSA filter coefficients */
   if (max > r) {
      /* output ascii report */
      fprintf(stderr,
              "[No. %d] is unstable frame (maximum = %f, threshold = %f)\n",
              frame, max, r);

      /* modification */
      if (c == 2) {             /* clipping */
         for (i = 0; i < fftlen; i++) {
            if (mag[i] > r) {
               x[i] *= r / mag[i];
               y[i] *= r / mag[i];
            }
         }
      } else if (c == 3) {      /* scaling */
         for (i = 0; i < fftlen; i++) {
            x[i] *= r / max;
            y[i] *= r / max;
         }
      } else if (c == 4) {      /* fast mode */
         for (i = 0; i <= m; i++)
            x[i] *= r / max;
      }
   }

   /* output MLSA filter coefficients */
   if (c == 0 || c == 1 || max <= r) {  /* no modification */
      fwritef(mcep, sizeof(*mcep), m + 1, stdout);
   } else {
      if (c == 2 || c == 3)
         ifft(x, y, fftlen);
      x[0] += gain;
      fwritef(x, sizeof(*x), m + 1, stdout);
   }

   free(x);
   free(y);
   if (c == 0 || c == 2 || c == 3)
      free(mag);
}
Ejemplo n.º 9
0
void main(int argc, char **argv)
{
    int		l = LENG, cbsize = CBSIZE, index;
    Boolean	qflag = QFLAG;
    FILE	*fp = stdin, *fpcb = NULL;
    double	*x, *qx, *cb;

    if ((cmnd = strrchr(argv[0], '/')) == NULL)
	cmnd = argv[0];
    else
	cmnd++;
    while (--argc)
	if (**++argv == '-'){
	    switch (*(*argv+1)) {
		case 'l':
		    l = atoi(*++argv);
		    --argc;
		    break;
		case 'n':
		    l = atoi(*++argv)+1;
		    --argc;
		    break;
		case 's':
		    cbsize = atoi(*++argv);
		    --argc;
		    break;
		case 'q':
		    qflag = 1 - qflag;
		    break;
		case 'h':
		    usage(0);
		default:
		    fprintf(stderr, "%s : Invalid option '%c' !\n", cmnd, *(*argv+1));
		    usage(1);
		}
	}
	else if (fpcb == NULL)
	    fpcb = getfp(*argv, "r");
	else 
	    fp = getfp(*argv, "r");

    fseek(fpcb,0,2);
#ifdef DOUBLE
    cbsize = ftell(fpcb)/sizeof(double)/l;
#else
    cbsize = ftell(fpcb)/sizeof(float)/l;
#endif
    rewind(fpcb);

    x = dgetmem(l+l+cbsize*l);
    qx = x + l;
    cb = qx + l;
    
    if(freadf(cb, sizeof(*cb), cbsize*l, fpcb) != cbsize*l){
	fprintf(stderr,"%s : Codebook size error !\n",cmnd);
	exit(1);
    }

    if(! qflag)
	while (freadf(x, sizeof(*x), l, fp) == l){
	    index = vq(x, cb, l, cbsize);
	    fwrite(&index, sizeof(index), 1, stdout);
	}
    else
	while (freadf(x, sizeof(*x), l, fp) == l){
	    index = vq(x, cb, l, cbsize);
	    ivq(index, cb, l, qx);
	    fwritef(qx, sizeof(*qx), l, stdout);
	}
    
    exit(0);
}
Ejemplo n.º 10
0
Archivo: uels.c Proyecto: rhdunn/sptk
int main(int argc, char **argv)
{
   int m = ORDER, flng = FLENG, ilng = FLENG, itype = ITYPE,
       etype = ETYPE, itr1 = MINITR, itr2 = MAXITR;
   FILE *fp = stdin;
   double *c, *x, end = END, e = EPS;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 'l':
            flng = atoi(*++argv);
            --argc;
            break;
         case 'q':
            itype = atoi(*++argv);
            --argc;
            break;
         case 'i':
            itr1 = atoi(*++argv);
            --argc;
            break;
         case 'j':
            itr2 = atoi(*++argv);
            --argc;
            break;
         case 'd':
            end = atof(*++argv);
            --argc;
            break;
         case 'e':
            etype = 1;
            e = atof(*++argv);
            --argc;
            break;
         case 'E':
            etype = 2;
            e = atof(*++argv);
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   if (itype == 0)
      ilng = flng;
   else
      ilng = flng / 2 + 1;

   x = dgetmem(flng + m + 1);
   c = x + flng;

   while (freadf(x, sizeof(*x), ilng, fp) == ilng) {
      uels(x, flng, c, m, itr1, itr2, end, etype, e, itype);
      fwritef(c, sizeof(*c), m + 1, stdout);
   }

   return (0);
}
Ejemplo n.º 11
0
Archivo: dct.c Proyecto: rhdunn/sptk
int main(int argc, char *argv[])
{
   FILE *fp;
   char *s, *infile = NULL, c;

   FILE *getfp();
   Boolean dftmode = DFTMODE;
   Boolean compmode = COMPMODE;
   double *x, *y, *pReal2, *pImag2, *dgetmem();
   int size2;


   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;

   while (--argc) {
      if (*(s = *++argv) == '-') {
         c = *++s;
         if ((c == 'l') && (*++s == '\0')) {
            s = *++argv;
            --argc;
         }
         switch (c) {
         case 'l':
            size = atoi(s);
            break;
         case 'I':
            out = c;
            compmode = 1 - compmode;
            break;
         case 'd':
            dftmode = 1 - dftmode;
            break;
         case 'h':
         default:
            usage();
         }
      } else
         infile = s;
   }
   if (infile)
      fp = getfp(infile, "rb");
   else
      fp = stdin;

   x = dgetmem(size2 = size + size);
   pReal2 = dgetmem(size2 = size + size);
   y = x + size;
   pImag2 = pReal2 + size;

   while (!feof(fp)) {
      fillz(x, size2, sizeof(double));
      fillz(y, size, sizeof(double));
      if (freadf(x, sizeof(*x), size, fp) == 0)
         break;
      if (out == 'I') {
         if (freadf(y, sizeof(*y), size, fp) == 0)
            break;
      }

      dct(x, pReal2, size, size, dftmode, compmode);

      fwritef(pReal2, sizeof(*pReal2), size, stdout);
      if (out == 'I')
         fwritef(pImag2, sizeof(*pReal2), size, stdout);
   }

   if (infile)
      fclose(fp);

   return (0);
}
Ejemplo n.º 12
0
int main(int argc, char **argv)
{
   int m = ORDER, otype = OTYPE, n = SPNUM, p = MAXITR, i;
   FILE *fp = stdin;
   double *a, *lsp, end = END, sampling = SAMPLING;
   Boolean gain = GAIN, loggain = LOGGAIN;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 's':
            sampling = atof(*++argv);
            --argc;
            break;
         case 'o':
            otype = atoi(*++argv);
            --argc;
            break;
         case 'p':
            p = atoi(*++argv);
            --argc;
            break;
         case 'n':
            n = atoi(*++argv);
            --argc;
            break;
         case 'd':
            end = atof(*++argv);
            --argc;
            break;
         case 'k':
            gain = 1 - gain;
            break;
         case 'l':
            loggain = 1 - loggain;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   lsp = dgetmem(m + m + 1);
   a = lsp + m;

   while (freadf(a, sizeof(*a), m + 1, fp) == m + 1) {
      lpc2lsp(a, lsp, m, n, p, end);

      if (otype == 0)
         for (i = 0; i < m; i++)
            lsp[i] *= PI2;
      else if (otype == 2 || otype == 3)
         for (i = 0; i < m; i++)
            lsp[i] *= sampling;
      if (otype == 3)
         for (i = 0; i < m; i++)
            lsp[i] *= 1000;

      if (gain) {
         if (loggain)
            *a = log(*a);
         fwritef(a, sizeof(*a), 1, stdout);
      }
      fwritef(lsp, sizeof(*lsp), m, stdout);
   }

   return (0);
}
Ejemplo n.º 13
0
Archivo: train.c Proyecto: rhdunn/sptk
int main(int argc, char **argv)
{
   int l = LENG, normal = NORMAL;
   double zero, pulse, period = PERIOD, i;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'l':
            l = atoi(*++argv);
            --argc;
            break;
         case 'p':
            period = atof(*++argv);
            --argc;
            break;
         case 'n':
            normal = atoi(*++argv);
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      }

   switch (normal) {
   case 0:
      pulse = 1;
      break;
   case 1:
      pulse = sqrt(period);
      break;
   case 2:
      pulse = period;
      break;
   }
   zero = 0.0;
   i = 0.5;

   if (period >= 1.0)
      while (l--)
         if (--i >= 0.0)
            fwritef(&zero, sizeof(zero), 1, stdout);
         else {
            i += period;
            fwritef(&pulse, sizeof(pulse), 1, stdout);
   } else if (period != 0.0) {
      fprintf(stderr, "-p : frame period must be 0.0 or more than 1.0!\n");
      usage(1);
   } else
      while (l--) {
         pulse = mseq();
         fwritef(&pulse, sizeof(pulse), 1, stdout);
      }

   return (0);
}
Ejemplo n.º 14
0
Archivo: lsp2lpc.c Proyecto: EQ4/SPTK
int main(int argc, char **argv)
{
    int m = ORDER, itype = ITYPE, i, gain = GAIN;
    FILE *fp = stdin;
    double *a, *lsp, sampling = SAMPLING;
    Boolean loggain = LOGGAIN;

    if ((cmnd = strrchr(argv[0], '/')) == NULL)
        cmnd = argv[0];
    else
        cmnd++;
    while (--argc)
        if (**++argv == '-') {
            switch (*(*argv + 1)) {
            case 'm':
                m = atoi(*++argv);
                --argc;
                break;
            case 's':
                sampling = atof(*++argv);
                --argc;
                break;
            case 'k':
                gain = 0;
                break;
            case 'l':
            case 'L':
                loggain = TR;
                break;
            case 'i':
            case 'q':
                itype = atoi(*++argv);
                --argc;
                break;
            case 'h':
                usage(0);
            default:
                fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
                usage(1);
            }
        } else
            fp = getfp(*argv, "rb");

    lsp = dgetmem(m + m + 1 + gain);
    a = lsp + m + gain;

    while (freadf(lsp, sizeof(*lsp), m + gain, fp) == m + gain) {
        if (itype == 0)
            for (i = gain; i < m + gain; i++)
                lsp[i] /= PI2;
        else if (itype == 2 || itype == 3)
            for (i = gain; i < m + gain; i++)
                lsp[i] /= sampling;

        if (itype == 3)
            for (i = gain; i < m + gain; i++)
                lsp[i] /= 1000;

        lsp2lpc(lsp + gain, a, m);

        if (gain) {
            if (loggain)
                *lsp = exp(*lsp);
            fwritef(lsp, sizeof(*lsp), 1, stdout);
        }
        fwritef(a + gain, sizeof(*a), m + 1 - gain, stdout);
    }

    return (0);
}
Ejemplo n.º 15
0
int main(int argc, char **argv)
{
   int m = ORDER, pd = PADEORDER, fftlen = FFTLENGTH, stable_condition =
       STABLE1, frame = 0, c = 0;
   double *in, *out, max, a = ALPHA, r = PADE4_THRESH1, R = 0.0;
   FILE *fp = stdin;

   if ((cmnd = strrchr(argv[0], '/')) == NULL) {
      cmnd = argv[0];
   } else {
      cmnd++;
   }
   while (--argc) {
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 'a':
            a = atof(*++argv);
            --argc;
            break;
         case 'P':
            pd = atoi(*++argv);
            --argc;
            break;
         case 'l':
            fftlen = atoi(*++argv);
            --argc;
            break;
         case 'c':
            c = atoi(*++argv);
            if ((c != 0 && c != 1 && c != 2 && c != 3 && c != 4)
                || isdigit(**argv) == 0) {
               fprintf(stderr,
                       "%s : '-c' option must be specified with 0, 1, 2, 3 or 4.\n",
                       cmnd);
               usage(1);
            }
            --argc;
            break;
         case 'r':
            stable_condition = atoi(*++argv);
            if (stable_condition != STABLE1 && stable_condition != STABLE2) {
               fprintf(stderr,
                       "%s : '-r' option must be specified with %d or %d.\n",
                       cmnd, STABLE1, STABLE2);
               usage(1);
            }
            --argc;
            break;
         case 'R':
            R = atof(*++argv);
            if (isdigit(**argv) == 0) {
               fprintf(stderr,
                       "%s : '-R' option must be specified by real number !\n",
                       cmnd);
               usage(1);
            }
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else {
         fp = getfp(*argv, "rb");
      }
   }

   switch (pd) {
   case 4:
      if (stable_condition == STABLE1)
         r = PADE4_THRESH1;
      else
         r = PADE4_THRESH2;
      break;
   case 5:
      if (stable_condition == STABLE1)
         r = PADE5_THRESH1;
      else
         r = PADE5_THRESH2;
      break;
   default:
      fprintf(stderr, "%s : Order of Pade approximation should be 4 or 5!\n",
              cmnd);
      usage(1);
   }
   if (R != 0.0)
      r = R;

   in = dgetmem(m + 1);
   out = dgetmem(m + 1);

   /* check stability of MLSA filter and output */
   while (freadf(in, sizeof(*in), m + 1, fp) == m + 1) {
      max = mlsacheck(in, out, m, fftlen, a, r, c);

      /* output ascii report */
      if (max > r) {
         fprintf(stderr,
                 "[No. %d] is unstable frame (maximum = %f, threshold = %f)\n",
                 frame, max, r);
      }

      fwritef(out, sizeof(*out), m + 1, stdout);
      frame++;
   }

   return (0);
}
Ejemplo n.º 16
0
int main(int argc, char **argv)
{
   FILE *pdffp = stdin, *parfp = stdout;
   int nframe, delay;
   char *coef;
   int coeflen;
   PStream pst;
   int i, j;
   void InitPStream(PStream *);
   double *mlpg(PStream *);

   pst.order = ORDER;
   pst.range = RANGE;
   pst.iType = ITYPE;
   pst.dw.fn = (char **) calloc(sizeof(char *), argc);
   pst.dw.num = 1;
   pst.dw.calccoef = -1;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;

   while (--argc) {
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'd':
            if (pst.dw.calccoef == 1) {
               fprintf(stderr,
                       "%s : Options '-r' and '-d' should not be defined simultaneously!\n",
                       cmnd);
               return (1);
            }
            pst.dw.calccoef = 0;
            if (isfloat(*++argv)) {
               coeflen = 0;
               for (i = 0; (i < argc - 1) && isfloat(argv[i]); i++) {
                  coeflen += strlen(argv[i]) + 1;
               }
               coeflen += 1;
               coef = pst.dw.fn[pst.dw.num] = getmem(coeflen, sizeof(char));
               for (j = 0; j < i; j++) {
                  sprintf(coef, " %s", *argv);
                  coef += strlen(*argv) + 1;
                  if (j < i - 1) {
                     argv++;
                     argc--;
                  }
               }
            } else {
               pst.dw.fn[pst.dw.num] = *argv;
            }
            pst.dw.num++;
            --argc;
            break;
         case 'r':
            if (pst.dw.calccoef == 0) {
               fprintf(stderr,
                       "%s : Options '-r' and '-d' should not be defined simultaneously!\n",
                       cmnd);
               return (1);
            }
            pst.dw.calccoef = 1;
            coeflen = atoi(*++argv);
            --argc;
            if ((coeflen != 1) && (coeflen != 2)) {
               fprintf(stderr,
                       "%s : Number of delta parameter should be 1 or 2!\n",
                       cmnd);
               return (1);
            }
            if (argc <= 1) {
               fprintf(stderr,
                       "%s : Window size for delta parameter required!\n",
                       cmnd);
               return (1);
            }
            pst.dw.fn[pst.dw.num] = *++argv;
            pst.dw.num++;
            --argc;
            if (coeflen == 2) {
               if (argc <= 1) {
                  fprintf(stderr,
                          "%s : Window size for delta-delta parameter required!\n",
                          cmnd);
                  return (1);
               }
               pst.dw.fn[pst.dw.num] = *++argv;
               pst.dw.num++;
               --argc;
            }
            break;
         case 'm':
            pst.order = atoi(*++argv);
            --argc;
            break;
         case 'l':
            pst.order = atoi(*++argv) - 1;
            --argc;
            break;
         case 'i':
            pst.iType = atoi(*++argv);
            --argc;
            break;
         case 's':
            pst.range = atoi(*++argv);
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         pdffp = getfp(*argv, "rb");
   }

   InitPStream(&pst);

   delay = pst.range + pst.dw.maxw[WRIGHT];
   nframe = 0;
   while (freadf(pst.mean, sizeof(*(pst.mean)), pst.vSize * 2, pdffp) ==
          pst.vSize * 2) {
      if (pst.dw.num == 1)
         fwritef(pst.mean, sizeof(*pst.mean), pst.order + 1, parfp);
      else {
         if (pst.iType == 0)
            for (i = 0; i < pst.vSize; i++)
               pst.ivar[i] = finv(pst.ivar[i]);
         mlpg(&pst);
         if (nframe >= delay)
            fwritef(pst.par, sizeof(*(pst.par)), pst.order + 1, parfp);
      }
      nframe++;
   }

   if (pst.dw.num > 1) {
      for (i = 0; i < pst.vSize; i++) {
         pst.mean[i] = 0.0;
         pst.ivar[i] = 0.0;
      }
      for (i = 0; i < min(nframe, delay); i++) {
         mlpg(&pst);
         fwritef(pst.par, sizeof(*(pst.par)), pst.order + 1, parfp);
      }
   }

   return (0);
}
Ejemplo n.º 17
0
int main(int argc, char **argv)
{
   int m = ORDER, itype = ITYPE, otype = OTYPE, i, num;
   Boolean arrange = ARRANGE, gain = GAIN;
   FILE *fp = stdin;
   double *lsp, *lsp1, alpha = ALPHA, sampling = SAMPLING;


   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 's':
            sampling = atof(*++argv);
            --argc;
            break;
         case 'i':
            itype = atoi(*++argv);
            --argc;
            break;
         case 'o':
            otype = atoi(*++argv);
            --argc;
            break;
         case 'r':
            alpha = atof(*++argv);
            if (alpha <= 0 || alpha >= 1) {
               fprintf(stderr, "%s : Invalid option 'r'!\n", cmnd);
               usage(0);
            }
            --argc;
            arrange = 1 - arrange;
            break;
         case 'k':
            gain = 1 - gain;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else {
         fp = getfp(*argv, "rb");
      }
   if (otype < 0)
      otype = itype;

   lsp = dgetmem(m + m + gain);
   lsp1 = lsp + m + gain;


   num = 0;


   while (freadf(lsp, sizeof(*lsp), m + gain, fp) == m + gain) {
      if (itype == 0)
         for (i = gain; i < m + gain; i++)
            lsp1[i] = lsp[i] / PI2;
      else if (itype == 1)
         for (i = gain; i < m + gain; i++)
            lsp1[i] = lsp[i];
      else if (itype == 2 || itype == 3)
         for (i = gain; i < m + gain; i++)
            lsp1[i] = lsp[i] / sampling;

      if (itype == 3)
         for (i = gain; i < m + gain; i++)
            lsp1[i] = lsp[i] / 1000;

      if (lspcheck(lsp1 + gain, m) == -1) {
         if (!arrange) {
            fprintf(stderr, "[ unstable frame number : %d ]\n", num);
            for (i = 0; i < m + gain; i++)
               fprintf(stderr, "%f\n", lsp[i]);
            fprintf(stderr, "\n");
         }
      }
      if (arrange)
         lsparrange(lsp1 + gain, m, alpha, itype, sampling);

      if (otype == 0)
         for (i = gain; i < m + gain; i++)
            lsp1[i] *= PI2;
      else if (otype == 2 || otype == 3)
         for (i = gain; i < m + gain; i++)
            lsp1[i] *= sampling;

      if (otype == 3)
         for (i = gain; i < m + gain; i++)
            lsp1[i] *= 1000;

      if (gain == 1)
         lsp1[0] = lsp[0];

      fwritef(lsp1, sizeof(*lsp1), m + gain, stdout);
      num++;
   }
   putchar('\n');
   return (0);
}
Ejemplo n.º 18
0
int main(int argc, char *argv[])
{
   int i, o = OTYPE, L = FLENG;
   char *s, c;
   FILE *fp = stdin;
   double *buf, tmp;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;

   while (--argc) {
      if (*(s = *++argv) == '-') {
         c = *++s;
         if (*++s == '\0') {
            s = *++argv;
            --argc;
         }
         switch (c) {
         case 'l':
            L = atoi(s);
            break;
         case 'o':
            o = atoi(s);
            break;
         case 'h':
            usage();
         default:
            usage();
         }
      } else
         fp = getfp(*argv, "rb");
   }

   if (L % 2 != 0) {
      fprintf(stderr, "%s : value of L must be even number!\n", cmnd);
      usage();
   }

   L /= 2;
   buf = dgetmem(L);

   if ((o != 0) && (o != 1) && (o != 2)) {
      fprintf(stderr, "%s : invalid output type %d\n", cmnd, o);
      usage();
   }
   if (L <= 1) {
      fprintf(stderr, "%s : value of L must be L>=4!\n", cmnd);
      usage();
   }

   while (freadf(buf, sizeof(*buf), L, fp) == L) {

      if (o == 0) {
         if (L <= 2) {
            fprintf(stderr, "%s : value of L must be L>=6! (if o==0)\n", cmnd);
            usage();
         }
         for (i = 0; i < L; i++) {
            fwritef(&buf[i], sizeof(*buf), 1, stdout);
         }
         for (i = L - 2; i > 0; i--) {
            fwritef(&buf[i], sizeof(*buf), 1, stdout);
         }
      } else if (o == 1) {
         for (i = L - 1; i > 0; i--) {
            fwritef(&buf[i], sizeof(*buf), 1, stdout);
         }
         for (i = 0; i < L; i++) {
            fwritef(&buf[i], sizeof(*buf), 1, stdout);
         }
      } else if (o == 2) {
         tmp = buf[L - 1] / 2;
         fwritef(&tmp, sizeof(*buf), 1, stdout);
         for (i = L - 2; i > 0; i--) {
            fwritef(&buf[i], sizeof(*buf), 1, stdout);
         }
         for (i = 0; i < L - 1; i++) {
            fwritef(&buf[i], sizeof(*buf), 1, stdout);
         }
         fwritef(&tmp, sizeof(tmp), 1, stdout);
      }
   }

   free(buf);
   fclose(fp);
   return (0);
}
Ejemplo n.º 19
0
int main(int argc, char **argv)
{
   int l = LENG, ii, end;
   FILE *fp = stdin;
   double i = MIN, j = MAX, x1, y1, x2, y2, y, x, t;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'l':
            l = atoi(*++argv) - 1;
            --argc;
            break;
         case 'm':
            l = atoi(*++argv);
            --argc;
            break;
         case 'x':
            i = atof(*++argv);
            --argc;
            j = atof(*++argv);
            --argc;
            break;
         case 'i':
            i = atof(*++argv);
            --argc;
            break;
         case 'j':
            j = atof(*++argv);
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   t = (j - i) / (double) l;

   for (;;) {
      if (freadf(&x2, sizeof(x2), 1, fp) != 1)
         break;
      if (freadf(&y2, sizeof(y2), 1, fp) != 1)
         break;

      fwritef(&y2, sizeof(y2), 1, stdout);

      for (end = 0, ii = 1; end == 0;) {
         x1 = x2;
         y1 = y2;
         if (freadf(&x2, sizeof(x2), 1, fp) != 1)
            break;
         if (freadf(&y2, sizeof(y2), 1, fp) != 1)
            break;

         if (x2 == j)
            end = 1;
         for (;; ii++) {
            x = i + t * ii;
            if (x > x2)
               break;
            y = ((y1 - y2) * x + x1 * y2 - x2 * y1) / (x1 - x2);
            fwritef(&y, sizeof(y), 1, stdout);
         }
      }
   }

   return (0);
}
Ejemplo n.º 20
0
int main(int argc, char *argv[])
{
   FILE *fp = stdin, *fpc;
   char *coef = NULL;
   double *x = NULL, *dx = NULL, **dw_coef = NULL, *y = NULL;
   int i, j, l, d, t, tj, ispipe, fsize, leng = LENG, total = T;
   int dw_num = 1, **dw_width = NULL, dw_calccoef = -1, dw_coeflen = 1,
       dw_leng = 1;
   char **dw_fn = (char **) calloc(sizeof(char *), argc);
   int non_magic_num, win_size_forward[2], win_size_backward[2];
   float_list *top, *cur, *prev, *tmpf;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;

   while (--argc) {
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'd':
            if (dw_calccoef == 1 || dw_calccoef == 2) {
               fprintf(stderr,
                       "%s : Options '-r' and '-d' should not be defined simultaneously!\n",
                       cmnd);
               return (1);
            }
            dw_calccoef = 0;
            if (isfloat(*++argv)) {
               dw_coeflen = 0;
               for (i = 0; (i < argc - 1) && isfloat(argv[i]); i++) {
                  dw_coeflen += strlen(argv[i]) + 1;
               }
               dw_coeflen += 1;
               coef = dw_fn[dw_num] = getmem(dw_coeflen, sizeof(char));
               for (j = 0; j < i; j++) {
                  sprintf(coef, " %s", *argv);
                  coef += strlen(*argv) + 1;
                  if (j < i - 1) {
                     argv++;
                     argc--;
                  }
               }
            } else {
               dw_fn[dw_num] = *argv;
            }
            dw_num++;
            --argc;
            break;
         case 'r':
            if (dw_calccoef == 0 || dw_calccoef == 2) {
               fprintf(stderr,
                       "%s : Options '-r' and '-d' should not be defined simultaneously!\n",
                       cmnd);
               return (1);
            }
            dw_calccoef = 1;
            dw_coeflen = atoi(*++argv);
            --argc;
            if ((dw_coeflen != 1) && (dw_coeflen != 2)) {
               fprintf(stderr,
                       "%s : Number of delta parameter should be 1 or 2!\n",
                       cmnd);
               return (1);
            }
            if (argc <= 1) {
               fprintf(stderr,
                       "%s : Window size for delta parameter required!\n",
                       cmnd);
               return (1);
            }
            dw_fn[dw_num] = *++argv;
            dw_num++;
            --argc;
            if (dw_coeflen == 2) {
               if (argc <= 1) {
                  fprintf(stderr,
                          "%s : Window size for delta-delta parameter required!\n",
                          cmnd);
                  return (1);
               }
               dw_fn[dw_num] = *++argv;
               dw_num++;
               --argc;
            }
            break;
         case 'm':
            leng = atoi(*++argv) + 1;
            --argc;
            break;
         case 'l':
            leng = atoi(*++argv);
            --argc;
            break;
         case 'R':
            if (dw_calccoef == 0 || dw_calccoef == 1) {
               fprintf(stderr,
                       "%s : Options '-r', '-d' and '-R' should not be defined simultaneously!\n",
                       cmnd);
               return (1);
            }
            dw_calccoef = 2;
            dw_num = atoi(*++argv) + 1;
            --argc;
            if ((dw_num != 2) && (dw_num != 3)) {
               fprintf(stderr,
                       "%s : Number of delta parameter should be 1 or 2!\n",
                       cmnd);
               return (1);
            }
            if (argc <= 1) {
               fprintf(stderr,
                       "%s : Window size for delta-delta parameter required!\n",
                       cmnd);
               return (1);
            }

            sscanf(*++argv, "%d", &win_size_forward[0]);
            --argc;
            sscanf(*++argv, "%d", &win_size_backward[0]);
            --argc;
            if (dw_num > 2) {
               sscanf(*++argv, "%d", &win_size_forward[1]);
               --argc;
               sscanf(*++argv, "%d", &win_size_backward[1]);
               --argc;
            }
            break;
         case 'M':
            sscanf(*++argv, "%lf", &magic);
            MAGIC = TR;
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");
   }

   /* parse window files */
   /* memory allocation */
   if ((dw_width = (int **) calloc(dw_num, sizeof(int *))) == NULL) {
      fprintf(stderr, "%s : Cannot allocate memory!\n", cmnd);
      exit(1);
   }
   for (i = 0; i < dw_num; i++)
      if ((dw_width[i] = (int *) calloc(2, sizeof(int))) == NULL) {
         fprintf(stderr, "%s : Cannot allocate memory!\n", cmnd);
         exit(1);
      }
   if ((dw_coef = (double **) calloc(dw_num, sizeof(double *))) == NULL) {
      fprintf(stderr, "%s : Cannot allocate memory!\n", cmnd);
      exit(1);
   }

   /* window for static parameter */
   dw_width[0][0] = dw_width[0][1] = 0;
   dw_coef[0] = dgetmem(1);
   dw_coef[0][0] = 1;

   /* set delta coefficients */
   if (dw_calccoef == 0) {
      for (i = 1; i < dw_num; i++) {
         if (dw_fn[i][0] == ' ') {
            fsize = str2darray(dw_fn[i], &(dw_coef[i]));
         } else {
            /* read from file */
            fpc = getfp(dw_fn[i], "rb");

            /* check the number of coefficients */
            fseek(fpc, 0L, 2);
            fsize = ftell(fpc) / sizeof(real);
            fseek(fpc, 0L, 0);

            /* read coefficients */
            dw_coef[i] = dgetmem(fsize);
            freadf(dw_coef[i], sizeof(**(dw_coef)), fsize, fpc);
         }

         /* set pointer */
         dw_leng = fsize / 2;
         dw_coef[i] += dw_leng;
         dw_width[i][0] = -dw_leng;
         dw_width[i][1] = dw_leng;
         if (fsize % 2 == 0)
            dw_width[i][1]--;
      }
   } else if (dw_calccoef == 1) {
      int a0, a1, a2;
      for (i = 1; i < dw_num; i++) {
         dw_leng = atoi(dw_fn[i]);
         if (dw_leng < 1) {
            fprintf(stderr,
                    "%s : Width for regression coefficient shuould be more than 1!\n",
                    cmnd);
            exit(1);
         }
         dw_width[i][0] = -dw_leng;
         dw_width[i][1] = dw_leng;
         dw_coef[i] = dgetmem(dw_leng * 2 + 1);
         dw_coef[i] += dw_leng;
      }

      dw_leng = atoi(dw_fn[1]);
      for (a1 = 0, j = -dw_leng; j <= dw_leng; a1 += j * j, j++);
      for (j = -dw_leng; j <= dw_leng; j++)
         dw_coef[1][j] = (double) j / (double) a1;

      if (dw_num > 2) {
         dw_leng = atoi(dw_fn[2]);
         for (a0 = a1 = a2 = 0, j = -dw_leng; j <= dw_leng;
              a0++, a1 += j * j, a2 += j * j * j * j, j++);
         for (j = -dw_leng; j <= dw_leng; j++)
            dw_coef[2][j] =
                2 * ((double) (a0 * j * j - a1)) /
                ((double) (a2 * a0 - a1 * a1));
      }
   }

   /* -- Count number of input vectors and read -- */
   x = dgetmem(leng);
   top = prev = (float_list *) malloc(sizeof(float_list));
   top->f = (float *) malloc(sizeof(float) * leng);
   total = 0;
   prev->next = NULL;
   while (freadf(x, sizeof(*x), leng, fp) == leng) {
      cur = (float_list *) malloc(sizeof(float_list));
      cur->f = (float *) malloc(sizeof(float) * leng);
      for (i = 0; i < leng; i++) {
         cur->f[i] = (float) x[i];
      }
      total++;
      prev->next = cur;
      cur->next = NULL;
      prev = cur;
   }
   free(x);
   x = dgetmem(leng * total);
   dx = dgetmem(dw_num * leng * total);
   fillz(dx, sizeof(*x), dw_num * leng * total);
   for (i = 0, tmpf = top->next; tmpf != NULL; i++, tmpf = tmpf->next) {
      for (j = 0; j < leng; j++) {
         x[i * leng + j] = tmpf->f[j];
      }
   }

   if (dw_calccoef == 0 || dw_calccoef == 1) {
      /* calculate delta and delta-delta */
      for (t = 0; t < total; t++) {
         for (d = 0; d < dw_num; d++) {
            for (j = dw_width[d][0]; j <= dw_width[d][1]; j++) {
               tj = t + j;
               if (tj < 0)
                  tj = 0;
               if (!(tj < total))
                  tj = total - 1;
               for (l = 0; l < leng; l++)
                  dx[dw_num * leng * t + leng * d + l] +=
                      dw_coef[d][j] * x[leng * tj + l];
            }
         }
      }

      /* output static, delta, delta-delta */
      fwritef(dx, sizeof(*dx), dw_num * total * leng, stdout);

   } else if (dw_calccoef == 2) {
      int *position = (int *) malloc(sizeof(int) * total);

      /* skip magic number */
      if (MAGIC == TR) {
         for (t = 0, non_magic_num = 0; t < total; t++) {
            for (l = 0; l < leng; l++) {
               if (x[leng * t + l] == magic) {
                  break;
               }
            }
            if (l == leng) {
               /* remember position of non-magic number */
               position[non_magic_num] = t;
               non_magic_num++;
            }
         }
      } else {
         for (t = 0; t < total; t++) {
            position[t] = t;
         }
         non_magic_num = total;
      }

      /* calculate delta and delta-delta */
      GetCoefficient(x, dx, dw_num, position, total, non_magic_num, leng,
                     win_size_forward, win_size_backward);

      /* output static, delta, delta-delta */
      fwritef(dx, sizeof(*dx), dw_num * total * leng, stdout);
   }

   return (0);
}
Ejemplo n.º 21
0
Archivo: mgclsp2sp.c Proyecto: EQ4/SPTK
int main(int argc, char **argv)
{
   int leng = LENG, m = ORDER, itype = ITYPE, otype = OTYPE, gain = GAIN;
   double alpha = ALPHA, gamma = GAMMA;
   FILE *fp = stdin;
   double logk, sampling = SAMPLING;
   double *x, *lsp;
   int i, no, loggain = 1;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'a':
         case 'g':
         case 'c':
            if (isdigit(**(argv + 1)) == 0) {   /* Check the value is correct */
               if (**(argv + 1) != '+' && **(argv + 1) != '-') {
                  fprintf(stderr, "%s : need numerical number !\n", cmnd);
                  usage(1);
               } else if (isdigit(*(*(argv + 1) + 1)) == 0) {
                  fprintf(stderr, "%s : need numerical number !\n", cmnd);
                  usage(1);
               }
            }

            if ((*(*argv + 1)) == 'a') {
               alpha = atof(*++argv);
            } else if ((*(*argv + 1)) == 'g') {
               gamma = atof(*++argv);
               if (gamma == 0.0) {
                  fprintf(stderr, "%s : value of g must not be zero!\n", cmnd);
               }
            } else {
               gamma = atof(*++argv);
               if (gamma < 1)
                  fprintf(stderr, "%s : value of c must be c>=1!\n", cmnd);
               gamma = -1.0 / gamma;
            }

            --argc;
            break;

         case 'm':
         case 's':
         case 'l':
         case 'i':
         case 'q':
         case 'o':
            if (isdigit(**(argv + 1)) == 0) {
               if ((**(argv + 1)) != '+') {
                  fprintf(stderr,
                          "%s : %s option need positive value !\n", cmnd,
                          *argv);
                  usage(1);
               } else if (isdigit(*(*(argv + 1) + 1)) == 0) {
                  fprintf(stderr,
                          "%s : %s option need positive value !\n", cmnd,
                          *argv);
                  usage(1);
               }
            }

            if ((*(*argv + 1)) == 'm')
               m = atoi(*++argv);
            else if ((*(*argv + 1)) == 's')
               sampling = atof(*++argv);
            else if ((*(*argv + 1)) == 'l')
               leng = atoi(*++argv);
            else if ((*(*argv + 1)) == 'i' || (*(*argv + 1)) == 'q')
               itype = atoi(*++argv);
            else if ((*(*argv + 1)) == 'o')
               otype = atoi(*++argv);
            --argc;
            break;
         case 'L':
            loggain = 0;
            break;
         case 'k':
            gain = 0;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   lsp = dgetmem(m + gain);
   no = leng / 2 + 1;
   x = dgetmem(no);
   logk = 20.0 / log(10.0);

   while (freadf(lsp, sizeof(*lsp), m + gain, fp) == m + gain) {

      if (itype == 1)
         for (i = gain; i < m + gain; i++)
            lsp[i] *= PI2;
      else if (itype == 2 || itype == 3) {
         for (i = gain; i < m + gain; i++)
            lsp[i] = lsp[i] / sampling * PI2;
      }

      if (loggain == 0)
         *lsp = log(*lsp);

      mgclsp2sp(alpha, gamma, lsp, m, x, no, gain);

      switch (otype) {
      case 1:
         break;
      case 2:
         for (i = no; i--;)
            x[i] = exp(x[i]);
         break;
      case 3:
         for (i = no; i--;)
            x[i] = exp(2 * x[i]);
         break;
      default:
         for (i = no; i--;)
            x[i] *= logk;
         break;
      }
      fwritef(x, sizeof(*x), no, stdout);
   }

   free(lsp);
   free(x);

   return (0);
}
Ejemplo n.º 22
0
Archivo: lspdf.c Proyecto: celsius/sptk
int main(int argc, char **argv)
{
   int m = ORDER, fprd = FPERIOD, iprd = IPERIOD, i, j, flag_odd;
   FILE *fp = stdin, *fpc = NULL;
   double *c, *inc, *cc, *d, x;
   Boolean ngain = NGAIN, loggain = LOGGAIN;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 'p':
            fprd = atoi(*++argv);
            --argc;
            break;
         case 'i':
            iprd = atoi(*++argv);
            --argc;
            break;
            /*  case 't':
               tp = 1 - tp;
               break; */
         case 'k':
            ngain = 1 - ngain;
            break;
         case 'l':
         case 'L':
            loggain = 1 - loggain;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else if (fpc == NULL)
         fpc = getfp(*argv, "rb");
      else
         fp = getfp(*argv, "rb");

   if (fpc == NULL) {
      fprintf(stderr, "%s : Cannot open LSP file!\n", cmnd);
      return (1);
   }

   if (m % 2 == 0)
      flag_odd = 0;
   else
      flag_odd = 1;

   c = dgetmem(5 * m + 4);
   cc = c + m + 1;
   inc = cc + m + 1;
   d = inc + m + 1;

   if (freadf(c, sizeof(*c), m + 1, fpc) != m + 1)
      return (1);

   for (;;) {
      if (freadf(cc, sizeof(*cc), m + 1, fpc) != m + 1)
         return (0);
      if (!ngain && loggain)
         c[0] = exp(c[0]);

      for (i = 0; i <= m; i++)
         inc[i] = (cc[i] - c[i]) * iprd / fprd;

      for (j = fprd, i = (iprd + 1) / 2; j--;) {
         if (freadf(&x, sizeof(x), 1, fp) != 1)
            return (0);

         if (!ngain)
            x *= c[0];

         if (flag_odd)
            x = lspdf_odd(x, c, m, d);
         else
            x = lspdf_even(x, c, m, d);

         fwritef(&x, sizeof(x), 1, stdout);

         if (!--i) {
            for (i = 0; i <= m; i++)
               c[i] += inc[i];
            i = iprd;
         }
      }
      movem(cc, c, sizeof(*cc), m + 1);
   }

   return (0);
}
Ejemplo n.º 23
0
int main(int argc, char *argv[])
{
    char *s, *infile = NULL, c;
    int i, j, k, n, iter, size2;
    double *x, *y, *pReal, *pImag;
    FILE *fp;
    Boolean comp = COMPLEX;

    if ((cmnd = strrchr(argv[0], '/')) == NULL) {
        cmnd = argv[0];
    } else {
        cmnd++;
    }

    while (--argc) {
        if (*(s = *++argv) == '-') {
            c = *++s;
            if ((c == 'l') && (*++s == '\0')) {
                s = *++argv;
                --argc;
            }
            switch (c) {
            case 'l':             /* IDCT size */
                size = atoi(s);
                break;
            case 'c':             /* use complex number */
                comp = 1 - COMPLEX;
                break;
            case 'd':             /* IDCT without FFT (DFT) */
                dftmode = 1 - dftmode;
                break;
            case 'h':
            default:
                usage();
            }
        } else {
            infile = s;
        }
    }
    if (infile) {
        fp = getfp(infile, "rb");
    } else {
        fp = stdin;
    }

    /* memory allocation */
    x = dgetmem(size2 = size + size);
    y = x + size;
    pReal = dgetmem(size2);
    pImag = pReal + size;

    while (!feof(fp)) {
        fillz(x, size2, sizeof(*x));
        if (freadf(x, sizeof(*x), size, fp) == 0) {
            break;
        }
        if (comp) {
            if (freadf(y, sizeof(*y), size, fp) == 0) {
                break;
            }
        }

        /* decide wheather 'size' is a power of 2 or not */
        for (iter = 0, i = size; (i /= 2) != 0; iter++);
        for (i = 1, j = 1; i <= iter; i++, j *= 2);

        /* IDCT-II (DCT-III) routine */
        idct_create_table(size);
        idct(pReal, pImag, (const double *) x, (const double *) y, j);

        /* output IDCT sequence */
        fwritef(pReal, sizeof(*pReal), size, stdout);
        if (comp) {
            fwritef(pImag, sizeof(*pImag), size, stdout);
        }
    }

    if (infile) {
        fclose(fp);
    }

    return (0);
}
Ejemplo n.º 24
0
int main(int argc, char **argv)
{
   int fprd = FPERIOD, iprd = IPERIOD, i, j, seed = SEED;
   long next = SEED;
   FILE *fp = stdin;
   double x, p1, p2, inc, pc;
   Boolean gauss = GAUSS;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'p':
            fprd = atoi(*++argv);
            --argc;
            break;
         case 'i':
            iprd = atoi(*++argv);
            --argc;
            break;
         case 'n':
            gauss = TR;
            break;
         case 's':
            seed = atoi(*++argv);
            --argc;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   if (gauss & (seed != 1))
      next = srnd((unsigned int) seed);

   if (freadf(&p1, sizeof(p1), 1, fp) != 1)
      return (1);

   pc = p1;

   for (;;) {
      if (freadf(&p2, sizeof(p2), 1, fp) != 1)
         return (0);

      if ((p1 != 0.0) && (p2 != 0.0))
         inc = (p2 - p1) * (double) iprd / (double) fprd;
      else {
         inc = 0.0;
         pc = p2;
         p1 = 0.0;
      }

      for (j = fprd, i = (iprd + 1) / 2; j--;) {
         if (p1 == 0.0) {
            if (gauss)
               x = (double) nrandom(&next);
            else
               x = mseq();
         } else {
            if ((pc += 1.0) >= p1) {
               x = sqrt(p1);
               pc = pc - p1;
            } else
               x = 0.0;
         }

         fwritef(&x, sizeof(x), 1, stdout);

         if (!--i) {
            p1 += inc;
            i = iprd;
         }
      }
      p1 = p2;
   }

   return 0;
}
Ejemplo n.º 25
0
int main(int argc, char **argv){
  int i;
  for(i=0;i<argc;i++)
    fwritef("argv[%d]=%s\n",i,argv[i]);
  return 0;
}
Ejemplo n.º 26
0
Archivo: mgc2sp.c Proyecto: rhdunn/sptk
int main(int argc, char **argv)
{
   int m = ORDER, l = LENG, otype = OTYPE, no, i;
   double alpha = ALPHA, gamma = GAMMA, *c, *x, *y, logk;
   Boolean norm = NORM, phase = PHASE, mulg = MULG;
   FILE *fp = stdin;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'm':
            m = atoi(*++argv);
            --argc;
            break;
         case 'a':
            alpha = atof(*++argv);
            --argc;
            break;
         case 'g':
            gamma = atof(*++argv);
            --argc;
            break;
         case 'c':
            gamma = atoi(*++argv);
            --argc;
            if (gamma < 1)
               fprintf(stderr, "%s : value of c must be c>=1!\n", cmnd);
            gamma = -1.0 / gamma;
            break;
         case 'n':
            norm = 1 - norm;
            break;
         case 'u':
            mulg = 1 - mulg;
            break;
         case 'l':
            l = atoi(*++argv);
            --argc;
            break;
         case 'o':
            otype = atoi(*++argv);
            --argc;
            break;
         case 'p':
            phase = 1 - phase;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   x = dgetmem(l + l + m + 1);
   y = x + l;
   c = y + l;

   no = l / 2 + 1;
   logk = 20.0 / log(10.0);

   while (freadf(c, sizeof(*c), m + 1, fp) == m + 1) {
      if (norm)
         ignorm(c, c, m, gamma);
      else if (mulg) {
         if (gamma == 0) {
            fprintf(stderr,
                    "%s : gamma for input mgc coefficients should not equal to 0 if you specify -u option!\n",
                    cmnd);
            usage(1);
         }
         c[0] = (c[0] - 1.0) / gamma;
      }

      if (mulg) {
         if (gamma == 0) {
            fprintf(stderr,
                    "%s : gamma for input mgc coefficients should not equal to 0 if you specify -u option!\n",
                    cmnd);
            usage(1);
         }
         for (i = m; i > 0; i--)
            c[i] /= gamma;
      }

      mgc2sp(c, m, alpha, gamma, x, y, l);

      if (phase)
         switch (otype) {
         case 1:
            for (i = no; i--;)
               x[i] = y[i];
            break;
         case 2:
            for (i = no; i--;)
               x[i] = y[i] * 180 / PI;
            break;
         default:
            for (i = no; i--;)
               x[i] = y[i] / PI;
            break;
      } else
         switch (otype) {
         case 1:
            break;
         case 2:
            for (i = no; i--;)
               x[i] = exp(x[i]);
            break;
         case 3:
            for (i = no; i--;)
               x[i] = exp(2 * x[i]);
            break;
         default:
            for (i = no; i--;)
               x[i] *= logk;
            break;
         }

      fwritef(x, sizeof(*x), no, stdout);
   }

   return (0);
}
Ejemplo n.º 27
0
Archivo: fft.c Proyecto: rhdunn/sptk
int main(int argc, char *argv[])
{
   FILE *fp;
   char *s, *infile = NULL, c;
   int size = SIZE, size2, k, nd = -1, out = ' ';
   double *x, *y;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;

   while (--argc) {
      if (*(s = *++argv) == '-') {
         c = *++s;
         switch (c) {
         case 'l':
            size = atoi(*++argv);
            argc--;
            break;
         case 'm':
            nd = atoi(*++argv) + 1;
            argc--;
            break;
         case 'i':
         case 'p':
         case 'r':
            c -= ('a' - 'A');
         case 'A':
         case 'I':
         case 'P':
         case 'R':
            out = c;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, c);
            usage(1);
         }
      } else
         infile = s;
   }

   if (nd == -1)
      nd = size;
   if (nd > size) {
      fprintf(stderr,
              "%s : Order of sequence %d should be less than the FFT size %d!\n",
              cmnd, nd, size);
      return (1);
   }

   fp = stdin;

   if (infile) {
      fp = getfp(infile, "rb");
   }

   x = dgetmem(size2 = size + size);
   y = x + size;

   while (!feof(fp)) {
      fillz(x, size2, sizeof(double));
      if (freadf(x, sizeof(*x), nd, fp) == 0)
         break;
      if (freadf(y, sizeof(*y), nd, fp) == 0)
         break;
      fft(x, y, size);
      if (out == 'P')
         for (k = 0; k < size; k++)
            x[k] = x[k] * x[k] + y[k] * y[k];
      else if (out == 'A')
         for (k = 0; k < size; k++)
            x[k] = sqrt(x[k] * x[k] + y[k] * y[k]);
      if (out != 'I')
         fwritef(x, sizeof(*x), size, stdout);
      if (out == ' ' || out == 'I')
         fwritef(y, sizeof(*y), size, stdout);
   }

   if (infile) {
      fclose(fp);
   }

   return (0);
}
Ejemplo n.º 28
0
int sopr(FILE * fp)
{
   double x, y;
   int k, i;
   Boolean skipflg = FA;

   while (freadf(&x, sizeof(x), 1, fp) == 1) {
      for (k = 0; k < MEMSIZE; ++k)
         mem[k] = 0;
      for (k = 0; k < nopr; ++k) {
         y = optbl[k].d;
         if (optbl[k].magic) {  /* -magic or -MAGIC */
            if (optbl[k].ifrep) {       /* -MAGIC */
               if (x == optbl[mopr].d) {        /* still remains magic number */
                  x = y;        /* substitute by new magic number */
                  skipflg = FA;
               }
            } else if (x == y) {        /* -magic */
               skipflg = TR;
            }
         } else if (skipflg == FA) {
            switch (optbl[k].op[0]) {
            case 'r':
               x = mem[(int) y];
               break;
            case 'w':
               mem[(int) y] = x;
               break;
            case '+':
               x += mem[(int) y];
               break;
            case '-':
               x -= mem[(int) y];
               break;
            case '*':
               x *= mem[(int) y];
               break;
            case '/':
               x /= mem[(int) y];
               break;
            case 'a':
               x += y;
               break;
            case 's':
               x -= y;
               break;
            case 'm':
               x *= y;
               break;
            case 'd':
               x /= y;
               break;
            case 'f':
               x = (x < y) ? y : x;
               break;
            case 'c':
               x = (x > y) ? y : x;
               break;
            case 'A':
               if (optbl[k].op[1] == 'T')
                  x = atan(x);
               else if (x < 0)
                  x = -x;
               break;
            case 'C':
               if (optbl[k].op[1] == 'L') {
                  if (x < 0)
                     x = 0;
               } else
                  x = cos(x);
               break;
            case 'I':
               x = 1 / x;
               break;
            case 'P':
               if (optbl[k].op[1] == 'O' && optbl[k].op[3] == '1')
                  x = pow(10.0, x);
               else if (optbl[k].op[1] == 'O' && optbl[k].op[3] == '2')
                  x = pow(2.0, x);
               else
                  x *= x;
               break;
            case 'R':
               x = sqrt(x);
               break;
            case 'S':
               if (optbl[k].op[1] == 'Q')
                  x = sqrt(x);
               else
                  x = sin(x);
               break;
            case 'E':
               x = exp(x);
               break;
            case 'L':
               if (optbl[k].op[3] == '1')
                  x = log10(x);
               else if (optbl[k].op[3] == '2')
                  x = LOG2(x);
               else
                  x = log(x);
               break;
            case 'F':
               if (x < 0)
                  i = x - 0.5;
               else
                  i = x + 0.5;
               x = i;
               break;
            case 'T':
               x = tan(x);
               break;
            case 'U':
               if (x < 0)
                  x = 0;
               else
                  x = 1;
            case 'M':

            default:
               break;
            }
         }
      }
      if (skipflg == FA)
         fwritef(&x, sizeof(x), 1, stdout);
      skipflg = FA;
   }
   return (0);
}
Ejemplo n.º 29
0
int main(int argc, char **argv)
{
   int l = LENG, *cbsize, *index, stage = 0, ss = 0, num, i;
   FILE *fp = stdin, *fpcb;
   double *x, *cb = NULL, *p;
   char **cbfile;

   cbsize = (int *) calloc(argc / 2, sizeof(*cbsize));
   index = (int *) calloc(argc / 2, sizeof(*index));
   cbfile = (char **) calloc(argc / 2, sizeof(**cbfile));

   p = cb;
   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;

   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 'l':
            l = atoi(*++argv);
            --argc;
            break;
         case 'n':
            l = atoi(*++argv) + 1;
            --argc;
            break;
         case 's':
            cbsize[stage] = atoi(*++argv);
            cbfile[stage++] = *++argv;
            argc -= 2;
            break;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   for (i = 0, num = 0; i < stage; i++)
      num += cbsize[i];
   cb = dgetmem(num * l);
   p = cb;

   for (i = 0; i < stage; i++) {
      fpcb = getfp(cbfile[i], "rb");
      if (freadf(p, sizeof(*p), cbsize[i] * l, fpcb) != cbsize[i] * l) {
         fprintf(stderr, "%s : Codebook size error of %d stage!\n", cmnd, ss);
         return (1);
      }
      p += cbsize[i] * l;
   }

   x = dgetmem(l);

   while (freadx(index, sizeof(*index), stage, fp) == stage) {
      imsvq(index, cb, l, cbsize, stage, x);
      fwritef(x, sizeof(*x), l, stdout);
   }

   return (0);
}
Ejemplo n.º 30
0
int main(int argc, char **argv)
{
   int freq = FREQ, n = ILNG, l, L = LOW, H = HIGH, m, itr1 = MINITR, itr2 =
       MAXITR, low, high;
   double *x, eps = EPS, p, thresh = THRESH, end = END;
   FILE *fp = stdin;

   if ((cmnd = strrchr(argv[0], '/')) == NULL)
      cmnd = argv[0];
   else
      cmnd++;
   while (--argc)
      if (**++argv == '-') {
         switch (*(*argv + 1)) {
         case 's':
            freq = atoi(*++argv);
            --argc;
            break;
         case 'l':
            n = atoi(*++argv);
            --argc;
            break;
         case 't':
            thresh = atof(*++argv);
            --argc;
            break;
         case 'L':
            L = atoi(*++argv);
            --argc;
            break;
         case 'H':
            H = atoi(*++argv);
            --argc;
            break;
         case 'e':
            eps = atof(*++argv);
            --argc;
            break;
         case 'i':
            itr1 = atoi(*++argv);
            --argc;
         case 'j':
            itr2 = atoi(*++argv);
            --argc;
         case 'd':
            end = atof(*++argv);
            --argc;
         case 'h':
            usage(0);
         default:
            fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1));
            usage(1);
         }
      } else
         fp = getfp(*argv, "rb");

   low = freq * 1000 / H;
   high = freq * 1000 / L;
   m = (freq * 25) / 10;
   l = 1;
   while (l < n)
      l += l;

   x = dgetmem(l);

   while (freadf(x, sizeof(*x), n, fp) == n) {
      fillz(x + n, l - n, sizeof(double));
      p = pitch(x, l, thresh, low, high, eps, m, itr1, itr2, end);
      fwritef(&p, sizeof(p), 1, stdout);
   }

   return (0);
}