00001
00034
00035
00036
00037
00038
00039
00040
00041 #include <sent/adin.h>
00042
00043 static int zlen = 0;
00044 static float zmean = 0.0;
00045
00050 void
00051 zmean_reset()
00052 {
00053 zlen = 0;
00054 zmean = 0.0;
00055 }
00056
00069 void
00070 sub_zmean(SP16 *speech, int samplenum)
00071 {
00072 int i;
00073 float d, sum;
00074
00075 if (zlen < ZMEANSAMPLES) {
00076
00077 sum = zmean * zlen;
00078 for (i=0;i<samplenum;i++) {
00079 sum += speech[i];
00080 }
00081 zlen += samplenum;
00082 zmean = sum / (float)zlen;
00083 }
00084 for (i=0;i<samplenum;i++) {
00085 d = (float)speech[i] - zmean;
00086
00087 if (d < -32768.0) d = -32768.0;
00088 if (d > 32767.0) d = 32767.0;
00089
00090 if (d > 0) speech[i] = (SP16)(d + 0.5);
00091 else speech[i] = (SP16)(d - 0.5);
00092 }
00093 }