⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quant.comp.dct.libutil

📁 su 的源代码库
💻 LIBUTIL
字号:
QUANT - QUANTization routinesuniQuant - uniform quantization with a given relative RMS erroruniDequant - uniform dequantizationFunction Prototypes:void uniQuant(float *x, int n, float error, 		float *ave, float *step, int *qx);void uniDequant(float *x, int n, float ave, float step, int *qx)uniQuant:Input:x		array[] of input signaln               length of the signalerror		relative RMS errorave             average of the input signalstep            stepsize used in quantizationOutput:qx              array[] output integersuniDequant:Input:n               length of the signalave             average of the signalstep            stepsize used in quantizationqx              array[] input integersOutput:x		array[] of output signalAuthor:		Tong Chen, 07/15/94Modifier:       Tong Chen, 05/30/95, for unified interfaceinclude "comp.h"define ERRATIO 3.4641void uniQuant(float *x, int n, float error, 	      float *ave, float *step, int *qx)uniform quantization with a given relative RMS errorx		array[] of input signaln               length of the signalerror		relative RMS errorave             average of the input signalstep            stepsize used in quantizationqx              array[] output integers{   int i;   float rn, atmp, dev, lave, lstep;   float *g;   /* allocate temporary space   g = alloc1float(n);      rn = 1./n;      lave = 0.;   /* average, or mean-value   for(i=0; i<n; i++) lave += x[i];   lave *= rn;   lstep = *step;   fprintf(stderr,"average=%f\n", lave);   for(i=0; i<n; i++)      fprintf(stderr,"f[%d]=%f\n", i, x[i]);/   /* if no deviation calculated   if(lstep < 0.)   {            dev = 0.;      /* standard deviation, or RMS      for(i=0; i<n; i++)      {	 g[i] = x[i] - lave;	 atmp = ABS(g[i]);	 dev += atmp*atmp;      }         dev *= rn;      dev = sqrt(dev);   }      /* else   else{       for(i=0; i<n; i++)	 g[i] = x[i] - lave;      dev = lstep;   }      /* stepsize used in quantization   lstep = dev*error*ERRATIO;   lstep = 1./lstep;   fprintf(stderr,"lstep=%f\n", lstep);   /* uniform quantization   for(i=0; i<n; i++)   {            atmp = g[i]*lstep;      qx[i] = NINT(atmp);/      qx[i] = (atmp > 0.)? ((int) (atmp+.5)) : ((int) (atmp-.5));    }   fprintf(stderr,"after quantization\n");   /* average and stepsize   *ave = lave;   *step = lstep;      /* free the workspace   free1float(g);}void uniDequant(float *x, int n, float ave, float step, int *qx)uniform quantization with a given relative RMS errorx		array[] of output signaln               length of the signalave             average of the signalstep            stepsize used in quantizationqx              array[] input integers{   int i;   float rstep;   rstep = 1./step;      for(i=0; i<n; i++) x[i] = ave + qx[i]*rstep;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -