From: Natsumi K. <koi...@us...> - 2017-08-03 09:03:03
|
Update of /cvsroot/sp-tk/SPTK/src/bin/rlevdur In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv12513 Added Files: Makefile.am _rlevdur.c rlevdur.c .cvsignore Log Message: add rlevdur command --- NEW FILE: .cvsignore --- Makefile rlevdur Makefile.in .deps --- NEW FILE: rlevdur.c --- /* ----------------------------------------------------------------- */ /* The Speech Signal Processing Toolkit (SPTK) */ /* developed by SPTK Working Group */ /* http://sp-tk.sourceforge.net/ */ /* ----------------------------------------------------------------- */ /* */ /* Copyright (c) 1984-2007 Tokyo Institute of Technology */ /* Interdisciplinary Graduate School of */ /* Science and Engineering */ /* */ /* 1996-2017 Nagoya Institute of Technology */ /* Department of Computer Science */ /* */ /* All rights reserved. */ /* */ /* Redistribution and use in source and binary forms, with or */ /* without modification, are permitted provided that the following */ /* conditions are met: */ /* */ /* - Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* - Redistributions in binary form must reproduce the above */ /* copyright notice, this list of conditions and the following */ /* disclaimer in the documentation and/or other materials provided */ /* with the distribution. */ /* - Neither the name of the SPTK working group nor the names of its */ /* contributors may be used to endorse or promote products derived */ /* from this software without specific prior written permission. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ /* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ /* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS */ /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */ /* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */ /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, */ /* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY */ /* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ /* POSSIBILITY OF SUCH DAMAGE. */ /* ----------------------------------------------------------------- */ /************************************************************************ * * * Solve an Autocorrelation Normal Equation * * Using Reverse Levinson-Durbin Method * * * * 2017.6 T.Yoshimura * * * * usage: * * rlevdur [ options ] [ infile ] > stdout * * options: * * -m m : order of correlation [25] * * infile: * * LP Coefficeints * * , K, a(1), ..., a(m), * * stdout: * * autocorrelation * * , r(0), r(1), ..., r(m), * * require: * * rlevdur() * * * ************************************************************************/ static char *rcs_id = "$Id: rlevdur.c,v 1.1 2017/08/03 09:03:00 koikenatsumi Exp $"; /* Standard C Libraries */ #include <stdio.h> #include <stdlib.h> #ifdef HAVE_STRING_H #include <string.h> #else #include <strings.h> #ifndef HAVE_STRRCHR #define strrchr rindex #endif #endif #if defined(WIN32) #include "SPTK.h" #else #include <SPTK.h> #endif /* Default Values */ #define ORDER 25 #define MINDET 0.0 /* Command Name */ char *cmnd; void usage(int status) { fprintf(stderr, "\n"); fprintf(stderr, " %s - solve an autocorrelation normal equation\n", cmnd); fprintf(stderr, " using reverse Levinson-Durbin method\n"); fprintf(stderr, "\n"); fprintf(stderr, " usage:\n"); fprintf(stderr, " %s [ options ] [ infile ] > stdout\n", cmnd); fprintf(stderr, " options:\n"); fprintf(stderr, " -m m : order of correlation [%d]\n", ORDER); fprintf(stderr, " -h : print this message\n"); fprintf(stderr, " infile:\n"); fprintf(stderr, " LP coefficients (%s) [stdin]\n", FORMAT); fprintf(stderr, " stdout:\n"); fprintf(stderr, " autocorrelation (%s)\n", FORMAT); #ifdef PACKAGE_VERSION fprintf(stderr, "\n"); fprintf(stderr, " SPTK: version %s\n", PACKAGE_VERSION); fprintf(stderr, " CVS Info: %s", rcs_id); #endif fprintf(stderr, "\n"); exit(status); } int main(int argc, char **argv) { int m = ORDER; FILE *fp = stdin; double *a, *r, f = MINDET; 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"); a = dgetmem(m + m + 2); r = a + m + 1; while (freadf(a, sizeof(*a), m + 1, fp) == m + 1) { rlevdur(a, r, m, f); fwritef(r, sizeof(*r), m + 1, stdout); } return (0); } --- NEW FILE: _rlevdur.c --- /* ----------------------------------------------------------------- */ /* The Speech Signal Processing Toolkit (SPTK) */ /* developed by SPTK Working Group */ /* http://sp-tk.sourceforge.net/ */ /* ----------------------------------------------------------------- */ /* */ /* Copyright (c) 1984-2007 Tokyo Institute of Technology */ /* Interdisciplinary Graduate School of */ /* Science and Engineering */ /* */ /* 1996-2017 Nagoya Institute of Technology */ /* Department of Computer Science */ /* */ /* All rights reserved. */ /* */ /* Redistribution and use in source and binary forms, with or */ /* without modification, are permitted provided that the following */ /* conditions are met: */ /* */ /* - Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* - Redistributions in binary form must reproduce the above */ /* copyright notice, this list of conditions and the following */ /* disclaimer in the documentation and/or other materials provided */ /* with the distribution. */ /* - Neither the name of the SPTK working group nor the names of its */ /* contributors may be used to endorse or promote products derived */ /* from this software without specific prior written permission. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ /* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ /* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS */ /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */ /* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */ /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, */ /* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY */ /* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ /* POSSIBILITY OF SUCH DAMAGE. */ /* ----------------------------------------------------------------- */ /**************************************************************** $Id: _rlevdur.c,v 1.1 2017/08/03 09:03:00 koikenatsumi Exp $ Solve an Autocorrelation Normal Equation Using Reverse Levinson-Durbin Method int rlevdur(a, r, m, eps); double *a : LP coefficients double *r : autocorrelation sequence int m : order of LPC double eps : singular check return value : 0 -> normally completed -1 -> abnormally completed ******************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #if defined(WIN32) #include "SPTK.h" #else #include <SPTK.h> #endif int rlevdur(double *a, double *r, const int m, double eps) { int i, j; double rmd, sum; static double **u = NULL, *e = NULL; static int size; if (u == NULL && e == NULL) { u = ddgetmem(m + 1, m + 1); e = dgetmem(m + 1); size = m; } if (m > size) { free(u); free(e); u = ddgetmem(m + 1, m + 1); e = dgetmem(m + 1); size = m; } for (j = 0; j <= m; j++) { u[j][j] = 1.0; } for (j = 0; j < m; j++) { u[m][j] = a[m - j]; } e[m] = a[0] * a[0]; for (i = m - 1; i > 0; i--) { rmd = (1.0 - u[i + 1][0] * u[i + 1][0]); if ((rmd < 0.0) ? -rmd : rmd <= eps) return (-1); for (j = 0; j < i; j++) { u[i][i - j - 1] = (u[i + 1][i - j] - u[i + 1][0] * u[i + 1][j + 1]) / rmd; } e[i] = e[i + 1] / rmd; } e[0] = e[1] / (1.0 - u[1][0] * u[1][0]); r[0] = e[0]; for (i = 1; i <= m; i++) { sum = 0.0; for (j = 1; j < i; j++) { sum -= u[i - 1][i - j - 1] * r[i - j]; } r[i] = sum - u[i][0] * e[i - 1]; } return (0); } --- NEW FILE: Makefile.am --- AM_CPPFLAGS = -I @top_srcdir@/include bin_PROGRAMS = rlevdur rlevdur_SOURCES = rlevdur.c _rlevdur.c rlevdur_LDADD = @top_builddir@/lib/libSPTK.a |