7 typedef unsigned short uint16;
9 void lpredict(float *adc, int wsize, float *lpc, int order)
16 for(i = 0; i <= order; i++) {
18 for(j = 0; j < wsize - i; j++) sum += adc[j] * adc[j + i];
22 /* find lpc coefficients */
24 for(i = 1; i <= order; i++) {
26 for(j = 1; j < i; j++) ci += lpc[j] * acf[i-j];
28 for(j = 1; j < i; j++) tmp[j] = lpc[j] - ci * lpc[i-j];
29 for(j = 1; j < i; j++) lpc[j] = tmp[j];
33 void lpc2signal(float *adc, int wsize, float *lpc, int order)
38 for(i = 0; i <= order; i++) {
40 for(j = 0; j < wsize - i; j++) sum += adc[j] * adc[j + i];
44 /* find lpc coefficients */
46 for(i = 1; i <= order; i++) {
48 for(j = 1; j < i; j++) ci += lpc[j] * acf[i-j];
50 for(j = 1; j < i; j++) tmp[j] = lpc[j] - ci * lpc[i-j];
51 for(j = 1; j < i; j++) lpc[j] = tmp[j];
56 void s_compress(uint16 *udat,float *dat,int framesize)
61 for (i=0;i<framesize;i++) dat[i] = udat[i];
63 lpredict(dat,framesize,lpc,order);
74 /* read one frame of data */
75 if (fread(udat,2,FRAME,stdin) != FRAME) break;
78 s_compress(udat,dat,FRAME);
81 s_uncompress(udat,dat,FRAME);
83 /* and write it out */
84 fwrite(udat,2,FRAME,stdout);