#include #include #include #include #include "dft.h" #include "extern.h" float *pitchlastpha1, *pitchlastpha2; void InitPitch (int fftnum) { pitchlastpha1 = malloc ( fftnum*sizeof(float)); pitchlastpha2 = malloc ( fftnum*sizeof(float)); } void CleanPitch () { free(pitchlastpha1); free(pitchlastpha2); } float *Pitch ( float *magnitude, float *phase, int fftnum, int fftlen, int datalen, int BufCount, int DownSample) { Complex *dftrlt; float *phase1, *magnitude1; float *envelop; float *excite; int i, j, k; float *pTemp, *pTemp1; float *result, *phasediff; int newfftnum, interpnum, decimatenum; float frequencyfactor; int idx; if (BufCount <=13 ) frequencyfactor = 1; else { frequencyfactor = 1.0/(1+(BufCount-12)*0.02); frequencyfactor = 1.0/(1+(BufCount-13)*0.02); } phase1 = (float *)malloc ( datalen*fftnum*sizeof(float)); assert(phase1); /* printf ("BufCount = %d, DATALEN = %d, frequencefactor = %5.3f , fftnum = %d \n", BufCount, datalen, frequencyfactor , fftnum); */ /* for (i=0; i