cb_filt.c
来自「speech signal process tools」· C语言 代码 · 共 2,583 行 · 第 1/5 页
C
2,583 行
/* * This material contains unpublished, proprietary software of * Entropic Research Laboratory, Inc. Any reproduction, distribution, * or publication of this work must be authorized in writing by Entropic * Research Laboratory, Inc., and must bear the notice: * * "Copyright (c) 1990-1993 Entropic Research Laboratory, Inc. * All rights reserved" * * The copyright notice above does not evidence any actual or intended * publication of this source code. * * Written by: Steiglitz, Parks, Kaiser * Checked by: * Revised by: Derek Lin for ESPS compatiblity * * Brief description: constraint-based FIR design program * */static char *sccs_id = "@(#)cb_filt.c 1.9 12/20/93 ERL";#include <stdio.h>/* I added */#include <esps/esps.h>#include <esps/fea.h>#include <esps/feafilt.h>/* Output from p2c, the Pascal-to-C translator *//* From input file "meteorJ.p" *//* to simplify portability, the files p2c.h and p2clib.c are included here explicitly, replacing #include <p2c/p2c.h> *//* the following is p2c.h, copied here for convenience */#ifndef P2C_H#define P2C_H/* Header file for code generated by "p2c", the Pascal-to-C translator *//* "p2c" Copyright (C) 1989 Dave Gillespie, version 1.16. * This file may be copied, modified, etc. in any way. It is not restricted * by the licence agreement accompanying p2c itself. *//* If the following heuristic fails, compile -DBSD=0 for non-BSD systems, or -DBSD=1 for BSD systems. */#ifdef M_XENIX# define BSD 0#endif#ifdef FILE /* a #define in BSD, a typedef in SYSV (hp-ux, at least) */# ifndef BSD /* (a convenient, but horrible kludge!) */# define BSD 1# endif#endif#ifdef BSD# if !defined(BSD)# undef BSD# endif#endif#ifdef __STDC__# include <stddef.h># include <stdlib.h># define HAS_STDLIB# define __CAT__(a,b)a##b#else# ifndef BSD# include <memory.h># endif# include <sys/types.h># define __ID__(a)a# define __CAT__(a,b)__ID__(a)b#endif#ifdef BSD# include <strings.h># define memcpy(a,b,n) (bcopy(b,a,n),a)# define memcmp(a,b,n) bcmp(a,b,n)# define strchr(s,c) index(s,c)# define strrchr(s,c) rindex(s,c)#else# include <string.h>#endif#include <ctype.h>#include <math.h>#include <setjmp.h>#include <assert.h>typedef struct __p2c_jmp_buf { struct __p2c_jmp_buf *next; jmp_buf jbuf;} __p2c_jmp_buf;/* Warning: The following will not work if setjmp is used simultaneously. This also violates the ANSI restriction about using vars after longjmp, but a typical implementation of longjmp will get it right anyway. */#ifndef FAKE_TRY# define TRY(x) do { __p2c_jmp_buf __try_jb; \ __try_jb.next = __top_jb; \ if (!setjmp((__top_jb = &__try_jb)->jbuf)) {# define RECOVER(x) __top_jb = __try_jb.next; } else {# define RECOVER2(x,L) __top_jb = __try_jb.next; } else { \ if (0) { L: __top_jb = __try_jb.next; }# define ENDTRY(x) } } while (0) #else# define TRY(x) if (1) {# define RECOVER(x) } else do {# define RECOVER2(x,L) } else do { L: ;# define ENDTRY(x) } while (0)#endif#ifdef M_XENIX /* avoid compiler bug */# define SHORT_MAX (32767)# define SHORT_MIN (-32768)#endif/* The following definitions work only on twos-complement machines */#ifndef SHORT_MAX# define SHORT_MAX (((unsigned short) -1) >> 1)# define SHORT_MIN (~SHORT_MAX)#endif#ifndef INT_MAX# define INT_MAX (((unsigned int) -1) >> 1)# define INT_MIN (~INT_MAX)#endif#ifndef LONG_MAX# define LONG_MAX (((unsigned long) -1) >> 1)# define LONG_MIN (~LONG_MAX)#endif#ifndef SEEK_SET# define SEEK_SET 0# define SEEK_CUR 1# define SEEK_END 2#endif#ifndef EXIT_SUCCESS# define EXIT_SUCCESS 0# define EXIT_FAILURE 1#endif#define SETBITS 32#ifdef __STDC__# define Signed signed# define Void void /* Void f() = procedure */# ifndef Const# define Const const# endif# ifndef Volatile# define Volatile volatile# endif# define PP(x) x /* function prototype */# define PV() (void) /* null function prototype */typedef void *Anyptr;#else# define Signed# define Void void# ifndef Const# define Const# endif# ifndef Volatile# define Volatile# endif# define PP(x) ()# define PV() ()typedef char *Anyptr;#endif#ifdef __GNUC__# define Inline inline#else# define Inline#endif#define Register register /* Register variables */#define Char char /* Characters (not bytes) */#ifndef Static# define Static static /* Private global funcs and vars */#endif#ifndef Local# define Local static /* Nested functions */#endiftypedef Signed char schar;typedef unsigned char Uchar;typedef unsigned char boolean;#ifndef true# define true 1# define false 0#endiftypedef struct { Anyptr proc, link;} _PROCEDURE;#ifndef _FNSIZE# define _FNSIZE 120#endifextern Void PASCAL_MAIN PP( (int, Char **) );extern Char **P_argv;extern int P_argc;extern short P_escapecode;extern int P_ioresult;extern __p2c_jmp_buf *__top_jb;#ifdef P2C_H_PROTO /* if you have Ansi C but non-prototyped header files */extern Char *strcat PP( (Char *, Const Char *) );extern Char *strchr PP( (Const Char *, int) );extern int strcmp PP( (Const Char *, Const Char *) );extern Char *strcpy PP( (Char *, Const Char *) );extern size_t strlen PP( (Const Char *) );extern Char *strncat PP( (Char *, Const Char *, size_t) );extern int strncmp PP( (Const Char *, Const Char *, size_t) );extern Char *strncpy PP( (Char *, Const Char *, size_t) );extern Char *strrchr PP( (Const Char *, int) );extern Anyptr memchr PP( (Const Anyptr, int, size_t) );extern Anyptr memmove PP( (Anyptr, Const Anyptr, size_t) );extern Anyptr memset PP( (Anyptr, int, size_t) );#ifndef memcpyextern Anyptr memcpy PP( (Anyptr, Const Anyptr, size_t) );extern int memcmp PP( (Const Anyptr, Const Anyptr, size_t) );#endifextern int atoi PP( (Const Char *) );extern double atof PP( (Const Char *) );extern long atol PP( (Const Char *) );extern double strtod PP( (Const Char *, Char **) );extern long strtol PP( (Const Char *, Char **, int) );#endif /*P2C_H_PROTO*/#if !defined(HAS_STDLIB) && !defined(DEC_ALPHA)extern Anyptr malloc PP( (size_t) );extern Void free PP( (Anyptr) );#endifextern int _OutMem PV();extern int _CaseCheck PV();extern int _NilCheck PV();extern int _Escape PP( (int) );extern int _EscIO PP( (int) );extern long ipow PP( (long, long) );extern Char *strsub PP( (Char *, Char *, int, int) );extern Char *strltrim PP( (Char *) );extern Char *strrtrim PP( (Char *) );extern Char *strrpt PP( (Char *, Char *, int) );extern Char *strpad PP( (Char *, Char *, int, int) );extern int strpos2 PP( (Char *, Char *, int) );extern long memavail PV();extern int P_peek PP( (FILE *) );extern int P_eof PP( (FILE *) );extern int P_eoln PP( (FILE *) );extern Void P_readpaoc PP( (FILE *, Char *, int) );extern Void P_readlnpaoc PP( (FILE *, Char *, int) );extern long P_maxpos PP( (FILE *) );extern Char *P_trimname PP( (Char *, int) );extern long *P_setunion PP( (long *, long *, long *) );extern long *P_setint PP( (long *, long *, long *) );extern long *P_setdiff PP( (long *, long *, long *) );extern long *P_setxor PP( (long *, long *, long *) );extern int P_inset PP( (unsigned, long *) );extern int P_setequal PP( (long *, long *) );extern int P_subset PP( (long *, long *) );extern long *P_addset PP( (long *, unsigned) );extern long *P_addsetr PP( (long *, unsigned, unsigned) );extern long *P_remset PP( (long *, unsigned) );extern long *P_setcpy PP( (long *, long *) );extern long *P_expset PP( (long *, long) );extern long P_packset PP( (long *) );extern int P_getcmdline PP( (int l, int h, Char *line) );extern Void TimeStamp PP( (int *Day, int *Month, int *Year, int *Hour, int *Min, int *Sec) );extern Void P_sun_argv PP( (char *, int, int) );/* I/O error handling */#define _CHKIO(cond,ior,val,def) ((cond) ? P_ioresult=0,(val) \ : P_ioresult=(ior),(def))#define _SETIO(cond,ior) (P_ioresult = (cond) ? 0 : (ior))/* Following defines are suitable for the HP Pascal operating system */#define FileNotFound 10#define FileNotOpen 13#define FileWriteError 38#define BadInputFormat 14#define EndOfFile 30/* Creating temporary files */#if (defined(BSD) || defined(NO_TMPFILE)) && !defined(HAVE_TMPFILE)# define tmpfile() (fopen(tmpnam(NULL), "w+"))#endif/* File buffers */#define FILEBUF(f,sc,type) sc int __CAT__(f,_BFLAGS); \ sc type __CAT__(f,_BUFFER)#define RESETBUF(f,type) (__CAT__(f,_BFLAGS) = 1)#define SETUPBUF(f,type) (__CAT__(f,_BFLAGS) = 0)#define GETFBUF(f,type) (*((__CAT__(f,_BFLAGS) == 1 && \ ((__CAT__(f,_BFLAGS) = 2), \ fread(&__CAT__(f,_BUFFER), \ sizeof(type),1,(f)))),\ &__CAT__(f,_BUFFER)))#define AGETFBUF(f,type) ((__CAT__(f,_BFLAGS) == 1 && \ ((__CAT__(f,_BFLAGS) = 2), \ fread(&__CAT__(f,_BUFFER), \ sizeof(type),1,(f)))),\ __CAT__(f,_BUFFER))#define PUTFBUF(f,type,v) (GETFBUF(f,type) = (v))#define CPUTFBUF(f,v) (PUTFBUF(f,char,v))#define APUTFBUF(f,type,v) (memcpy(GETFBUF(f,type), (v), \ sizeof(__CAT__(f,_BUFFER))))#define GET(f,type) (__CAT__(f,_BFLAGS) == 1 ? \ fread(&__CAT__(f,_BUFFER),sizeof(type),1,(f)) : \ (__CAT__(f,_BFLAGS) = 1))#define PUT(f,type) (fwrite(&__CAT__(f,_BUFFER),sizeof(type),1,(f)), \ (__CAT__(f,_BFLAGS) = 0))#define CPUT(f) (PUT(f,char))#define BUFEOF(f) (__CAT__(f,_BFLAGS) != 2 && P_eof(f))#define BUFFPOS(f) (ftell(f) - (__CAT__(f,_BFLAGS) == 2))/* Memory allocation */#ifdef __GCC__# define Malloc(n) (malloc(n) ?: (Anyptr)_OutMem())#elseextern Anyptr __MallocTemp__;# define Malloc(n) ((__MallocTemp__ = malloc(n)) ? __MallocTemp__ : (Anyptr)_OutMem())#endif#define FreeR(p) (free((Anyptr)(p))) /* used if arg is an rvalue */#define Free(p) (free((Anyptr)(p)), (p)=NULL)/* sign extension */#define SEXT(x,n) ((x) | -(((x) & (1L<<((n)-1))) << 1))/* packed arrays */ /* BEWARE: these are untested! */#define P_getbits_UB(a,i,n,L) ((int)((a)[(i)>>(L)-(n)] >> \ (((~(i))&((1<<(L)-(n))-1)) << (n)) & \ (1<<(1<<(n)))-1))#define P_getbits_SB(a,i,n,L) ((int)((a)[(i)>>(L)-(n)] << \ (16 - ((((~(i))&((1<<(L)-(n))-1))+1) <<\ (n)) >> (16-(1<<(n))))))#define P_putbits_UB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |= \ (x) << (((~(i))&((1<<(L)-(n))-1)) << (n)))#define P_putbits_SB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |= \ ((x) & (1<<(1<<(n)))-1) << \ (((~(i))&((1<<(L)-(n))-1)) << (n)))#define P_clrbits_B(a,i,n,L) ((a)[(i)>>(L)-(n)] &= \ ~( ((1<<(1<<(n)))-1) << \ (((~(i))&((1<<(L)-(n))-1)) << (n))) )/* small packed arrays */#define P_getbits_US(v,i,n) ((int)((v) >> ((i)<<(n)) & (1<<(1<<(n)))-1))#define P_getbits_SS(v,i,n) ((int)((long)(v) << (SETBITS - (((i)+1) << (n))) >> (SETBITS-(1<<(n)))))#define P_putbits_US(v,i,x,n) ((v) |= (x) << ((i) << (n)))#define P_putbits_SS(v,i,x,n) ((v) |= ((x) & (1<<(1<<(n)))-1) << ((i)<<(n)))#define P_clrbits_S(v,i,n) ((v) &= ~( ((1<<(1<<(n)))-1) << ((i)<<(n)) ))#define P_max(a,b) ((a) > (b) ? (a) : (b))#define P_min(a,b) ((a) < (b) ? (a) : (b))/* Fix toupper/tolower on Suns and other stupid BSD systems */#ifdef toupper# undef toupper# undef tolower# define toupper(c) my_toupper(c)# define tolower(c) my_tolower(c)#endif#ifndef _toupper# if 'A' == 65 && 'a' == 97# define _toupper(c) ((c)-'a'+'A')# define _tolower(c) ((c)-'A'+'a')# else# define _toupper(c) toupper(c)# define _tolower(c) tolower(c)# endif#endif#endif /* P2C_H *//* End. *//* end of p2c.h *//* the following is p2clib.c *//* Run-time library for use with "p2c", the Pascal to C translator *//* "p2c" Copyright (C) 1989 Dave Gillespie. * This file may be copied, modified, etc. in any way. It is not restricted * by the licence agreement accompanying p2c itself. *//* #define LACK_LABS */ /* Define these if necessary *//* #define LACK_MEMMOVE */#ifndef NO_TIME# include <time.h>#endif#define Isspace(c) isspace(c) /* or "((c) == ' ')" if preferred */int P_argc;char **P_argv;short P_escapecode;int P_ioresult;long EXCP_LINE; /* Used by Pascal workstation system */Anyptr __MallocTemp__;__p2c_jmp_buf *__top_jb;void PASCAL_MAIN(argc, argv)int argc;char **argv;{ P_argc = argc; P_argv = argv; __top_jb = NULL;#ifdef LOCAL_INIT LOCAL_INIT();#endif}/* In case your system lacks these... */#ifdef LACK_LABSlong labs(x)long x;{ return((x > 0) ? x : -x);}#endif#ifdef LACK_MEMMOVEAnyptr memmove(d, s, n)Anyptr d, s;register long n;{ if (d < s || d - s >= n) { memcpy(d, s, n); return d; } else if (n > 0) { register char *dd = d + n, *ss = s + n; while (--n >= 0) *--dd = *--ss; } return d;}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?