This is hist.c in view mode; [Download] [Up]
#include <stdio.h>
#include <math.h>
#include <carl/carl.h>
#define NBIN 16
#define FABS(n)(n<0?-n:n)
int bin[NBIN];
float thresh[NBIN];
main(narg,argv) int narg; char *argv[];
{
register int i, j, max, nsamp = 0;
int otty = isatty(1), putout = 0;
float input;
register float dc = 0.0, rms = 0.0, peak = 0.0;
if (isatty(0)) {
fprintf(stderr, "%s%s%s",
"usage:\n",
"\thist < floatsams > histogram (ASCII display)\n",
"\thist -e < floatsams > floatsams, and >& historgram\n");
fprintf(stderr,"input must be a file or pipe of floatsams.\n");
exit(1);
}
if (narg > 1 && argv[1][0] == '-' && argv[1][1] == 'e') {
if (!otty)
putout++;
else {
fprintf(stderr, "hist: for -e, output must be file or pipe.\n");
exit(1);
}
}
for (i=0; i<NBIN; i++)
thresh[i] = pow(2.0, (float) -i );
thresh[NBIN-1] = -0.000001;
while ( getfloat(&input) > 0) {
if (putout)
putfloat(&input);
nsamp++;
dc += input;
rms += input * input;
if (FABS(input) > peak )
peak = FABS(input);
if (input < 0.0)
input = -input;
for (i=NBIN-1; i>=0; i--)
if (input < thresh[i] ) {
bin[i+1]++; break;
}
}
if (putout)
flushfloat();
for (max=i=0; i<NBIN; i++)
if (bin[i] > max)
max = bin[i];
if( nsamp > 0 ) {
if( peak == 0.0 ) {
fprintf(putout?stderr:stdout,"All-Zeros: " ) ;
goto lastprint ;
}
for (i=0; i<NBIN; i++){
fprintf(putout?stderr:stdout, "> %8.5f (= %6.1fdB) = %6d",thresh[i],
20*log10(thresh[i]>0?thresh[i]:1.e-6), bin[i]);
fprintf(putout?stderr:stdout," |");
for (j=0; j < (int) 40.0*bin[i]/max; j++)
fprintf(putout?stderr:stdout, "*");
fprintf(putout?stderr:stdout,"\n");
}
dc /= nsamp;
fprintf(putout?stderr:stdout,
"Mean = %f",dc ) ;
if( dc != 0.0 )
fprintf(putout?stderr:stdout,
" (= %.1fdB)\n", 20.0*log10(dc>0?dc:-dc));
else
fprintf(putout?stderr:stdout,"\n");
fprintf(putout?stderr:stdout,
"Peak = %f (= %.1fdB)\n",peak, 20.0*log10(peak>0?peak:-peak));
fprintf(putout?stderr:stdout,
"RMS = %f (= %.1fdB)\n", sqrt(rms/nsamp), 10.0*log10(rms/nsamp));
}
lastprint:
fprintf(putout?stderr:stdout,
"%d samples\n", nsamp);
exit(0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.