void find_aks( float Sn[], /* Nsam samples with order sample memory */ float a[], /* order+1 LPCs with first coeff 1.0 */ int Nsam, /* number of input speech samples */ int order, /* order of the LPC analysis */ float *E /* residual energy */ ) { float Wn[LPC_MAX_N]; /* windowed frame of Nsam speech samples */ float R[LPC_MAX+1]; /* order+1 autocorrelation values of Sn[] */ int i; assert(order < LPC_MAX); assert(Nsam < LPC_MAX_N); hanning_window(Sn,Wn,Nsam); autocorrelate(Wn,R,Nsam,order); levinson_durbin(R,a,order); *E = 0.0; for(i=0; i<=order; i++) *E += a[i]*R[i]; if (*E < 0.0) *E = 1E-12; }
void find_aks_for_lsp( float Sn[], /* Nsam samples with order sample memory */ float a[], /* order+1 LPCs with first coeff 1.0 */ int Nsam, /* number of input speech samples */ int order, /* order of the LPC analysis */ float *E /* residual energy */ ) { float Wn[N]; /* windowed frame of Nsam speech samples */ float R[P+1]; /* order+1 autocorrelation values of Sn[] */ int i; hanning_window(Sn,Wn,Nsam); autocorrelate(Wn,R,Nsam,order); R[0] += LPC_FLOOR; assert(order == 10); /* lag window only defined for order == 10 */ for(i=0; i<=order; i++) R[i] *= lag_window[i]; levinson_durbin(R,a,order); *E = 0.0; for(i=0; i<=order; i++) *E += a[i]*R[i]; if (*E < 0.0) *E = 1E-12; }
void find_aks( scalar Sn[], /* Nsam samples with order sample memory */ scalar a[], /* order+1 LPCs with first coeff 1.0 */ int Nsam, /* number of input speech samples */ int order, /* order of the LPC analysis */ scalar *E /* residual energy */ ) { scalar Wn[LPC_MAX_N]; /* windowed frame of Nsam speech samples */ scalar R[order+1]; /* order+1 autocorrelation values of Sn[] */ int i; assert(Nsam < LPC_MAX_N); hanning_window(Sn,Wn,Nsam); autocorrelate(Wn,R,Nsam,order); levinson_durbin(R,a,order); *E = fl_to_numb(0.0); for(i=0; i<=order; i++) *E = s_add(*E , s_mul(a[i],R[i])); if (*E < fl_to_numb(0.0)) { #ifdef MATH_Q16_16 *E = 1; #else *E = powf(2, -16);//fl_to_numb(1E-12); For debuging purposes. #endif } }