tomwalters@0
|
1 /*
|
tomwalters@0
|
2 step.c generate a step up or down.
|
tomwalters@0
|
3 ------
|
tomwalters@0
|
4
|
tomwalters@0
|
5 */
|
tomwalters@0
|
6
|
tomwalters@0
|
7 #include <stdio.h>
|
tomwalters@0
|
8 #include <math.h>
|
tomwalters@0
|
9 #include "options.h"
|
tomwalters@0
|
10 #include "units.h"
|
tomwalters@0
|
11 #include "strmatch.h"
|
tomwalters@0
|
12
|
tomwalters@0
|
13 char applic[] = "generate a step waveform. " ;
|
tomwalters@0
|
14 char usage[] = "step [options]" ;
|
tomwalters@0
|
15
|
tomwalters@0
|
16 static char *helpstr, *debugstr, *sampstr, *astr, *dstr, *typestr ;
|
tomwalters@0
|
17 static char *shiftstr, *polstr ;
|
tomwalters@0
|
18
|
tomwalters@0
|
19 static Options option[] = {
|
tomwalters@0
|
20 { "help" , "off" , &helpstr , "help" , DEBUG },
|
tomwalters@0
|
21 { "debug" , "off" , &debugstr , "debugging switch" , DEBUG },
|
tomwalters@0
|
22 { "samplerate", "20kHz" , &sampstr , "samplerate " , VAL },
|
tomwalters@0
|
23 { "amplitude" , "1" , &astr , "step height" , VAL },
|
tomwalters@0
|
24 { "shift" , "10ms" , &shiftstr , "position of step relative to start", VAL },
|
tomwalters@0
|
25 { "polarity" , "up" , &polstr , "step up or down" , VAL },
|
tomwalters@0
|
26 { "duration" , "500ms" , &dstr , "duration of waveform" , VAL },
|
tomwalters@0
|
27 { "type" , "short" , &typestr , "output datatype" , VAL },
|
tomwalters@0
|
28 ( char * ) 0 } ;
|
tomwalters@0
|
29
|
tomwalters@0
|
30
|
tomwalters@0
|
31 int samplerate ;
|
tomwalters@0
|
32 float amplitude ;
|
tomwalters@0
|
33 int duration ;
|
tomwalters@0
|
34 int shift ;
|
tomwalters@0
|
35 int type ;
|
tomwalters@0
|
36
|
tomwalters@0
|
37 main(argc, argv)
|
tomwalters@0
|
38 int argc ;
|
tomwalters@0
|
39 char *argv[] ;
|
tomwalters@0
|
40 {
|
tomwalters@0
|
41 int i ;
|
tomwalters@0
|
42 float y0, y1 ;
|
tomwalters@0
|
43
|
tomwalters@0
|
44 getopts( option,argc,argv ) ;
|
tomwalters@0
|
45 if ( !isoff( helpstr ) )
|
tomwalters@0
|
46 helpopts3( helpstr, argv[0], applic, usage, option ) ;
|
tomwalters@0
|
47
|
tomwalters@0
|
48 samplerate = to_Hz( sampstr, 0 ) ;
|
tomwalters@0
|
49 amplitude = atof( astr ) ;
|
tomwalters@0
|
50 shift = to_p( shiftstr, samplerate ) ;
|
tomwalters@0
|
51 duration = to_p( dstr, samplerate ) ;
|
tomwalters@0
|
52
|
tomwalters@0
|
53 if ( ( type = typeindex( typestr ) ) < 0 ) {
|
tomwalters@0
|
54 fprintf(stderr,"step: unknown datatype [%s]\n", typestr) ;
|
tomwalters@0
|
55 exit( 1 ) ;
|
tomwalters@0
|
56 }
|
tomwalters@0
|
57
|
tomwalters@0
|
58 if ( isstr( polstr, "up" ) ) {
|
tomwalters@0
|
59 y0 = 0 ; y1 = amplitude ;
|
tomwalters@0
|
60 }
|
tomwalters@0
|
61 else if ( isstr( polstr, "down" ) ) {
|
tomwalters@0
|
62 y0 = amplitude ; y1 = 0 ;
|
tomwalters@0
|
63 }
|
tomwalters@0
|
64 else {
|
tomwalters@0
|
65 fprintf(stderr,"step: unknown polarity [%s]\n", polstr) ;
|
tomwalters@0
|
66 exit( 1 ) ;
|
tomwalters@0
|
67 }
|
tomwalters@0
|
68
|
tomwalters@0
|
69 for ( i = 0 ; i < shift ; i++ )
|
tomwalters@0
|
70 writeitem( &y0, type, 1, stdout ) ;
|
tomwalters@0
|
71 for ( ; i < duration ; i++ )
|
tomwalters@0
|
72 writeitem( &y1, type, 1, stdout ) ;
|
tomwalters@0
|
73
|
tomwalters@0
|
74 }
|