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

📄 lpcfunca.c

📁 语音编码G.729 语音编码G.729
💻 C
字号:
/*   ITU-T G.729 Annex C - Reference C code for floating point                         implementation of G.729 Annex A                         Version 1.01 of 15.September.98*//*----------------------------------------------------------------------                    COPYRIGHT NOTICE----------------------------------------------------------------------   ITU-T G.729 Annex C ANSI C source code   Copyright (C) 1998, AT&T, France Telecom, NTT, University of   Sherbrooke.  All rights reserved.----------------------------------------------------------------------*//* File : LPCFUNCA.C Used for the floating point version of G.729A only (not for G.729 main body)*//*-------------------------------------------------------------* *  Procedure lsp_az:                                          * *            ~~~~~~                                           * *   Compute the LPC coefficients from lsp (order=10)          * *-------------------------------------------------------------*/#include <math.h>#include "typedef.h"#include "ld8a.h"#include "tab_ld8a.h"/*----------------------------------------------------------------------------- * lsp_az - convert LSPs to predictor coefficients a[] *----------------------------------------------------------------------------- */void lsp_az( FLOAT *lsp,            /* input : lsp[0:M-1] */ FLOAT *a               /* output: predictor coeffs a[0:M], a[0] = 1. */){  FLOAT f1[M], f2[M];  int i,j;  get_lsp_pol(&lsp[0],f1);  get_lsp_pol(&lsp[1],f2);  for (i = NC; i > 0; i--)  {    f1[i] += f1[i-1];    f2[i] -= f2[i-1];  }  a[0] = (F)1.0;  for (i = 1, j = M; i <= NC; i++, j--)  {    a[i] = (F)0.5*(f1[i] + f2[i]);    a[j] = (F)0.5*(f1[i] - f2[i]);  }}/*---------------------------------------------------------------------------- * get_lsp_pol - find the polynomial F1(z) or F2(z) from the LSFs *---------------------------------------------------------------------------- */void get_lsp_pol(   FLOAT lsp[],           /* input : line spectral freq. (cosine domain)  */   FLOAT f[]              /* output: the coefficients of F1 or F2 */){  FLOAT b;  int   i,j;  f[0] = (F)1.0;  b = (F)-2.0*lsp[0];  f[1] = b;  for (i = 2; i <= NC; i++)  {    b = (F)-2.0*lsp[2*i-2];    f[i] = b*f[i-1] + (F)2.0*f[i-2];    for (j = i-1; j > 1; j--)      f[j] += b*f[j-1] + f[j-2];    f[1] += b;  }}/*--------------------------------------------------------------------------- * weight_az:  Weighting of LPC coefficients  ap[i]  =  a[i] * (gamma ** i) *--------------------------------------------------------------------------- */void weight_az( FLOAT *a,              /* input : lpc coefficients a[0:m]       */ FLOAT gamma,           /* input : weighting factor              */ int m,                 /* input : filter order                  */ FLOAT *ap              /* output: weighted coefficients ap[0:m] */){  FLOAT fac;  int i;  ap[0]=a[0];  fac=gamma;  for (i = 1; i < m; i++)  {    ap[i] = fac*a[i];    fac *= gamma;  }  ap[m] = fac*a[m];}/*----------------------------------------------------------------------------- * int_qlpc -  interpolated M LSP parameters and convert to M+1 LPC coeffs *----------------------------------------------------------------------------- */void int_qlpc( FLOAT lsp_old[],       /* input : LSPs for past frame (0:M-1) */ FLOAT lsp_new[],       /* input : LSPs for present frame (0:M-1) */ FLOAT az[]             /* output: filter parameters in 2 subfr (dim 2(m+1)) */){  int i;  FLOAT lsp[M];  for (i = 0; i < M; i++)    lsp[i] = lsp_old[i]*(F)0.5 + lsp_new[i]*(F)0.5;  lsp_az(lsp, az);  lsp_az(lsp_new, &az[M+1]);}/* inline versions of the following funcs are in lpcfinl.c */#ifndef INLINE_FUNCS/*---------------------------------------------------------------------------- * lsf_lsp - convert from lsf[0..M-1 to lsp[0..M-1] *---------------------------------------------------------------------------- */void lsf_lsp(    const FLOAT lsf[],          /* input :  lsf */    FLOAT lsp[],          /* output: lsp */    int m){    int i;    for ( i = 0; i < m; i++ )        lsp[i] = (FLOAT)cos(lsf[i]);}/*---------------------------------------------------------------------------- * lsp_lsf - convert from lsp[0..M-1 to lsf[0..M-1] *---------------------------------------------------------------------------- */void lsp_lsf(    const FLOAT lsp[],          /* input :  lsp coefficients */    FLOAT lsf[],          /* output:  lsf (normalized frequencies */    int m){    int i;        for ( i = 0; i < m; i++ )        lsf[i] = (FLOAT)acos(lsp[i]);}#endif /* INLINE_FUNCS */

⌨️ 快捷键说明

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