[1a3ddc]: / HRV.src / pwr.c

Download this file

128 lines (106 with data), 2.8 kB

  1
  2
  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
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/* pwr.c Joe Mietus Oct 7 2008 */
/*
pwr :
Usage: pwr [-r] [-L] lo1 hi1 ... [lo10 hi10]
Calculate total (and relative) power in fft between lo and hi.
options :
[-r] : print ratio of powers to total
[-L] : print powers on one line
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXBANDS 10
main(argc, argv)
int argc;
char *argv[];
{
int i, n, nbands, rflag, lflag;
double lo[MAXBANDS], hi[MAXBANDS], pr[MAXBANDS], tot;
double freq[2], mag[2], hbin[2], pwr;
if (argc < 3) {
usage(argv[0]);
exit(1);
}
rflag = lflag = 0;
for (i=1, argc--; argv[i][0] == '-'; i++, argc--) {
switch(argv[i][1]) {
case 'r': rflag = 1;
break;
case 'L': lflag = 1;
break;
default: usage(argv[0]);
exit(1);
}
}
if (argc % 2 != 0) {
usage(argv[0]);
exit(1);
}
if ((nbands = argc/2) > 10) {
fprintf(stderr, "%s : max power bands = MAXBANDS\n");
exit(1);
}
for (n=0; n<nbands; n++) {
lo[n] = atof(argv[i++]);
hi[n] = atof(argv[i++]);
pr[n] = 0.0;
}
tot = 0.0;
if (scanf("%lf%lf", &freq[0], &mag[0]) != 2)
exit(2);
if (scanf("%lf%lf", &freq[1], &mag[1]) != 2)
exit(2);
pwr = mag[0]*mag[0];
tot += pwr;
for (n=0; n<nbands; n++) {
if (freq[0] >= lo[n] && freq[0] <= hi[n])
pr[n] += pwr;
}
freq[0] = freq[1];
mag[0] = mag[1];
while (scanf("%lf%lf", &freq[1], &mag[1]) == 2) {
pwr = mag[0]*mag[0];
tot += pwr;
for (n=0; n<nbands; n++) {
if (freq[0] >= lo[n] && freq[0] <= hi[n])
pr[n] += pwr;
}
freq[0] = freq[1];
mag[0] = mag[1];
}
pwr = mag[0]*mag[0];
tot += pwr;
for (n=0; n<nbands; n++) {
if (freq[0] >= lo[n] && freq[0] <= hi[n])
pr[n] += pwr;
}
if (lflag) {
printf("%g ", tot);
for (n=0; n<nbands; n++) {
printf("%g ", pr[n]);
if (rflag)
printf("(%.3f) ", pr[n]/tot);
}
printf("\n");
}
else {
printf("Total = %g\n", tot);
for (n=0; n<nbands; n++) {
printf("%g - %g = %g", lo[n], hi[n], pr[n]);
if (rflag)
printf(" (%.3f)\n", pr[n]/tot);
else
printf("\n");
}
}
}
usage(prog)
char *prog;
{
fprintf(stderr, "Usage: %s [-r] [-L] lo1 hi1 ... [lo10 hi10]\n", prog);
fprintf(stderr, " Calculate total (and relative) power");
fprintf(stderr, " in fft between lo and hi.\n");
fprintf(stderr, " options :\n");
fprintf(stderr, " [-r] : print ratio of powers to total\n");
fprintf(stderr, " [-L] : print powers on one line\n");
}