www.pudn.com > CryptoPhone-src-031122.zip > bwexp.c


/* Copyright 2001,2002,2003 NAH6 
 * All Rights Reserved 
 * 
 * Parts Copyright DoD, Parts Copyright Starium 
 * 
 */ 
          /*LINTLIBRARY*/ 
          /*PROTOLIB1*/ 
#include  
#include "main.h" 
#include "bwexp.h" 
 
/************************************************************************** 
* 
* ROUTINE 
*		BWExpand 
* 
* FUNCTION 
*		Bandwidth expansion of LPC predictor coefficients 
* 
* SYNOPSIS 
*		BWExpand(alpha, pc, pcexp)      
* 
*   formal  
*                       data    I/O 
*       name            type    type    function 
*       ------------------------------------------------------------------- 
*	alpha		float	i	Bandwidth expansion factor 
*	pc		float	i	predictor coefficients 
*	pcexp		float	o	expanded predictor coefficients 
*************************************************************************** 
*	 
* DESCRIPTION 
* 
*  	Subroutine to perform bandwidth modification by moving the poles 
*	(or zeros) radially in the z plane.  If the bandwidth expansion 
*	factor (alpha) is less than unity, the bandwidths are expanded by 
*	shifting the poles (or zeros) toward the origin of the z plane. 
*	The predictor coefficients are scaled directly according to: 
* 
*		              i-1 
*		a' = a  alpha		where i = 1, . . . , order+1 
*		 i    i 
* 
*	Resulting in a bandwidth expansion of: 
* 
*		-(fs/pi)ln(alpha) Hz 
* 
*	(e.g., fs = 8 kHz, alpha = 0.994127 -> 15 Hz bandwidth expansion) 
* 
*	CELP's LPC predictor coefficient convention is: 
*              p+1         -(i-1) 
*       A(z) = SUM   a   z          where a  = +1.0 
*              i=1    i                    1 
* 
*************************************************************************** 
* 
* CALLED BY 
* 
*	FindAdaptResidual FindImpulseResponse PostFilter 
*	FindLPCResidual UpdateEverything LPC_Analysis 
* 
**************************************************************************/ 
void BWExpand( 
float 	alpha,  
float	pc[ORDER+1],  
float	pcexp[ORDER+1]) 
{ 
  int i; 
 
  pcexp[0] = pc[0]; 
 
  for (i = 1; i <= ORDER; i++) 
    pcexp[i] = pc[i]*(float)pow((double)(alpha),(double)(i)); 
}