⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter.c

📁 语音LPC压缩算法源代码(C语音)
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include "filter.h"/*     --------------------------------  FILTER_CREATE  --------------------------------*/FILTER *filter_create(num, nl, den, dl)float *num, *den;			/*  num[0:nl-1]			den[0:dl-1]             */int nl, dl;				/*  nl: numerator length	dl: denominator length  */{   int i;   FILTER *fp;   fp = (FILTER *) malloc(sizeof(FILTER));   fp->nl = nl;   fp->num = (float *) malloc((unsigned) fp->nl * sizeof(float));   for (i=0; i<fp->nl; i++) fp->num[i] = num[i];   fp->dl = dl;   fp->den = (float *) malloc((unsigned) fp->dl * sizeof(float));   for (i=0; i<fp->dl; i++) fp->den[i] = den[i];   /*   normalize the denominator, if needed   */   if (fp->den[0] != 1.0)   {      for (i=1; i<fp->dl; i++) fp->den[i] = fp->den[i] / fp->den[0];      for (i=0; i<fp->nl; i++) fp->num[i] = fp->num[i] / fp->den[0];      fp->den[0] = 1.0;   }   /*   determine needed buffer length and create the buffer   */   if (fp->nl > fp->dl) fp->bufl = fp->nl - 1;   else                 fp->bufl = fp->dl - 1;   fp->buf = (float *) malloc((unsigned) fp->bufl * sizeof(float));   fp->buf -= 1;		/*   buf[1:bufl]   */   for (i=1; i<=fp->bufl; i++) fp->buf[i] = 0.0;   return fp;}/*     --------------------------------  FILTER  --------------------------------*/float filter(fp, in)FILTER *fp;float in;{   int i;   float out;   for (i=1; i<fp->dl; i++) in -= fp->den[i] * fp->buf[i];	/* denominator */   out = fp->num[0] * in;   for (i=1; i<fp->nl; i++) out += fp->num[i] * fp->buf[i];	/* numerator */   for (i=fp->bufl; i>1; i--) fp->buf[i] = fp->buf[i-1];	/* shift buffer */   fp->buf[1] = in;   return out;}/*     --------------------------------  FILTER_STATE_READ  --------------------------------*/float *filter_state_read(fp, n)FILTER *fp;int *n;{   *n = fp->bufl;   return fp->buf + 1;}/*     --------------------------------  FILTER_STATE_SET  --------------------------------*/int filter_state_set(fp, n, x)FILTER *fp;int n;float x[];{   int i;   if (n != fp->bufl) return -1;   for (i=1; i<=fp->bufl; i++) fp->buf[i] = x[i-1];   return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -