Ejemplo n.º 1
0
Archivo: _mgc2sp.c Proyecto: EQ4/SPTK
void mgc2sp(double *mgc, const int m, const double a, const double g, double *x,
            double *y, const int flng)
{
   static double *c = NULL;
   static int size;

   if (c == NULL) {
      c = dgetmem(flng / 2 + 1);
      size = flng;
   }
   if (flng > size) {
      free(c);
      c = dgetmem(flng / 2 + 1);
      size = flng;
   }

   mgc2mgc(mgc, m, a, g, c, flng / 2, 0.0, 0.0);
   c2sp(c, flng / 2, x, y, flng);

   return;
}
Ejemplo n.º 2
0
Archivo: c2sp.c Proyecto: rhdunn/sptk
int main(int argc, char **argv)
{
   int leng = LENG, m = ORDER, start = 0, end = 0, otype = OTYPE, i, no;
   FILE *fp = stdin;
   char phase = PHASE;
   double logk, *x, *y, *c;

   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':
            leng = atoi(*++argv);
            --argc;
            break;
         case 'p':
            phase = 1 - phase;
            break;
         case 'o':
            otype = atoi(*++argv);
            --argc;
            break;
         case 's':
            start = atoi(*++argv);
            --argc;
            break;
         case 'e':
            end = 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 (end == 0)
      end = m;

   x = dgetmem(leng * 2);
   y = x + leng;
   c = dgetmem(m + 1);

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

   while (freadf(c, sizeof(*c), m + 1, fp) == m + 1) {
      fillz(c, sizeof(*c), start);
      for (i = end + 1; i <= m; i++)
         c[i] = 0.0;

      c2sp(c, m, x, y, leng);

      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;
         default:
            for (i = no; i--;)
               x[i] *= logk;
            break;
         }

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

   return (0);
}