#include "nrutil.h" #include /* ================Bilinear transformed cepstrum coefficients ======= */ /* Input : l - number of cepstrum coefficients c - cepstrum vector, c[1],c[2],...,c[l] m - Order of bilinear transform a - Mel-warping constant -1 ---------- --> d0(i) 1 - a z^-1 ----------------------------------------- */ prev=cep[n]; for (i=n-1; i>0; --i) { if (i != (n-1)) prev = d0[i+1]; d0[i] = cep[i] + a*prev; if (fabs(d0[i]) < small) d0[i]=0.0; } cc[0] = cep[0] + a*d0[1]; /* -- 0th mel-warped cepstrum coef */ /* -------------- 1st stage ------------ */ /* z^-1 d0(i)--> ---------- ---> d1(i) 1 - a z^-1 ---------------------------------------- */ prev=cep[n]; prev1=0.0; for (i=n-1; i>0; --i) { if (i!=(n-1)) prev1 = d1[i+1]; d1[i] = prev + a*prev1; if (fabs(d1[i]) ---------- ---> out(i) 1 - a z^-1 ----------------------------------------------------------- */ for (k = 2; k <= mCoefs; k++) { inp1=0.0; out1=0.0; for (i=n-1; i>0; i--) { if (i!= (n-1)) { out1=out[i+1]; inp1=inp[i+1]; } out[i] = inp1 + a*(out1-inp[i]); if (fabs(out[i]) < small) out[i]=0.0; } cc[k] = inp[1] + a * (out[1]-cc[k-1]); /* kth mel-warped cepstrum */ /* -- Feed the output as an input to the next stage -- */ /**/ for (i=1;i