#include #include #include #include #include "dft.h" #include "extern.h" float *male2female (float * magnitude, float * phase, int fftnum, int fftlen, int datalen, int BufCounnt, int DownSample); float *female2male (float * magnitude, float * phase, int fftnum, int fftlen, int datalen, int BufCounnt, int DownSample); float *flastpha1, *flastpha2; float *mlastpha1, *mlastpha2; void InitConv (int fftnum) { int newfftnum, interpnum, decimatenum; float frequencyfactor; interpnum = 2; decimatenum = 3; frequencyfactor = 1.8; newfftnum = fftnum*interpnum/decimatenum; mlastpha1 = (float *) malloc ( (newfftnum)*sizeof(float)); mlastpha2 = (float *) malloc ( (newfftnum)*sizeof(float)); interpnum = 25; decimatenum = 18; frequencyfactor = 0.6; newfftnum = (int)((float)fftnum/(float)frequencyfactor); newfftnum = fftnum*interpnum/decimatenum; flastpha1 = (float *) malloc ( (newfftnum)*sizeof(float)); flastpha2 = (float *) malloc ( (newfftnum)*sizeof(float)); } void CleanConv() { free(mlastpha1); free(mlastpha2); free(flastpha1); free(flastpha2); } float *Conv ( float *magnitude, float *phase, int fftnum, int fftlen, int datalen, char Command, int BufCount, int DownSample) { if (Command == 'm') return male2female(magnitude, phase, fftnum, fftlen, datalen, BufCount, DownSample); else return female2male(magnitude, phase, fftnum, fftlen, datalen, BufCount, DownSample); } /*******************************************************************************************************************************/ float *male2female (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; interpnum = 2; decimatenum = 3; frequencyfactor = 1.8; newfftnum = fftnum*interpnum/decimatenum; envelop = (float *)malloc (datalen*fftnum*sizeof(float)); /* printf("datalen = %d fftnum = %d \n", datalen, fftnum); */ /* excite = (float *)malloc ( datalen*newfftnum*sizeof(float)); */ excite = (float *)malloc ( datalen*fftnum*sizeof(float)); phase1 = (float *)malloc ( datalen*newfftnum*sizeof(float)); /* printf ("fftnum = %d, newfftnum = %d, \n", fftnum, newfftnum); */ for (i=0; i