| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 
 | /* adB.c
 * converts gain values given as parameters into dB values
 * i.e. 1    will give 0dB
 *      0.5  will give -6dB amplitude / -3dB power
 *      10   will give 20dB amplitude / 10dB power
 */
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define db(x) pow(10,x/20.0)
#define adb(g) (10*log10(g))
main(argc,argv)
int argc;
char **argv;
{
   int i,j,k,n;
   double x,y;
   char *p;
   argc--; argv++;
   for ( ; argc; argc--, argv++) {
      x=atof(*argv);
      if ((p=strchr(*argv,'/'))!=NULL) {
	 y=atof(++p);
	 printf("%f/%f = %f = %f dB Ampl. or %f dB power\n",
		x,y,x/y,2*adb(x/y),adb(x/y));
      } else {
	 printf("Ratio of %f = %f dB Ampl. or %f dB power\n",
		x,2*adb(x),adb(x));
      }
   }
}
/*
double db(x)
double x;
{
  return(pow(10,x/20.0);
}
*/
/*
db(x)
int x;
{
  int i;
  static int dB_Conv[20]={
      100000000,  112201845,  125892541,  141253754,  158489319,
      177827941,  199526231,  223872114,  251188643,  281838293,
      316227766,  354813389,  398107171,  446683592,  501187234,
      562341325,  630957344,  707945784,  794328235,  891250938
  };
  for (i=100000000; i && x>=20; x-=20) { i/=10; }
  return((i)?(dB_Conv[x]/i):-1);
}
*/
 |