00001 #include "c_lpc10.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 VOID tbdm( FLOAT speech[], INDEX tau[LTAU], FLOAT amdf[LTAU],
00021 INDEX* minptr, INDEX* maxptr, INDEX* mintau )
00022 {
00023 INDEX minp2, maxp2, i, ptr, ltau2, last;
00024 #ifdef ORIG
00025 int minamd;
00026 #else
00027 FLOAT minamd;
00028 #endif
00029 FLOAT amdf2[6];
00030 INDEX tau2[6];
00031
00032
00033 difmag(speech, tau, LTAU, tau[LTAU-1], amdf, minptr, maxptr);
00034
00035 *mintau = tau[*minptr];
00036 #ifdef ORIG
00037 minamd = (int)amdf[*minptr];
00038 #else
00039 minamd = amdf[*minptr];
00040 #endif
00041
00042
00043 ltau2 = 0;
00044 ptr = (*minptr) - 2;
00045 last = (*mintau) + 3;
00046 if (last>tau[LTAU-1])
00047 last = tau[LTAU-1];
00048
00049 for (i = (((*mintau)>44) ? (*mintau)-3 : 41); i <= last; i++) {
00050 while (tau[ptr] < i)
00051 ptr++;
00052 if (tau[ptr] != i) {
00053 tau2[ltau2] = i;
00054 ltau2++;
00055 }
00056 }
00057
00058
00059 if (ltau2) {
00060 difmag(speech, tau2, ltau2, tau[LTAU-1], amdf2, &minp2, &maxp2);
00061 if (amdf2[minp2] < minamd) {
00062 *mintau = tau2[minp2];
00063 #ifdef ORIG
00064 minamd = (int)amdf2[minp2];
00065 #else
00066 minamd = amdf2[minp2];
00067 #endif
00068
00069 }
00070 }
00071
00072
00073 if (*mintau >= 80) {
00074 i = (*mintau) >> 1;
00075 if ((i & 1)!=0) {
00076 ltau2 = 1;
00077 tau2[0] = i;
00078 }
00079 else {
00080 ltau2 = 2;
00081 tau2[0] = i - 1;
00082 tau2[1] = i + 1;
00083 }
00084 difmag(speech, tau2, ltau2, tau[LTAU-1], amdf2, &minp2, &maxp2);
00085 if (amdf2[minp2] < minamd) {
00086 *mintau = tau2[minp2];
00087 #ifdef ORIG
00088 minamd = (int)amdf2[minp2];
00089 #else
00090 minamd = amdf2[minp2];
00091 #endif
00092 *(minptr) -= 20;
00093 }
00094 }
00095
00096
00097 #ifdef ORIG
00098 amdf[*minptr] = (FLOAT)minamd;
00099 #else
00100 amdf[*minptr] = minamd;
00101 #endif
00102
00103
00104 *maxptr = (*minptr>5) ? (*minptr)-5 : 0;
00105 last = ((*minptr)<(LTAU-6)) ? (*minptr)+6 : LTAU;
00106 for (i = (*maxptr)+1; i < last; i++) {
00107 if (amdf[i] > amdf[*maxptr])
00108 *maxptr = i;
00109 }
00110 }
00111
00112