fast.h
上传用户:touchwatch
上传日期:2007-01-06
资源大小:168k
文件大小:2k
源码类别:

语音压缩

开发平台:

Unix_Linux

  1. #ifndef FAST_H
  2. #define FAST_H
  3. #define PROD5(A,B,R) 
  4. { typeof (R) __x,__y,__t;
  5.   typeof (&A[0]) __pa=A;
  6.   typeof (&B[0]) __pb=B;
  7.                           __x=*__pa++;__y=*__pb++;
  8.   R=R-R;    __t=__x*__y;  __x=*__pa++;__y=*__pb++;
  9.   R+=__t;   __t=__x*__y;  __x=*__pa++;__y=*__pb++;
  10.   R+=__t;   __t=__x*__y;  __x=*__pa++;__y=*__pb++;
  11.   R+=__t;   __t=__x*__y;  __x=*__pa++;__y=*__pb++;
  12.   R+=__t;   __t=__x*__y;
  13.   R+=__t;}
  14. /* Autocorrelation : R[0:K] is autocorrelation of X[M:N-1]  i.e.
  15.       R[k] = Sum X[i]*X[i-k]   for    M<=i<N     */
  16. #define AUTOCORR(X,R,K,M,N) 
  17. {
  18.     int  ii,jj;
  19.     for(ii=0; ii<=K; ii++) {
  20. R[ii] = 0;
  21. for(jj=M; jj<N; jj++) R[ii] += X[jj]*X[jj-ii];}}
  22. /* if AC is autocorrelation of X (as in above) , then
  23.    R[i] = D * R[i] + AC[i]    */
  24. #define RECACORR(X,R,K,M,N,D)
  25. {   int __k,__i,__M1=M+1;
  26.     typeof (&R[0]) __rp=R;
  27.     for(__k=0; __k<=K; __k++) {
  28. typeof (*R) __corr, __t;
  29. typeof (&X[0]) __xip=X+M, __xkp=__xip-__k;
  30. typeof(X[0]) __xi,__xk;
  31. __corr=__corr-__corr;
  32. __xi=*__xip++;
  33. __xk=*__xkp++;
  34. for(__i=__M1;__i<N;__i++) {
  35.     __t=__xi*__xk; __xi=*__xip++;
  36.     __corr+=__t; __xk=*__xkp++;
  37. }
  38. __t=__xi*__xk;
  39. __corr+=__t;
  40. __corr=*__rp*(D)+__corr;
  41. *__rp++=__corr;}}
  42. /** Z[i] = X[i]*Y[i] **/
  43. #define VPROD(X,Y,Z,N)
  44. {   typeof (&X[0]) __xp=X;
  45.     typeof (&Y[0]) __yp=Y;
  46.     typeof (&Z[0]) __zp=Z;
  47.     int i;
  48.     typeof (X[0]) __xi=*__xp++;
  49.     typeof (Y[0]) __yi=*__yp++;
  50.     typeof (Z[0]) __zi;
  51.     for(i=1;i<N;i++) {
  52. __zi=__xi*__yi;
  53. __xi=*__xp++;
  54. __yi=*__yp++;
  55. *__zp++=__zi;}
  56.     __zi=__xi*__yi;
  57.     *__zp=__zi;}
  58. #define RSHIFT(START,LENGTH,SHIFT) 
  59. { typeof (&(START)[0]) __from = &(START)[LENGTH-1]; 
  60.   typeof (&(START)[0]) __to = &(START)[LENGTH+SHIFT-1]; 
  61.   int __i; for(__i=0; __i<LENGTH; __i++)      *__to-- = *__from--;
  62. }
  63. /** Must have at least two elements, i.e. N >= 2.
  64.   computes sum(x[i]*y[i]) **/
  65. #define DOTPROD(X,Y,N) 
  66. ({ int __i;
  67.   typeof((X)[0]*(Y)[0]) __r=0, __t;
  68.   typeof ((X)[0]) __x1;
  69.   typeof ((Y)[0]) __y1;
  70.   typeof (&(X)[0]) __xp = &(X)[0]; 
  71.   typeof (&(Y)[0]) __yp = &(Y)[0]; 
  72.                               __x1=*__xp++; __y1=*__yp++; 
  73.              __t=__x1*__y1;   __x1=*__xp++; __y1=*__yp++; 
  74.    for(__i=0; __i<(N)-2; __i++) {
  75.    __r+=__t; __t=__x1*__y1;   __x1=*__xp++; __y1=*__yp++; }
  76.    __r+=__t; __t=__x1*__y1;   
  77.    __r+=__t; __r;})
  78. #endif /*FAST_H*/