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

📄 quant.c

📁 该程序是用vc开发的对动态数组进行管理的DLL
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2003.*//* All rights reserved.                       *//*********************** self documentation **********************//******************************************************************************QUANT - QUANTization routinesuniQuant - uniform quantization with a given relative RMS erroruniDequant - uniform dequantization*******************************************************************************Function 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 signal*******************************************************************************Author:		Tong Chen, 07/15/94Modifier:       Tong Chen, 05/30/95, for unified interface******************************************************************************/#include "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 error*******************************************************************************x		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.0f/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 = (float)sqrt(dev);   }      /* else */   else{       for(i=0; i<n; i++)	 g[i] = x[i] - lave;      dev = lstep;   }      /* stepsize used in quantization */   lstep = (float)(dev*error*ERRATIO);   lstep = 1.0f/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 error*******************************************************************************x		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.0f/step;      for(i=0; i<n; i++) x[i] = ave + qx[i]*rstep;}

⌨️ 快捷键说明

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