home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 6 / FreshFish_September1994.bin / bbs / misc / gfft-1.12.lha / GFFT / gfft.help < prev    next >
Text File  |  1994-08-29  |  172KB  |  3,890 lines

  1. ?preface
  2.  
  3.  This file is intended for display by the gfft 'help' facilities.  However,
  4.  it also currently constitutes the most complete gfft manual, so, if you
  5.  really want to read a lot about GFFT, you might want to read it with
  6.  MORE or search for key strings using your favorite searching,
  7.  text-editing, or searching program.
  8.  
  9.  The format is intended to be compatible with that used by the GNUPLOT
  10.  help/manual file, so one day I will be able to print out hardcopy
  11.  documents my massaging this file and using troff, tex, postscript, etc.
  12.  (A suitable massage might even render it in AmigaGUIDE format).
  13.  
  14.  
  15. ?organization
  16.  
  17.  This document is organized as follows:
  18.  
  19.      Preface
  20.      Organization
  21.      Introduction
  22.      General Topics
  23.      Workbench Gadgets
  24.      CLI Commands
  25.      Appendixes
  26.  
  27.  
  28. ?introduction 
  29.  
  30.  (In the following discussion, additional help topics are highlighted with
  31.  angle brackets like this: >introduction<.  A list of additional help
  32.  >topics< is also available.  These topics may be displayed using the HELP
  33.  requester or command.)
  34.  
  35.  GFFT is an FFT-based spectrum analysis program with many features.  It is
  36.  intended to provide higher resolution and higher quality than most
  37.  real-time FFT-based spectrum analyzers, and, in conjunction with a
  38.  suitable plotting program (such as GNUPLOT, a separate program written by
  39.  others which GFFT can invoke and control) it can produce high quality
  40.  spectrum plots on screen or paper (including the output of Postscript or
  41.  TeX files if desired).  GFFT can be run either through a Workbench
  42.  graphical interface or from the CLI in either interactive or batch (single
  43.  command) modes.  
  44.  
  45.  GFFT can also do such things as control GNUPLOT to plot several spectra on
  46.  the same screen or page (see >Workbench Plot-Combine< or >CombinePlots<),
  47.  and re-plot previously stored spectrum data files (see >Workbench
  48.  Spectrum-File-Open< or >Open<).
  49.  
  50.  
  51.  WORKBENCH USAGE
  52.  ---------------
  53.  
  54.  From the Workbench, GFFT may be started by double-clicking on its icon.
  55.  The GFFT Dialog Window then appears.  Within the GFFT Dialog Window, you
  56.  may select sample files to analyze either by using the ASL file requester
  57.  (which comes up after you click on the 'SELECT' gadget), or by entering
  58.  their name(s) into the 'Sample File' string gadget.  Note that the ASL
  59.  file requester requires Workbench 2.0 or higher.
  60.  
  61.  If you prefer, you may use 'extended selection' to select one or more
  62.  sample files in advance.  This is done by first single-clicking on the
  63.  GFFT icon, and then holding down the Shift key while clicking on a series
  64.  of one or more icons representing the sample files you wish to analyze.
  65.  You double-click on the last sample icon selected to start GFFT.
  66.  
  67.  GFFT is also distributed with a sample whose icon automatically invokes
  68.  GFFT (i.e., it has a GFFT tooltype).
  69.  
  70.  Within the GFFT dialog window, you use the 'OK' button to actually begin a
  71.  spectrum analysis, the 'NEXT' button to advance to the next selected
  72.  sample file (if more than one was selected on the Workbench), the close
  73.  gadget (at the top left of the window border) to terminate GFFT, and the
  74.  'CLI' button to continue the GFFT session in CLI mode (if you need to
  75.  activate one of the few features available only in the GFFT CLI
  76.  interface).  (You can then return to the GFFT Dialog Window by giving the
  77.  'Workbench' command.)  There are also many other gadgets in the dialog
  78.  window which allow you to view and adjust parameters and use other
  79.  features.  Notably, the '3D-Time' button brings up a requester allowing
  80.  you to do 3D analysis using time as the third dimension, and the 'CAL'
  81.  button brings up a requester allowing you to specify one or more
  82.  calibration files to be applied to the spectral data.
  83.  
  84.  Help for any gadget in the GFFT Dialog Window may be displayed by holding
  85.  the CTRL key when clicking on that gadget.  (String gadgets may need to be
  86.  de-selected first.)  Additional information may be displayed by using the
  87.  Help Requester which comes up when you click on the 'HELP' button.
  88.  
  89.  If you click the Version/Copyright button, a requester providing
  90.  information about the author, your rights to modify and distribute GFFT,
  91.  additional services available, disclaimers, and so on will be displayed.
  92.  
  93.  
  94.  CLI USAGE
  95.  ---------
  96.  
  97.  From the CLI, GFFT may be run as an >interactive< program which prompts
  98.  for each argument or command, or as a >batch< program for which all
  99.  arguments and commands have been specified as command-line arguments.  If
  100.  no arguments are given in the command line invoking GFFT, interactive mode
  101.  is assumed.  For more information about the CLI commands available in
  102.  GFFT, give the 'Help' command while running GFFT in CLI-interactive mode,
  103.  or give the batch mode question-mark (?) command.
  104.  
  105.     sys> gfft ?
  106.  
  107.     OR
  108.  
  109.     sys> gfft
  110.  
  111.     gfft> help
  112.  
  113.  If you desire, a Workbench session can be started from the CLI.  To do
  114.  this, give GFFT the 'Workbench' command.  From the Workbench, you can then
  115.  go back to the CLI session (if it was interactive) by clicking the CLI
  116.  button.
  117.  
  118.  sys> gfft workbench
  119.  
  120.  [workbench session]
  121.  
  122.  OR
  123.  
  124.  sys> gfft
  125.  
  126.  gfft> workbench
  127.  
  128.  [partial workbench session ended with click on CLI button]
  129.  
  130.  gfft> ok
  131.  
  132.  gfft> quit
  133.  
  134.  
  135.  Since GFFT is designed to work in conjunction with GNUPLOT, you should
  136.  install GNUPLOT before running GFFT.  You should also follow the other
  137.  instructions included in your GFFT distribution in the file named
  138.  INSTALLATION.
  139.  
  140.  
  141.  STARTUP FILE
  142.  ------------
  143.  
  144.  When starting, GFFT looks for a file named .gfft either in the current
  145.  directory (which is the one in which GFFT itself is found, if started from
  146.  the Workbench), or if not found there, in the system S: directory.  This
  147.  file can contain a series of GFFT CLI commands, one per line.  Lines
  148.  beginning with ; # or ! are ignored, as are blank lines.  This file is
  149.  executed before GFFT does anything else.  By using a .gfft file, you can
  150.  'customize' the GFFT defaults and other features to match your application
  151.  or environment.
  152.  
  153.  
  154.  HOW TO LEARN MORE
  155.  -----------------
  156.  
  157.  If spectrum analysis is new to you, consider reading the HELP topic
  158.  >data-windowing<, but don't be discouraged if it is a little hard to
  159.  understand at first.
  160.  
  161.  Also, check the >References< topic.
  162.  
  163.  
  164. ?General-Topics
  165. ?Topics
  166.  
  167.  Help is also available for any additional topic named <topic> by entering
  168.  
  169.      help <topic>
  170.  
  171.  From the WORKBENCH, help is available for these topics through the
  172.  HELP requester which comes up after the HELP button has been clicked.
  173.  
  174.  The additional topics are:
  175.  
  176.  introduction        topics            interactive-CLI        batch
  177.  code contributors   financial contributors      idea contributors
  178.  accuracy            speed             memory    references
  179.  floating-point-errors                 CLI-commands
  180.  GFFT-Dialog-Window                    Workbench-Message-Display
  181.  More-About-Bins     temporary-files   Data-Windowing
  182.  zoom
  183.  
  184. ?zoom
  185.  
  186.  GNUPLOT, which GFFT uses, does not have an interactive 'zoom' capability.
  187.  But, using GFFT it is possible (if not extremely fast) to zoom in or out
  188.  from a spectrum using the following gadgets:
  189.  
  190.  Low Freq (Low Frequency)
  191.  High Freq (High Frequency)
  192.  Low Y
  193.  High Y
  194.  
  195.  (The 'Low Y' and 'High Y' gadgets are available in the Calibration and
  196.  Magnification requester which comes up when you click on the 'Cal & Mag'
  197.  button.)
  198.  
  199.  Once you modify one or more of these parameters to explore the part of the
  200.  spectrum you are most interested in, you need not repeat the entire
  201.  analysis; it is only necessary to repeat the plotting phase, and this is
  202.  accomplished through using the RePlot button.
  203.  
  204.  If you are using the interactive CLI interface, the corresponding commands
  205.  are LowFrequency, HighFrequency, LowY, HighY, and RePlot.
  206.  
  207.  See the help information for these buttons or commands for further
  208.  discussion. 
  209.  
  210.  
  211. ?More-About-Bins
  212. ?Data-Windowing
  213.  
  214.  [This is somewhat technical, but may help you understand some of the
  215.  parameters in GFFT.  If you don't understand it, don't worry; you can
  216.  usually just use the GFFT defaults, adjusting the Bins parameter downward
  217.  to about 1024 or less if you are short on memory.]
  218.  
  219.  When dealing with functions that are sampled at evenly spaced intervals in
  220.  time, it is appropriate to use the 'discrete Fourier transforms.'  These
  221.  equations map N complex numbers from the 'time domain' to the 'frequency
  222.  domain' (and back again).  The 'fast Fourier' techniques use various
  223.  symmetries to reduce the computation times from O(N times N) to O(N log
  224.  N), but one price paid for this is that N must be a integer power of 2.
  225.  
  226.  This is also true if our N is the number of real sampled data points, or
  227.  one-sided (positive frequency only) frequency 'bins,' though it will
  228.  take 2 real data points to yield an amplitude estimate at each positive
  229.  frequency (which has been averaged with the amplitude at a corresponding
  230.  negative frequency).
  231.  
  232.  Another problem with Fourier transformation 'periodograms' (arrays of
  233.  frequency values computed from time-sampled values) is that the variance
  234.  (random error) can be quite high.
  235.  
  236.  We can deal with both of these problems by using data windowing.  Rather
  237.  than choosing the largest N (being a power of 2) that we could use with
  238.  our number of real sampled data points, we may choose a smaller N (still
  239.  being a power of 2), compute a series of periodograms, one from each
  240.  successive segment or 'window' of N times 2 data points, and then average
  241.  their results.  This reduces the variance considerably (at the price of
  242.  lowering the number of frequencies in the averaged periodogram, which is
  243.  frequently not a problem).  Next, we can overlap the last full window with
  244.  another window such that any remainder of data points are accounted for.
  245.  In fact, there is no reason why we can't overlap ALL of the windows by
  246.  50%, as that can reduce the total variance 9/11 as much as having twice as
  247.  much data to average over to begin with (see Press, et.  al, 1988, page
  248.  445).
  249.  
  250.  Unfortunately, there are some problems with having N's of finite length,
  251.  which is even exacerbated by averaging periodograms from smaller windows.
  252.  (Ideally, we would have an infinite N.)  We tend to get spurious
  253.  'sidelobes' around each spectral peak.  This occurs because the window
  254.  truncates the real signal, usually at some non-zero point.  Sidelobing
  255.  (and other artifacts) can be reduced by using more sophisticated windows.
  256.  
  257.  The trivial window type (assumed above) is rectangular, we simply take the
  258.  data points in each window as-is.  This is the same as if we multiplied
  259.  each of the data points within our window by 1, and all data points
  260.  outside the window by zero.  There are a huge variety of window functions
  261.  which begin at a low multiplier or zero at the beginning of the window,
  262.  ramp up to 1 in the middle, and then return to a low multiplier or zero at
  263.  the end.  Each of these window 'types' has tradeoffs, but the Rectangle
  264.  window has the worst tendency to generate sidelobes because it truncates
  265.  the signal on both sides most abruptly.
  266.  
  267.  GFFT includes the following window types.  
  268.  
  269.      >Rectangle<
  270.      >Triangle<
  271.      >Parzen<
  272.      >Welch<
  273.      >Hann<
  274.      >Hamming<
  275.      >74-dB-Blackman-Harris<
  276.      >92-dB-Blackman-Harris<
  277.  
  278.  These are listed roughly in order of increasing ability to suppress
  279.  spurious sidelobes.
  280.  
  281.  Refer to the HELP message provided for each one of these for further
  282.  information.  See also the HELP messages for >Bins<, >Overlap<, and
  283.  >Parseval<.
  284.  
  285.  
  286. ?Accuracy
  287. ?Speed
  288. ?Floating-Point-Errors
  289.  
  290.  GFFT uses double precision floating point for the values related to time
  291.  and frequency, and single precision for the values related to amplitude
  292.  (or power, etc.).  In the standard version, the Motorola Fast Floating
  293.  Point (FFP) math library is used--this reduces the precision of double
  294.  precision to approximately that of single precision, and (seems to) reduce
  295.  the precision of single precision somewhat also.  The benefit is about a
  296.  4x improvement in overall (!) performance without a floating point unit
  297.  (FPU).  Despite limited precision, I believe FFP is good enough for most
  298.  graphical purposes, and it is probably superior in accuracy to using
  299.  scaled integer arithmetic.
  300.  
  301.  On systems with an FPU, the GFFT-FPU version is another 10% or more
  302.  faster, and it doesn't compromise the double precision and single
  303.  precision accuracy in any way.
  304.  
  305.  The standard FFP version doesn't handle errors such as divide by zero very
  306.  well, but GFFT attempts to detect problems like this before they would
  307.  occur so they shouldn't occur often.
  308.  
  309.  The FPU version uses in-line FPU code, which I have found to be much
  310.  faster than using the IEEE library.  Even on a machine with an FPU, using
  311.  the IEEE library is actually slower than using the FFP library which
  312.  doesn't even use the FPU.
  313.  
  314.  
  315. ?Memory
  316. ?More-About-Bins
  317. ?Temporary-Files
  318.  
  319.  The amount of memory GFFT allocates depends mainly on the number of Bins
  320.  used.  If you are having trouble with running out of memory, try using a
  321.  smaller number of bins.  By default, GFFT will use as many bins as can be
  322.  meaningfully used on the sample file being analyzed.  Use the Bins command
  323.  or the Bins gadget to adjust the set the number of bins.  1024 is a
  324.  typical number of bins people use, though I prefer to use more.  (The
  325.  number of bins determines your frequency resolution.  However, when fewer
  326.  bins are used, more averaging is done, so the results may be more
  327.  accurate.  GFFT will always try to use all data present in the most
  328.  intensive way, unless limited by options such as Frames and NoOverlap.)
  329.  Note that the number of bins must be a power of two, but GFFT will round
  330.  up to the next power of two if you specify a value which is not a power of
  331.  two.
  332.  
  333.  There is also a 'Savememory' command available from the CLI which will
  334.  reduce the dynamic memory requirements of GFFT somewhat, while increasing
  335.  the fft computation times slightly on most processors.  The difference in
  336.  execution time is barely measurable in most cases.
  337.  
  338.  GFFT also stores temporary command files in RAM: and temporary data files
  339.  in T:.  During a GFFT session, temporary data files may accumulate in T:,
  340.  and thereby fill up memory (if T: is assigned to RAM:T, as is typically
  341.  done.)  You may reduce the memory requirements for temporary data files by
  342.  reassigning T: to your harddrive, as in any of the following examples (use
  343.  whichever is more appropriate):
  344.  
  345.      Assign t: dh0:t
  346.      Assign t: dh1:t
  347.      Assign t: work:t
  348.      Assign t: df0:t
  349.  
  350.  Alternatively, you can purge unused files from T: as necessary.  Upon
  351.  termination, GFFT will delete all temporary data files from T: for you.
  352.  
  353.  You can also choose to use named data files (using the Write command or
  354.  the Spectrum File gadget) instead of temporary data files, and store them
  355.  in particular directories on you harddrive or floppy disk.  In this case,
  356.  temporary data files will not be used.
  357.  
  358.  The temporary command files stored in RAM: are so small as to be of little
  359.  consequence.  They are deleted upon the termination of GFFT.
  360.  
  361.  GFFT may leave some extra libraries in ram upon termination.  If you are
  362.  very short of memory, you may choose to use the following command (in
  363.  AmigaDOS 2.0 and later) to remove them after terminating GFFT:
  364.  
  365.      Avail /flush
  366.  
  367.  
  368. ?Interactive-CLI
  369.  
  370.  To run GFFT in the CLI 'interactive' mode, simply enter the command GFFT
  371.  to your CLI prompt.  (This assumes that you have installed GFFT to a
  372.  directory in your path, or have the current directory set to the directory
  373.  or device where GFFT resides.)  If you specify any additional arguments in
  374.  the GFFT command line, GFFT will start in 'batch' mode instead.
  375.  
  376.  In interactive mode, GFFT will display a verbose header with copyright and
  377.  other information, and then begin prompting for additional commands with a
  378.  GFFT> prompt.  If you would like a list of available commands, enter the
  379.  'help' command.  Note that any command may be abbreviated to its minimum
  380.  unambiguous string, and GFFT is not case sensitive regarding commands.
  381.  Here is a sample session:
  382.  
  383.     GFFT> read piano.iff
  384.     GFFT> ok
  385.  
  386.  The OK command (which has the alias GO) actually starts the fft
  387.  processing.  If no file has been specified, or there is other incomplete
  388.  or invalid information, GFFT will give an error message and return another
  389.  prompt, so that you may make corrections.  Note that if the input file is
  390.  unformatted, you must specify the sampling rate using the 'rate' command.
  391.  For large sample files, it is also advisable to specify a specific number
  392.  of bins with the 'bins' command, or else GFFT will attempt to use the
  393.  maximum number of bins that could be useful with the number of data points
  394.  (or 'frames') in the file and other parameters.  To see a list of most of
  395.  the current parameter settings, use the 'ShowSettings' command.
  396.  
  397.  In interactive mode, the Plot option is turned on by default.  If you do
  398.  not specify a spectrum file with the Write command, GFFT will create (but
  399.  not delete) a temporary file for you, and run GNUPLOT automatically to
  400.  plot the spectrum when it is completed.  Alternatively, you can specify a
  401.  file to write the results to using the Write command, and disable Plot
  402.  mode with the NoPlot command if you didn't want to see the plot now.
  403.  
  404.  Most commands actually set parameters rather than initiating any
  405.  particular action.  However, it is not necessary (or possible, currently)
  406.  to use an explicit 'set' command; it is just implied.  Thus, to enable
  407.  plot mode, you enter the command 'plot' instead of 'set plot mode.'  Then,
  408.  plotting will be performed during the execution of the 'OK' command.
  409.  
  410.  
  411. ?Batch-Mode
  412. ?Batch
  413.  
  414.  To run GFFT in batch mode, enter the command 'GFFT' followed by a series
  415.  of GFFT commands as they would be entered in 'interactive' mode.  A
  416.  fairly large number (around 30 or so) commands may be entered in this
  417.  fashion, on several lines (so long as you do not press RETURN unescaped).
  418.  When you have entered all the commands that you wish gfft to process,
  419.  enter RETURN.  GFFT will process all the commands possible, after
  420.  which your command prompt will be returned.
  421.  
  422.  You can get a list of the available GFFT commands in batch mode by using
  423.  the question-mark (?) command, i.e.:
  424.  
  425.      gfft ?
  426.  
  427.  Unlike 'interactive' and 'workbench' modes, plot mode is disabled by
  428.  default in batch mode.  You must specify 'plot' explicitly if you want a
  429.  plot to be created at the end of fft processing.
  430.  
  431.  Also, an 'OK' command is usually not required in batch mode; it is implied
  432.  by the end of the command list if there is a read not followed by an OK
  433.  command.
  434.  
  435.  Batch mode is intended to be an 'Amiga' compliant CLI mode (Commodore
  436.  discourages interactive CLI programs like GNUPLOT), and is particularly
  437.  useful for doing a series of analyses.  A command file may be written and
  438.  then executed as a CLI script if desired.  For example, you could write
  439.  a script like this:
  440.  
  441.      gfft read white write white.fft bins 8192 lowf 0 highf 200 psd
  442.      gfft read white append white.fft bins 2048 lowf 200 highf 400 psd
  443.      gfft read white append white.fft bins 1024 lowf 400 highf 800 psd
  444.      gfft read white append white.fft bins 512 lowf 800 highf 1600 psd
  445.      gfft read white append white.fft bins 256 lowf 1600 highf 3200 psd
  446.      gfft read white append white.fft bins 128 lowf 3200 highf 6400 psd
  447.      gfft read white append white.fft bins 64 lowf 6400 psd
  448.  
  449.  This would append a series of fft 'bands' to a output file named white.fft,
  450.  with successively lower resolution at higher frequencies (desireable for
  451.  logarithmic display of the frequency axis).  (Note that an alternative
  452.  approach would be to use 'SmoothingSegments' with 'LogX' enabled.)
  453.  
  454.  
  455. ?Workbench Low-Frequency
  456.  
  457.  The Low-Frequency gadget allows you to select the lowest frequency to be
  458.  output (and plotted, if applicable).  By default, GFFT outputs and plots
  459.  the lowest non-zero frequency, and this is shown in the gadget if it can
  460.  be computed.  You may enter zero or any integer or floating point number
  461.  into the Low-Frequency gadget.
  462.  
  463.  Although the FFT process yields a value for the 0 frequency (e.g. D.C.),
  464.  typical FFT analyzers do not display it because it may display some offset
  465.  caused by the sampler.  With GFFT, this is also the default, but you may
  466.  also choose to display the zero frequency by entering 0 into the
  467.  Low-Frequency gadget.
  468.  
  469.  If no Low-Frequency has been entered, GFFT will display the lowest
  470.  frequency which will be plotted for each file, which depends on the
  471.  sampling rate, number of bins, and other factors.  This default low
  472.  frequency is the same as the spacing between frequencies in the FFT, i.e.,
  473.  the frequency resolution.  
  474.  
  475.  Once you enter a new Low-Frequency it will remain in effect for the
  476.  current Sample File and any additional files processed in the same GFFT
  477.  session.  However, you may restore the default by deleting the number
  478.  shown in the Low-Frequency gadget and pressing RETURN.
  479.  
  480.  Note that a specified Low-Frequency is handled differently by the RePlot
  481.  button than by the OK and ReOutput buttons.  See the help for the RePlot
  482.  button for further details.
  483.  
  484.  
  485. ?Workbench High-Frequency
  486.  
  487.  The High-Frequency gadget allows you to select the highest frequency to be
  488.  output (and plotted, if applicable) up to the 'Nyquist frequency,' which
  489.  is one-half of the sampling rate.  Any positive number (integer or
  490.  floating point) may be given as an argument.  If you enter a number higher
  491.  than the Nyquist frequency, it will have no effect (except during RePlot,
  492.  see below).  If no number has been entered, the default high frequency--
  493.  the Nyquist frequency--is displayed if it can be computed.
  494.  
  495.  Once you enter a new high frequency it will remain in effect for the
  496.  current Sample File and any additional files processed in the same GFFT
  497.  session.  However, you may restore the default by deleting the number
  498.  shown in the High-Frequency gadget and pressing RETURN.
  499.  
  500.  Note that a specified high frequency is handled differently by the RePlot
  501.  button than by the OK and ReOutput buttons.  See the help for the RePlot
  502.  button for further details.
  503.  
  504.  
  505. ?Workbench Smoothing
  506.  
  507.  Using the Smoothing gadget, you can specify that the output be 'smoothed'
  508.  or averaged over a certain number of 'smoothing segments.'  To do this,
  509.  enter the number of segments you wish to used into the gadget.  (This
  510.  works best if the number of segments is much smaller than the number of
  511.  bins used).  The number of of segments you specify is used to span the
  512.  range from the lowest non-zero frequency to the Nyquist frequency.  To
  513.  cancel smoothing, press the NO button immediately to the right of the
  514.  smoothing gadget, or delete the number in the Smoothing gadget.
  515.  
  516.  Without smoothing, if you plot with a large number of bins, or with LogX
  517.  on, you may find that the left or right side of the scale 'blooms' with a
  518.  wide range of values.  Rather than 'pixel averaging,' GNUPLOT shows the
  519.  effect of plotting a line to each and every data point--even if many such
  520.  points occur within one vertical line of pixels.  SmoothingSegments can
  521.  be used to eliminate this 'blooming' effect, simulate 'pixel averaging,'
  522.  and give you a more easily interpretable curve (though some important
  523.  actual detail may be lost!).
  524.  
  525.  If LogX is enabled, the mesh applied to the output will be logarithmically
  526.  scaled.  The combination of using LogX, SmoothingSegments, and a extra
  527.  large number of Bins is especially recommended for analysis using random
  528.  noise (e.g. white or pink noise) and/or whenever LogX is used.
  529.  
  530.  The smoothing technique is very simple.  A mesh of smoothing segments is
  531.  laid on top of the FFT bins, and for each smoothing segment containing
  532.  one or more data points, the average Y (amplitude) and X (frequency) values
  533.  are computed, and these become the X and Y values that are written to the
  534.  output file.  If there is only one data point within a smoothing segment,
  535.  it is unchanged by this procedure.  If there is no data point within a
  536.  smoothing segment, no data point will be output.  
  537.  
  538.  (If LogX is enabled, it is very possible that there will not be as many
  539.  data points as the number of segments you have chosen.  For example, given
  540.  4096 bins and 400 smoothing segments, only about 225 points will actually
  541.  be produced because the actual data points at the lower frequencies are
  542.  farther apart than the smoothing segments, even though there are many
  543.  data points per segment at the higher frequencies.  This does not happen if
  544.  LogX is not enabled.)
  545.  
  546.  If SquaredSmoothing button (Sq) is selected, the averaging of the Y values
  547.  is done by taking the positive root of average of the sum of the squared Y
  548.  values.
  549.  
  550.  I am aware of much more sophisticated smoothing or 'convoluting'
  551.  procedures which may have greater theoretic validity (e.g., see S. P.
  552.  Lipschitz, T. C. Scott, and J. Vanderkooy, 'Increasing the Audio
  553.  Measurement Capability of Analyzers by Microcomputer Postprocessing,'
  554.  Journal of the Audio Engineering Society, Volume 33, Number 9, September
  555.  1985...their technique simulates 1/3 octave bandwidth digital filters
  556.  which is useful in that it supposedly approximates human auditory
  557.  limitations), but these are also much more complicated.  The present
  558.  technique is workable and useful, though it may be somewhat lacking in
  559.  theoretic validity (though it is not without precedent), and the results
  560.  should be interpreted with some caution (you are probably not seeing all
  561.  the real features that are there--but then that is true with any
  562.  smoothing technique).
  563.  
  564.  
  565. ?Workbench Smoothing-NO
  566.  
  567.  The 'Smoothing-NO' button cancels smoothing.  When clicked, any number you
  568.  may have entered into the smoothing gadget is cleared.  You can achieve
  569.  the same effect by deleting the number in the smoothing gadget.  By
  570.  default when GFFT is started, smoothing is turned off, and the
  571.  Smoothing-NO button will be selected.
  572.  
  573.  See help for the Smoothing gadget for more information about the smoothing
  574.  used by GFFT.
  575.  
  576.  
  577. ?Workbench Smoothing-Squared
  578.  
  579.  The Smoothing-Squared button changes the operation of the Smoothing gadget
  580.  (see) slightly.  It has no effect if smoothing segments are not being used.
  581.  This is a toggle button which can be clicked on or off, but it has no
  582.  effect unless a number of smoothing segments has been entered into the the
  583.  Smoothing gadget.
  584.  
  585.  With Smoothing-Squared selected, the averaging of the Y values is done by
  586.  taking the positive root of the average of the sum of the squared Y
  587.  values.
  588.  
  589.  I have found this to make a nearly negligible difference in practice, but
  590.  your experience may vary.  I'm not sure which averaging approach is more
  591.  'valid' (I suspect it depends on whether you are plotting logarithmically
  592.  or not).
  593.  
  594.  
  595. ?Workbench Mean
  596.  
  597.  The Mean button determines whether GFFT will write Mean (average) or
  598.  summed values.  By default, GFFT will write Mean values.  In other words,
  599.  by default, Root Mean Square (RMS) Amplitude or Mean Square (MS) Power
  600.  values will be written.
  601.  
  602.  I do not recommend the use of the 'summed' values (as with Mean
  603.  deactivated) except for special debugging purposes.
  604.  
  605.  
  606. ?Workbench More-Help
  607.  
  608.  Getting help for any button or string gadget in GFFT is easy...simply
  609.  click on that button or gadget while holding down the CTRL key.
  610.  
  611.  (The CTRL key is normally found to the left of the Caps Lock key.)
  612.  
  613.  There is one bug here.  If a STRING GADGET has ALREADY been activated, you
  614.  must deactivate it first before requesting help for it.  To do this,
  615.  simply click anywhere else on the window (such as on the window
  616.  background).  Then, you may click on the string gadget while holding the
  617.  CTRL key, and the help message will be displayed.  It is not necessary to
  618.  deselect ordinary buttons first.  Help is not available for the message
  619.  indicator on the bottom of the GFFT Dialog Window (sorry; I tried).
  620.  
  621.  If you would like more information about the author of GFFT, how you can
  622.  support GFFT development, your rights regarding the use and distribution
  623.  of GFFT, the disclaimer, and other related information, click on the
  624.  Version/Copyright button on the top of the main GFFT Dialog Window.  (Of
  625.  course, you must exit from this HELP requester first by clicking on the
  626.  '...OK' button on the bottom right.  Aren't you glad I don't require you
  627.  to click away a Version/Copyright requester each time you start GFFT?
  628.  
  629.  The HELP requester also provides two other 'canned' messages which you may
  630.  display by clicking on the 'Intro' and 'Topics' buttons on the bottom row.
  631.  The message for 'Topics' is a list of additional topics.  You may enter
  632.  the name of any HELP topic into the string gadget and press RETURN.
  633.  
  634.  Note that each message will be displayed in its own window and runs in its
  635.  own shell process, and, if you re-size or move the windows, you may display
  636.  more than one message at the same time.  You may also use or even exit
  637.  from GFFT while still reading one or more help windows.  Isn't
  638.  multitasking wonderful?
  639.  
  640.  GFFT uses MORE to display help messages.  MORE must be installed either
  641.  in the usual place (sys:utilities), C:, or in the same directory as
  642.  GFFT in order to be used by GFFT.  Unfortunately, aliases for MORE
  643.  will not work.  However, if you would prefer to use some text reader
  644.  other than MORE, you can either create a link or a copy of that reader
  645.  in any of these three locations.  Links (made with the makelink) command
  646.  are preferable, as they take a minimum of storage, but they must be
  647.  on the same device or partition as the actual program itself.  A link
  648.  in the directory C: to a reader named MORE2 would be created with the
  649.  following command:
  650.  
  651.      makelink c:more c:more2
  652.  
  653.  
  654.  Running GFFT basically requires three steps: selecting a file, selecting
  655.  options (or just using the defaults), and then clicking the 'OK' button at
  656.  the bottom right of the GFFT dialog window.
  657.  
  658.  
  659. ?GFFT-Dialog-Window
  660.  
  661.  Almost everything in the GFFT dialog window is a button or string gadget.
  662.  One notable exception is the Message Display at the bottom.  This gives
  663.  information about the current GFFT operational status, and possibly
  664.  indicates what user action is currently most desireable.  (If an FFT
  665.  analysis is being performed, the message 'Performing FFT analysis...'
  666.  will be displayed.  This could take a considerable amount of time.  During
  667.  this time, you will should not attempt to operate on any other GFFT Dialog
  668.  Window gadgets.)
  669.  
  670.  When clicked, the Version/Copyright button at the top will bring up a
  671.  requester providing more information about the author of GFFT and the
  672.  copyright and disclaimer.
  673.  
  674.  For further information on the Message Display, refer to help topic
  675.  >Workbench-Message-Display<.
  676.  
  677.  
  678. ?Workbench 3D-Time
  679.  
  680.  The 3D-Time button brings up the 3D-Time requester which allows you to
  681.  set parameters associated with the display of how a spectrum varies over
  682.  time.  Further information is available through the 'Help' button in that
  683.  requester.
  684.  
  685.  
  686. ?Workbench 3D-Time Help
  687.  
  688.  The '3D-Time' facilities of GFFT are intended to enable you to show how a
  689.  spectrum varies with time.  GFFT is very flexible in how it enables you to
  690.  do this.  The results can also be plotted in 3 dimensions by GNUPLOT where
  691.  z is the axis of time.
  692.  
  693.  If you would like to try it now, rather than reading about it first, just
  694.  click the 'Auto Set-Up 1' button, which will set up the 3D-Time parameters
  695.  to work for many, if not most, sample files.  Then, click '...Done,' then
  696.  select a sample file to analyze (if you haven't done so already), and
  697.  click 'OK.'  If it doesn't work, you'll just have to read more.
  698.  
  699.  The basic model is as follows: The sample frames are divided into segments
  700.  called 'Time Segments,' and a spectrum analysis is performed on each Time
  701.  Segment.  Time Segments can be overlapped, and the overlap can either be
  702.  specified as a fraction of the size of each Time Segment ('Time Segment
  703.  Overlap') or as the number of frames by which each Time Segment is ahead
  704.  of the previous one ('Time Segment Offset').  By default, the Time Segment
  705.  Overlap is set to 0.5 (i.e. 50%) and the 'Time Segment Offset' is computed
  706.  automatically.  Then, either the number of time segments can be specified
  707.  (this is the 'Time Segment Count') or, their size can be specified (this
  708.  is the 'Time Segment Size') whichever is more convenient or useful to your
  709.  application.
  710.  
  711.  One of the two parameters Time Segment Count and Time Segment Size must be
  712.  set.  When either of these two parameters is set, any previous value of
  713.  the other one is cleared.
  714.  
  715.  Time Segment Overlap has a default value of 0.5.  If Time Segment Offset
  716.  is set, it supercedes Time Segment Overlap (whose value is then hidden).
  717.  
  718.  If you set any of the above 3D-Time parameters, the toggle button 3D-Time
  719.  On is activated.
  720.  
  721.  You may also adjust the X Rotation and Z Rotation factors used by GNUPLOT
  722.  in rendering the 3-d plot, and/or select Hidden3D display, which hides all
  723.  lines which are behind the 3D surface.  (This feature may not work with
  724.  versions of GNUPLOT prior to 3.4.)
  725.  
  726.  The Reset button clears Time Segment Count, Time Segment Size, Time
  727.  Segment Offset, and 3D-Time On, and Time Overlap, X Rotation, and Z
  728.  Rotation are set to their default values.  Any of these values may also be
  729.  cleared or defaulted by deleting all characters in each string gadget and
  730.  pressing return.
  731.  
  732.  You may advance to the next string gadget in this requester simply by
  733.  pressing RETURN.
  734.  
  735.  Note that Time Segments are distinct from the FFT 'segments' used in a
  736.  flat spectral analysis and from the FFT analysis within each Time Segment.
  737.  If each Time Segment is large enough relative to the number of Bins, there
  738.  may be more than one FFT segment within each Time Segment, the results of
  739.  which are averaged to reduce the variance.  Within each Time Segment, the
  740.  usual 'Bins,' 'Overlap,' 'Pad,' and window shape parameters still apply,
  741.  so the full flexibility of a flat GFFT is available (though the maximum
  742.  number of bins possible may be reduced).  Only one parameter available to
  743.  a flat analysis is unavailable for analysis within each Time
  744.  Segment--StartFrame (a parameter which may only be set from the CLI).
  745.  StartFrame will apply to the input file as a whole and not to each Time
  746.  Segment.
  747.  
  748.  In cases where 3D-Time analysis reduces the number of bins possible, the
  749.  use of high performance window shapes such as Hann or 74dB Blackman-Harris
  750.  is recommended.
  751.  
  752.  
  753.  Examples:
  754.  
  755.  1.  Suppose you just want a rough idea as to how the spectrum in a fairly
  756.  small sample file (such as an instrument) varies over time, and are
  757.  willing to use the default Time Segment Overlap, and would simply like
  758.  each segment to use the maximum Bins size possible (and with overlap, if
  759.  possible).  You might figure 5 time segments would be adequate to get a
  760.  rough idea, yet would not be too many considering the number of frames.
  761.  (If you have a very small sample file, you might have to use only 2 or 3
  762.  Time Segments.  Increasing the number of Time Segments will reduce the
  763.  maximum possible number of bins, so there is a trade-off here which is
  764.  critical for small sample files.)
  765.  
  766.  Set the Time Segment Count to 5, and click 'Done.'  In the main Workbench
  767.  Dialog Window click on 'Bins-MAX' and/or 'Overlap' if they had previously
  768.  been turned off.
  769.  
  770.  
  771.  2.  Suppose you wish to divide the sample file into non-overlapping time
  772.  segments which could each be analyzed with 1024 bins (with no overlap or
  773.  padding within each time segment).
  774.  
  775.  First set the Time Segment Size parameter to 2048, then set the Time
  776.  Overlap parameter to 0.  (For non-complex data, there must be 2 sample
  777.  frames for each FFT bin.)  This is sufficient to define this analysis, and
  778.  3D-Time On is selected automatically, so then you click 'Done.'  If you
  779.  have not already set the number of Bins explicitly, you will notice that
  780.  it has been automatically set to 1024.  Since exactly 2048 frames are
  781.  available for each FFT analysis, no overlap will be used regardless of
  782.  whether the Overlap button in the main GFFT Dialog is activated.
  783.  
  784.  
  785.  3. Suppose you wish to have each Time Segment to be ahead of the previous
  786.  one by exactly 1000 frames.  (This might apply if you want the z axis to
  787.  have increments of 0.1 second, and the sampling rate was 10,000.)  You
  788.  consider some Time Segment Overlap of approximately 0.5 to be acceptable,
  789.  but you would like an analysis with 1024 frequency bins.
  790.  
  791.  Set the Time Segment Size to 2048 and the Time Segment Offset to 1000.
  792.  
  793.  
  794.  4.  Suppose you have a VERY large sample file, and would rather not
  795.  analyze the whole thing, but would like a 'spot' analysis every 100,000
  796.  frames.  You would like to have 1024 bins used in each analysis, but would
  797.  prefer to reduce the variance of each 'spot' spectrum by averaging 4
  798.  overlapped segments within each time segment.
  799.  
  800.  Note that the overlap used for a flat spectral analysis and within each
  801.  Time Segment is fixed at 0.5 and cannot be changed (though it can be
  802.  turned off).  Therefore, 2 overlapping FFT segments would occupy 1.5x the
  803.  space of one segment, 3 overlapping segments would occupy 2x, and 4
  804.  overlapping segments would occupy 2.5x if exactly these numbers of frames
  805.  are available.* 
  806.  
  807.  Set the Time Segment Offset to 100,000, and the Time Segment Size to 5120
  808.  (2.5 x (1024 x 2)).  Click 'Done...' and set the Bins gadget (in the main
  809.  dialog window) to 1024.
  810.  
  811.  (*Actually, 2 overlapping segments will be used for any number of frames
  812.  greater than 1 segment but less than 2 segments, 3 overlapping segments
  813.  will be used for exactly the number of frames in 2 segments, 4 overlapping
  814.  segments will be used for any number of frames greater than 2 segments but
  815.  less than 3 segments, and so on.)
  816.  
  817.  
  818. ?Workbench Ok
  819.  
  820.  The OK button initiates an FFT according to all the specified parameters.
  821.  The selected Sample File will be read and transformed, the selected
  822.  Spectrum File file (if any) will be written to (otherwise, a temporary
  823.  file will be used), and a PLOT will be produced (if that option is
  824.  enabled).
  825.  
  826.  This command is invalid if any parameters have been set incorrectly, if no
  827.  sample file has been selected, or if plot mode is disabled AND no named
  828.  (permanent) spectrum file has been selected.
  829.  
  830.  Example:
  831.  
  832.      1. select sample file using the requester that appears after pressing
  833.           SELECT in the Sample File row (requires 2.0+) or enter
  834.           filename directly in Sample File Gadget
  835.      2. plot is enabled by default in workbench mode; re-enable if disabled
  836.           by clicking on it
  837.      3. click the OK button
  838.  
  839.  Note: depending on the size of the sample file, the number of bins and
  840.  other parameters you have set, as well as the CPU and/or FPU resources
  841.  available, an FFT analysis could take anywhere between a fraction of a
  842.  second to several weeks.  So, if you don't get an immediate response, have
  843.  faith that GFFT is working, not hanging.  If there is any error, GFFT
  844.  should let you know right away.  If it is working away on your file, and
  845.  the number of bins is small compared with the size of your sample file,
  846.  you will see the disk light flickering occasionally.
  847.  
  848.  While an FFT is being performed, DO NOT click on any other gadgets in the
  849.  GFFT Dialog Window.
  850.  
  851.  
  852. ?Workbench Cal-&-Mag
  853.  
  854.  The 'Cal & Mag' button brings up the Calibration and Magnification
  855.  Requester which allows you to specify calibration files and values for
  856.  quantization, low Y, and high Y.
  857.  
  858.  A help button is provided within the Calibration and Magnification
  859.  Requester which provides more information.
  860.  
  861.  
  862. ?Workbench Calibration Help
  863.  
  864.  The Calibration and Magnification requester enables you to apply a
  865.  'calibration' to the output of GFFT.  In this way, you can compensate for
  866.  the frequency response of your sampler, microphone, noise source, etc.
  867.  Any number of calibrations may be in effect at the same time.  Each time a
  868.  filename is entered into the Calibration or DbCalibration gadgets, a new
  869.  calibration is linked into the current list of calibrations (even though
  870.  only the last one entered into each gadget is shown).  The entire list is
  871.  canceled by clicking the Cancel All Calibrations button.  A message window
  872.  shows the number of calibrations currently in effect, and indicates
  873.  whether a calibration file is currently being processed...which can take
  874.  some time.)  (More about these gadgets follows...)
  875.  
  876.  This requester also includes the Quantization gadget, into which a
  877.  quantization value can be entered.  Quantization can be canceled by
  878.  clicking the Cancel button following the Quantization gadget, or by
  879.  erasing the value shown.  (More about this gadget follows...)
  880.  
  881.  This requester also includes the Low Y and High Y gadgets, which allow you
  882.  to adjust the Y range used in plotting.  You may restore either or both of
  883.  these to the default (autoscaling) by deleting the value shown, or by
  884.  clicking the Cancel buttons which follow each one.  It is best to set both
  885.  of these gadgets if setting either one.  (More about these gadgets
  886.  follows...)
  887.  
  888.  The Calibration gadget allows you to enter a calibration file to be
  889.  applied to the spectrum data before output.  The DbCalibration gadget
  890.  allows you to calibrate using a file in which the amplitudes are scaled in
  891.  dB.  Calibrations and DbCalibrations may be applied to spectrums in any
  892.  combination regardless of whether the final output is scaled in dB or not.
  893.  Each of these gadgets has a small 'S' button; when the S button is
  894.  clicked, a file requester comes up to allow you to select the file.  (This
  895.  file requester requires Workbench 2.0 or higher; otherwise, you will have
  896.  to enter the name into the corresponding gadget yourself.)
  897.  
  898.  The calibration file(s) should be in the same format as the spectrum files
  899.  produced by GFFT itself.  Each line (terminated by newline) should have a
  900.  frequency value, any number of spaces, and an amplitude value (NOT a
  901.  'power' or squared amplitude value!).  The frequencies must be in
  902.  increasing order, and the range of frequencies must be equal to or greater
  903.  than that to be output by GFFT (see warning below).  Lines beginning with
  904.  one of the following characters are considered to be comments:
  905.  
  906.      # ; !
  907.  
  908.  If a spectrum is calibrated by itself, the result should be a straight
  909.  line at either 1.0 or 0.0 (for dB output).  Actually, due to slight
  910.  rounding errors, the actual result will be close to, but not exactly these
  911.  ideal values (e.g. 0.9999998).  Given that Gnuplot will always scale the
  912.  output to the maximum Y magnification, small differences between these
  913.  values will be shown from the top to the bottom of the Y scale.  To
  914.  correct this effect, consider setting the LowY and/or HighY values
  915.  explicitly to increase the vertical range, which will make the spectral
  916.  line look much flatter.  Quantization can also be used, but it has some
  917.  other disadvantages.
  918.  
  919.  Calibration as used here is unrelated to true complex 'correlation,' which
  920.  is not currently available in GFFT.  Calibration has somewhat limited
  921.  accuracy and validity, but is still probably a feature worth having for
  922.  its usefulness.  Note that in between points specified in a calibration
  923.  file, simple linear interpolation will be used by GFFT.  If a frequency
  924.  higher than the highest calibration frequency is output by GFFT, it will
  925.  be calibrated by the value for the highest calibration frequency, and any
  926.  frequency lower than the lowest calibration frequency will be calibrated
  927.  by the value for the lowest calibration frequency.  In other words, GFFT
  928.  uses simple horizontal extension of the calibration curve rather than
  929.  extrapolation.  (WARNING!  This could be dangerous if interpreted
  930.  improperly!  Remember to provide calibrations over a range equal to or
  931.  greater than the range to be output by GFFT.)
  932.  
  933.  One way to use Calibration is to perform a GFFT analysis on your signal
  934.  source itself, and then apply that result as a 'calibration' to your test
  935.  measurements.  Another way is to write frequency response data provided by
  936.  a calibration laboratory (such as for a microphone) into a suitable
  937.  calibration file.  In fact, both kinds of calibration can be used at the
  938.  same time.
  939.  
  940.  
  941.  The High Y gadget allows you to set the lowest value to be shown on the
  942.  vertical axis used for plotting by GNUPLOT.  Using this gadget, you can
  943.  'zoom in' or 'zoom out' vertically into the plot.  This gadget has no
  944.  effect on the data file written by GFFT.
  945.  
  946.  The Low Y gadget allows you to set the lowest value to be shown on the
  947.  vertical axis used for plotting by GNUPLOT.  Using this gadget, you can
  948.  'zoom in' or 'zoom out' vertically into the plot.  This gadget has no
  949.  effect on the data file written by GFFT.
  950.  
  951.  Note that GNUPLOT might do strange things if you specify a HighY value
  952.  without also specifying a LowY value and vice-versa.  It may, for example,
  953.  decide to run the Y axis upside down in order to show the widest range of
  954.  Y values.  Or, if less than one Y unit would be plotted when autoscaling
  955.  one value, GNUPLOT may decide the Y range is invalid.  So, it is safest to
  956.  specify both High Y and Low Y.
  957.  
  958.  In 3D mode, the vertical axis (representing power or amplitude) is
  959.  actually the Z axis, so the High Y and Low Y values selected are applied
  960.  to the Z axis in that mode.
  961.  
  962.  Quantization lets you set a quantization value for GFFT output.  For
  963.  example, a quantization of 0.1 will cause all amplitude or power values to
  964.  be rounded off to the nearest 0.1.
  965.  
  966.  Note that you could use any arbitrary value for quantization (e.g.
  967.  12.3456) though this might not be very useful.  Typical values might be
  968.  0.1, 0.05, 0.001, etc.
  969.  
  970.  Quantization only affects the amplitude or power values.  It has no effect
  971.  on the FFT computation itself, and does not affect the output of frequency
  972.  values.
  973.  
  974.  
  975. ?Workbench Copyright
  976.  
  977.  The 'Copyright' button at the top of the GFFT Dialog window displays the
  978.  version number of GFFT you are running and a copyright notice.  When
  979.  clicked, it brings up a requester which can provide more information about
  980.  the author, the NO WARRANTY disclaimer, the GNU General Public License
  981.  agreement, information about services available from the author and how
  982.  you can support the development of this program, and other information
  983.  about the development of this program.
  984.  
  985.  
  986. ?Workbench Help
  987.  
  988.  The 'help' button brings up a requester which displays instructions on how
  989.  to obtain help for any gadget displayed in the GFFT Dialog Window,
  990.  provides a button to display an introductory message, and provides a
  991.  string gadget to get help on other topics suggested by the introductory
  992.  message.
  993.  
  994.  
  995. ?Workbench Help Topics
  996.  
  997.  To get help for any general topic documented in the help file for GFFT,
  998.  enter the topic name in the Help Topic gadget and press return.  To get
  999.  a list of topics which you may request help for, press the 'Topics'
  1000.  button.
  1001.  
  1002.  
  1003. ?Workbench Sample-File
  1004.  
  1005.  The Sample File gadget displays the currently selected sample file (if
  1006.  any) and allows you to enter the name of any other sample file to read.
  1007.  You may click in the text box and type the name.  This action may be
  1008.  completed by pressing the Return key, or by clicking on any other button.
  1009.  (As soon as Return is pressed or any other button is clicked, the file you
  1010.  named will be opened.)
  1011.  
  1012.  Under Workbench 2.0 or greater, you may also select a file to read using
  1013.  the adjacent 'Select' button which brings up an ASL file requester.
  1014.  
  1015.  If GFFT was started by clicking on the GFFT icon, the Sample File gadget
  1016.  will be activated by default so that you can just start typing the name of
  1017.  the first sample file to analyze.  If GFFT was started by clicking on a
  1018.  sample file icon that has GFFT as its tooltype, or through the 'extended
  1019.  selection' of GFFT and one or more sample files, the name of the first
  1020.  sample file will appear in the Sample File gadget and the gadget will not
  1021.  be activated by default.  If more than one sample file was selected, you
  1022.  may advance to the next one by clicking on the 'Next' gadget.
  1023.  
  1024.  GFFT can also read data points entered from the keyboard.  See help for
  1025.  the 'con:' button for further information.
  1026.  
  1027.  GFFT can read both formatted and unformatted files.  If GFFT understands
  1028.  the format of the file (it currently understands IFF 8SVX, AIFF, and AVR
  1029.  formats), it will automatically set the sampling rate, and it will know
  1030.  the number of frames so that the maximum number of bins can be determined
  1031.  without scanning the entire file.  (GFFT also recognizes but does not yet
  1032.  understand RIFF and VOCH formats.  See help for the IgnoreFormat command
  1033.  for some advice on how to deal with those formats.)
  1034.  
  1035.  If the file is unformatted, you will have to set the sampling rate
  1036.  manually before beginning an analysis.  You may also have to use the Bits
  1037.  and Unsigned commands if your unformatted file does not use the default
  1038.  for unformatted files (8 bits, signed).  If the file is formatted using an
  1039.  unrecognized format, you may still be able to read it using the command
  1040.  'StartByte' (which allows you to skip over the file header) if you know
  1041.  how long the file header is, and 'Frames' (which allows you to read a
  1042.  specified number of frames, skipping any file segments following the
  1043.  sample data).  This is not recommended unless you are very familiar with
  1044.  the inner workings of the file format you are working with.
  1045.  
  1046.  
  1047. ?Workbench Sample-Select
  1048.  
  1049.  When the Select button is clicked, a requester will appear to let you
  1050.  select the sample file for GFFT to read.  This feature requires Workbench
  1051.  2.0 or higher.  (If you do not have 2.0 or higher, you can enter the
  1052.  filename into the Sample File gadget, or use the 'extended selection' of
  1053.  GFFT and one or more sample files from the Workbench.)
  1054.  
  1055.  
  1056. ?Workbench Sample-Con:
  1057.  
  1058.  In addition to reading stored sample files, GFFT can accept data points
  1059.  through the keyboard 'con:' device.  You can select this option either by
  1060.  clicking on the Sample File 'con:' button, or entering the name 'con:'
  1061.  into the Sample File string gadget.  Next, you should enter the sampling
  1062.  rate into the 'S Rate' gadget.  Then, you can adjust other parameters.
  1063.  Finally, after you click 'OK,' you will be prompted to enter each data
  1064.  point from a console window.  You may enter each data point as an integer
  1065.  or as a floating point number with optional exponent.
  1066.  
  1067.  If you started GFFT from the Workbench using Workbench 2.0 or greater, a
  1068.  new console window will appear for you to enter data points.  If you
  1069.  started GFFT from the CLI, and then activated the GFFT Dialog Window using
  1070.  the WORKBENCH command, you will be prompted to enter data points in the
  1071.  original CLI from which you started GFFT (which might now be hidden by the
  1072.  GFFT Dialog Window).  If you started GFFT from the Workbench using
  1073.  Workbench 1.3, the GFFT console window will be present whether you use it
  1074.  or not (due to limitations of that Workbench version).
  1075.  
  1076.  This may be useful if you have a small number of manually recorded data
  1077.  points, or wish to experiment with FFT spectrum analysis to gain a deeper
  1078.  understanding of it.  For example, if you entered the following points:
  1079.  
  1080.         > 1
  1081.         > 0
  1082.         > -1
  1083.         > 0
  1084.  
  1085.  You would get a spectrum of 2 points (Nyquist Frequency/2, Nyquist
  1086.  Frequency) or 3 points if you set the Low Frequency to 0 (as "zero
  1087.  frequency," i.e. D.C., would be included).  The center frequency of
  1088.  Nyquist Frequency/2 would have amplitude 0.707 and the amplitude would be
  1089.  0 at the other frequency(ies).  This illustrates the default normalization
  1090.  of GFFT, since 0.707... is also the RMS amplitude of the signal you have
  1091.  entered, and the frequency is 1/2 of the Nyquist Frequency.
  1092.  
  1093.  
  1094. ?Workbench Octave-Low
  1095.  
  1096.  The 'Octave Low' button selects the lowest octave currently available in
  1097.  a formatted file (such as 8SVX) which may have more than one octave.  If
  1098.  there is only one octave present, it is considered to match the lowest
  1099.  octave.  'Low Octave' is the default octave.
  1100.  
  1101.  
  1102. ?Workbench Octave-2
  1103.  
  1104.  The 'Octave 2' button selects the second (from the lowest) octave
  1105.  available in a file with a format (such as 8SVX) which supports more than
  1106.  one octave.  If the sample file does not have this octave, this button
  1107.  should be ghosted.
  1108.  
  1109.  
  1110. ?Workbench Octave-3
  1111.  
  1112.  The 'Octave 3' button selects the third (from the lowest) octave available
  1113.  in a file with a format (such as 8SVX) which supports more than one
  1114.  octave.  If the sample file does not have this octave, this button should
  1115.  be ghosted.
  1116.  
  1117.  
  1118. ?Workbench Octave-4
  1119.  
  1120.  The 'Octave 4' button selects the fourth (from the lowest) octave
  1121.  available in a file with a format (such as 8SVX) which supports more than
  1122.  one octave.  If the sample file does not have this octave, this button
  1123.  should be ghosted.
  1124.  
  1125.  
  1126. ?Workbench Octave-5
  1127.  
  1128.  The 'Octave 5' button selects the fifth (from the lowest) octave available
  1129.  in a file with a format (such as 8SVX) which supports more than one
  1130.  octave.  If the sample file does not have this octave, this button should
  1131.  be ghosted.
  1132.  
  1133.  
  1134. ?Workbench Octave-6
  1135.  
  1136.  The 'Octave 6' button selects the second (from the lowest) octave
  1137.  available in a file with a format (such as 8SVX) which supports more than
  1138.  one octave.  If the sample file does not have this octave, this button
  1139.  should be ghosted.
  1140.  
  1141.  
  1142. ?Workbench Octave-7
  1143.  
  1144.  The 'Octave 7' button selects the second (from the lowest) octave
  1145.  available in a file with a format (such as 8SVX) which supports more than
  1146.  one octave.  If the sample file does not have this octave, this button
  1147.  should be ghosted.
  1148.  
  1149.  
  1150. ?Workbench Octave-Hi
  1151.  
  1152.  The 'octave hi' button selects the highest available octave in a file with
  1153.  a format (such as 8SVX) which supports more than one octave.  This choice
  1154.  is always valid, regardless of how many octaves are in the file.
  1155.  
  1156.  
  1157. ?Workbench One-Shot-Only
  1158.  
  1159.  The One-Shot Only button causes GFFT to read only the one-shot portion of
  1160.  a sample in a format (e.g. 8SVX) supporting this feature.  Pressing the
  1161.  One-Shot Only button a second time will disengage it and cause GFFT to
  1162.  read the entire sample.
  1163.  
  1164.  Pressing the One-Shot Only button once will also disengage the Repeat Only
  1165.  button if it had previously been engaged.
  1166.  
  1167.  
  1168. ?Workbench Repeat-Only
  1169.  
  1170.  The Repeat Only button causes GFFT to read on the repeat portion of a
  1171.  sample in a format (e.g. 8SVX) which supports this feature.  Pressing the
  1172.  Repeat Only button a second time will disengage it and cause GFFT to read
  1173.  the entire sample.
  1174.  
  1175.  Pressing the Repeat Only button once will also disengage the One-Shot Only
  1176.  button if it had previously been engaged.
  1177.  
  1178.  
  1179. ?Workbench Channel
  1180.  
  1181.  The Channel gadget selects a particular channel for a file in a format
  1182.  (e.g. AIFF) which supports this feature.  After entering the channel
  1183.  number in this gadget, you may press return to have it entered and checked
  1184.  immediately.  If the selected channel is unavailable, an error requester
  1185.  will appear, however, the number you selected will not be changed; it will
  1186.  be up to you to enter a valid number.  You must have entered a valid
  1187.  channel number before clicking OK.  To select the default channel, delete
  1188.  all characters and press RETURN.  (The default channel is always Channel
  1189.  1.)
  1190.  
  1191.  
  1192. ?Workbench Rate
  1193.  
  1194.  The S Rate gadget automatically displays the sampling rate defined by a
  1195.  formatted file and allows you to specify a rate for any file.  For an
  1196.  unformatted file, you must enter a valid sampling rate before clicking OK.
  1197.  (Any positive floating point number is acceptable.)  You may also override
  1198.  the sampling rate value for a formatted file by entering a different rate
  1199.  AFTER selecting the file.  When the next formatted file is read in, the
  1200.  Sampling Rate gadget will be set to the sampling rate indicated by that
  1201.  file.
  1202.  
  1203.  
  1204. ?Workbench Bins
  1205.  
  1206.  The Bins gadget displays the current bins value, and allows you to enter a
  1207.  different bins value if desired.  By default, GFFT chooses the maximum
  1208.  number of bins which could be put to use (considering the number of sample
  1209.  frames and other parameters in effect).  If you have a very large sample
  1210.  file, or desire to reduce the spectral variance by averaging successive
  1211.  frame segments, you should choose a smaller number of bins.
  1212.  
  1213.  1024 is a typical number of bins, though I usually use more.  You should
  1214.  enter a value which is a power of 2.  If you do not, GFFT will choose the
  1215.  next higher power of two for you.  If you select a number of bins higher
  1216.  than the maximum, GFFT will detect this problem after you click OK.
  1217.  
  1218.  When you enter a number of bins, the MAX Bins button will disengage.  The
  1219.  value you specify will then continue to be used for subsequent files
  1220.  regardless of their size.  To return to the default (MAX) bins setting,
  1221.  press the MAX bins button, or delete all digits from the Bins gadget.
  1222.  
  1223.  For an unformatted file, the default number of bins will not be known
  1224.  until the file is scanned, and normally this does not happen until the
  1225.  OK button is pressed, so the Bins gadget will remain blank unless you
  1226.  choose to specify a non-default number of bins.
  1227.  
  1228.  
  1229. ?Workbench Bins-MAX
  1230.  
  1231.  The Bins MAX button indicates whether GFFT is automatically determining
  1232.  the number of bins based on the number of frames in the file (and other
  1233.  settings), as it does by default.  Also, by clicking the MAX Bins button,
  1234.  you can re-engage this automatic default mode.  If the MAX Bins button is
  1235.  unselected, it indicates that a number of bins was entered into the Bins
  1236.  gadget, dis-engaging the default MAX mode.  
  1237.  
  1238.  (The MAX Bins gadget will not automatically be selected if you happen to
  1239.  enter the maximum number of bins into the Bins gadget, as that fixed value
  1240.  would continue to be applied to subsequent files regardless of their
  1241.  size.)
  1242.  
  1243.  
  1244. ?Workbench Plot
  1245.  
  1246.  The Plot button is a toggle button which selects or de-selects Plot mode.
  1247.  In Plot mode, GNUPLOT is automatically invoked in a shell process to
  1248.  display the result of each spectrum analysis performed.  If you have not
  1249.  explicitly selected a file to which to write spectral data, GFFT will
  1250.  automatically write a temporary file (in t:) for GNUPLOT to read.  All
  1251.  such temporary files will be deleted on exit from GFFT if you have
  1252.  terminated the plot display.  You terminate the plot display by pressing
  1253.  RETURN after it has been displayed.  GFFT can only display one PLOT at a
  1254.  time, but you can overlay or concatenate several spectra in one PLOT
  1255.  clicking the Plot-Combine ('&' following Plot) or Open buttons (see).
  1256.  
  1257.  If Plot mode is de-selected, a spectrum file must be explicitly
  1258.  specified--otherwise there is no point in doing the analysis since the
  1259.  data would only be written to a temporary file and then deleted.  GFFT
  1260.  will check to see that either a spectrum file has been specified and/or
  1261.  Plot mode is engaged when you click OK.
  1262.  
  1263.  If you wish to create a nicely labeled Plot, it is preferable to
  1264.  explicitly name each spectrum file, since GNUPLOT will use each the name
  1265.  of each spectrum file to label the corresponding spectrum.  Read HELP for
  1266.  the Write gadget for further details.
  1267.  
  1268.  
  1269. ?Workbench Plot-Combine
  1270.  
  1271.  The Plot-Combine button (the ampersand following the PLOT button)
  1272.  activates CombinePlots mode.  In this mode, successive spectra are shown
  1273.  together in the same plot display.  Each spectrum is plotted with a
  1274.  different color (or linetype) by GNUPLOT and labeled with the name of the
  1275.  specified spectrum file or temporary file.  Using CombinePlots mode,
  1276.  different data and/or parameter choices can be compared.
  1277.  
  1278.  CombinePlots will have no effect unless Plot mode is also engaged.
  1279.  
  1280.  The Plot-Combine button is a toggle button.  To disengage CombinePlots
  1281.  mode after having engaged it, click the button again.
  1282.  
  1283.  When CombinePlots mode is first engaged, the previously completed spectrum
  1284.  (if any) becomes the first data set for the plotter, the next completed
  1285.  spectrum becomes the second data set, and so on.  If you would rather not
  1286.  include the previously completed spectrum, click the 'Plot-Cut' (X) button
  1287.  (immediately to the right) after engaging CombinePlots.
  1288.  
  1289.  To use this mode most easily, CANCEL any spectrum file name you have
  1290.  specified and let GFFT create sequentially named temporary files for you.
  1291.  If you would like to save each spectrum to a named file, then YOU MUST
  1292.  remember to create a different named file for each spectrum computed.
  1293.  Otherwise, each new spectrum will overwrite the previous one, and you will
  1294.  get nothing but the same spectrum over and over.  For use with RePlot, you
  1295.  will have to Plot-Cut (X) the current file first, or it will be repeated
  1296.  twice.  Use of Plot-Combine with Write-Append can also be tricky.
  1297.  
  1298.  When CombinePlots mode is disengaged, all previously combined spectra are
  1299.  'cut' off, so that if CombinePlots is re-engaged immediately, a new plot
  1300.  combination starts from scratch.
  1301.  
  1302.  To 'cut' only the last spectrum, click the Plot-Cut button once.  To cut
  1303.  several spectra from the plot combination, click Plot-Cut button several
  1304.  times.  Each time Plot-Cut is clicked, one more spectra is cut from the
  1305.  end until there are no more spectra to be cut.  (This is a useful way to
  1306.  cut spectra that didn't quite work out without starting over.)
  1307.  
  1308.  CombinePlots mode is very useful for many things including comparing the
  1309.  effect of different parameters (e.g. window type), or for comparing
  1310.  alternate sets of data representing the same original source (to get a
  1311.  feel for the variance caused by random fluctuations).  (When you are
  1312.  recording sample files for later analysis, remember to record two or more
  1313.  sample files so that you can compare them and see which spectral features
  1314.  are truly inherent in the source and not the result of random
  1315.  fluctuations.  If the variance is minimal, the spectral lines for each
  1316.  sample file should lay on top of one another, or nearly so.  Note that
  1317.  very large sample files (> 1,000,000 frames) may be necessary to reduce
  1318.  the variance of a pink noise source in the low frequency ranges to
  1319.  acceptable levels.)
  1320.  
  1321.  
  1322. ?Workbench Plot-Cut
  1323.  
  1324.  The workbench Plot-Cut button cuts the previous spectrum when in
  1325.  CombinePlots mode.
  1326.  
  1327.  To 'cut' only the last spectrum, click the Plot-Cut button once.  To cut
  1328.  several spectra from the plot combination, click Plot-Cut button several
  1329.  times.  Each time Plot-Cut is clicked, one more spectra is cut from the
  1330.  end until there are no more spectra to be cut.  (This is a useful way to
  1331.  cut spectra that didn't quite work out without starting over.)
  1332.  
  1333.  See help for the Plot-Combine button (immediately to the left) for further
  1334.  information about CombinePlots mode.
  1335.  
  1336.  
  1337. ?Workbench Overlap
  1338.  
  1339.  The Overlap button is a toggle button which engages or disengages overlap
  1340.  mode.
  1341.  
  1342.  Because it makes the best use of a limited amount of data, overlap mode is
  1343.  engaged by default.  It is also able to include all the data in the
  1344.  analysis, regardless of whether the number of frames is exactly 2n times a
  1345.  power of 2 (where n is a positive integer).  If you are more concerned
  1346.  with making the best use of processing time, and are not concerned about
  1347.  ignoring a trailing remainder of the data, you may wish to disengage
  1348.  overlap mode.
  1349.  
  1350.  In overlap mode, the windows applied to the data are overlapped.  By
  1351.  overlapping the windows (as compared with just laying them end-to-end to
  1352.  cover all frames present) better use is made of a fixed amount of data in
  1353.  reducing the variance of the computed spectrum.  This is true for all
  1354.  window shapes, but especially true for the non-rectangular ones.
  1355.  Overlapping may provide up to 9/11 of the variance reduction of having
  1356.  twice as much data to work with (see Press, et. al.).
  1357.  
  1358.  If overlap mode is disengaged, successive windows will still be applied to
  1359.  the input data (if the number of frames is 4 times or more greater than
  1360.  the number of bins) and the result from each window will be averaged to
  1361.  reduce the variance, but windows will not be overlapped.  Also, any
  1362.  partial window of data at the end will not be analyzed (unless pad mode is
  1363.  selected, which is strongly discouraged).
  1364.  
  1365.  Normally, windows are overlapped by half their length (i.e., the fixed
  1366.  overlap percentage for flat FFT analysis is 50%).  However, in overlap
  1367.  mode, the overlap of the last window is decreased or increased to
  1368.  encompass the remainder of the data.
  1369.  
  1370.  Given real (i.e. non-complex) sample data, 2 data points (frames) are
  1371.  required for each Bin.  Thus, 1024 bins would require 2048 frames.  With
  1372.  50% overlap, two overlapping windows would fit exactly into 3072 (2048 x
  1373.  1.5) frames, three overlapping windows would fit exactly into 4096 (2048 x
  1374.  2) frames, and four overlapping windows would fit exactly into 5120 (2048
  1375.  x 2.5) frames.  But GFFT varies the overlap of the last window to fit
  1376.  whatever amount of additional data is present after the last whole window
  1377.  of data has been read.  So, two windows are used for any number of frames
  1378.  F such that 2048 < F < 4096, three windows are used for F = 4096, four
  1379.  windows are used for 4096 < F < 6144, and so on, with the overlap of the
  1380.  last window somewhere between 0 and 100% (non-inclusive).
  1381.  
  1382.  Though this scheme will ensure that all frames are included in at least
  1383.  one segment, it may result in either over-representation or
  1384.  under-representation of the last region of data.  This is a fairly minor
  1385.  detail (especially considering that the FFT is really only intended for
  1386.  'continuous' sounds...) but if you are concerned with such things you may
  1387.  want to specify exactly the number of frames to be used using the Frames
  1388.  or StartFrame commands available in the CLI interface, and make sure you
  1389.  have chose<n an exact multiple (two or greater) of the bin size for an
  1390.  exact overlap fit.  For 3D-Time analysis, you should set the Time Segment
  1391.  Size instead (this is discussed further in by the special help button in
  1392.  the 3D-Time requester).
  1393.  
  1394.  
  1395. ?Workbench Pad
  1396.  
  1397.  [This button has been removed.  I saw no real need for it, and it was
  1398.   taking up critical screen real estate.]
  1399.  
  1400.  The Pad button is a toggle which engages or disengages 'Pad' mode.  In
  1401.  'Pad' mode, the last (or only) partial window of data will be padded with
  1402.  zeros prior to analysis.  Pad mode is disengaged by default, and its use
  1403.  is strongly discouraged.
  1404.  
  1405.  Though it may sound innocuous, zero padding can produce serious artifacts
  1406.  in a computed spectrum, and I strongly discourage it.  The default
  1407.  'Overlap' mode takes the best use of all the data without padding or
  1408.  truncation.  Even truncation, which might result if 'Overlap' mode is
  1409.  disengaged, is superior to padding for most purposes.  The only advantage
  1410.  of padding is that it permits the use of a larger maximum number of bins
  1411.  than the other techniques in some cases, but be forewarned that many of
  1412.  those bins will be filled with spurious garbage.
  1413.  
  1414.  See help for the Bins and Overlap buttons for further discussion.
  1415.  
  1416. ?Workbench Rectangle
  1417.  
  1418.  The Rectangle button selects windows of rectangular shape.  These windows
  1419.  will be applied to the data in segments whose size is determined by the
  1420.  number of bins.
  1421.  
  1422.  The Rectangle button is a 'radio' style button which disengages any other
  1423.  window shape button.  Likewise it is disengaged by the selection of any
  1424.  other window shape button.
  1425.  
  1426.  The 'Rectangle' window is the simplest window (effectively a series of
  1427.  1's) and the fastest to compute and apply (i.e. no computation or
  1428.  application is necessary).  It also results in the sharpest initial
  1429.  fall-off on either side of a spectral peak.  However, it is also the most
  1430.  susceptible to the presence of side-lobe artifacts.  If you wish to remove
  1431.  the influence of side-lobes, use a different window shape, such as 'B-H
  1432.  74dB.'
  1433.  
  1434.  Rectangle is currently the default window shape.
  1435.  
  1436.  
  1437. ?Workbench Triangle
  1438.  
  1439.  The Triangle button selects windows of triangular shape.  These windows
  1440.  will be applied to the data in segments whose size is determined by the
  1441.  number of bins.
  1442.  
  1443.  The Triangle button is a 'radio' style button which disengages any other
  1444.  selected window shape button.  Likewise it is disengaged by the selection
  1445.  of any other window shape button.
  1446.  
  1447.  The 'Triangle' window is the next simplest window, after the Rectangle
  1448.  window.  Its shape is that of a triangle peaking in the center of each
  1449.  data segment.  The 'Triangle' window is often called the 'Bartlett'
  1450.  window, after a scientist who found it to be useful.
  1451.  
  1452.  The triangle window is superior to the rectangle window in side-lobe
  1453.  rejection.  In turn, it is inferior to all other window shapes except
  1454.  rectangle in side-lobe rejection.
  1455.  
  1456.  
  1457. ?Workbench Parzen
  1458.  
  1459.  The Parzen button selects windows of a particular shape.  These windows
  1460.  will be applied to the data in segments whose size is determined by the
  1461.  number of bins.
  1462.  
  1463.  The Parzen button is a 'radio' style button which disengages any other
  1464.  selected window shape button.  Likewise it is disengaged by the selection
  1465.  of any other window shape button.
  1466.  
  1467.  The Parzen window is based on the formula presented by Press, et al, in
  1468.  their book 'Numerical Recipes.'  It is not the same as the "Parzen Window"
  1469.  identified by Harris.  It is superior to the triangle and rectangle
  1470.  windows in sidelobe rejection.
  1471.  
  1472.  
  1473. ?Workbench Welch
  1474.  
  1475.  The Welch button selects windows of particular shape.  These windows will
  1476.  be applied to the data in segments whose size is determined by the number
  1477.  of bins.
  1478.  
  1479.  The Welch button is a 'radio' style button which disengages any other
  1480.  selected window shape button.  Likewise it is disengaged by the selection
  1481.  of any other window shape button.
  1482.  
  1483.  The Welch window is based on the formula presented by Press, et al, in
  1484.  their book 'Numerical Recipes.'  It is superior to the triangle and
  1485.  rectangle windows in sidelobe rejection.
  1486.  
  1487.  
  1488. ?Workbench Hann
  1489.  
  1490.  The Hann button selects windows of a particular shape.  These windows will
  1491.  be applied to the data in segments whose size is determined by the number
  1492.  of bins.
  1493.  
  1494.  The Hann button is a 'radio' style button which disengages any other
  1495.  selected window shape button.  Likewise it is disengaged by the selection
  1496.  of any other window shape button.
  1497.  
  1498.  The 'Hann Window' is frequently mis-named as the 'Hanning Window.'
  1499.  Actually, Hann-ing (or Hann'd) is a kind of verb which attests to the
  1500.  popularity of this window in instrumentation.  It is superior to the
  1501.  preceding windows in sidelobe rejection.  The formula used here is from
  1502.  Harris.
  1503.  
  1504.  
  1505. ?Workbench Hamming
  1506.  
  1507.  The Hamming button selects windows of a particular shape.  These windows
  1508.  will be applied to the data in segments whose size is determined by the
  1509.  number of bins.
  1510.  
  1511.  The Hamming button is a 'radio' style button which disengages any other
  1512.  selected window shape button.  Likewise it is disengaged by the selection
  1513.  of any other window shape button.
  1514.  
  1515.  The Hamming window is superior to the preceding windows in sidelobe
  1516.  rejection.  The formula used here is from Harris.
  1517.  
  1518.  
  1519. ?Workbench 74dB-Blackman-Harris
  1520.  
  1521.  The B-H 74dB button selects windows of a particular shape.  These windows
  1522.  will be applied to the data in segments whose size is determined by the
  1523.  number of bins.
  1524.  
  1525.  The B-H 74dB button is a 'radio' style button which disengages any other
  1526.  selected window shape button.  Likewise it is disengaged by the selection
  1527.  of any other window shape button.
  1528.  
  1529.  The Blackman-Harris 74dB window is a nearly optimal window according to
  1530.  criteria developed by Harris.  It is superior to all the preceding
  1531.  windows in sidelobe rejection.  The '74dB' refers to a 74dB minimum
  1532.  sidelobe rejection.  GFFT also provides the Blackman-Harris 92dB window
  1533.  which has even greater sidelobe rejection, but also suffers considerably
  1534.  from a loss of selectivity (actually, "processing loss") compared with
  1535.  other window shapes.
  1536.  
  1537.  
  1538. ?Workbench 92dB-Blackman-Harris
  1539.  
  1540.  The B-H 92dB button selects windows of a particular shape.  These windows
  1541.  will be applied to the data in segments whose size is determined by the
  1542.  number of bins.
  1543.  
  1544.  The B-H 92dB button is a 'radio' style button which disengages any other
  1545.  selected window shape button.  Likewise it is disengaged by the selection
  1546.  of any other window shape button.
  1547.  
  1548.  The Blackman-Harris 92dB window has the highest sidelobe rejection of all
  1549.  windows studied by Harris.  In fact, the '92dB' refers to the impressive
  1550.  92dB sidelobe rejection, so any spectral feature you see is that much more
  1551.  likely to be a real spectral feature (provided data of sufficient quality
  1552.  and quantity).  Unfortunately, it also suffers considerably from a
  1553.  corresponding "processing loss" in comparison with other windows included
  1554.  in this program, so that many real features may be smeared and hidden.
  1555.  Ultimately, each window has its own unique set of compromises.
  1556.  
  1557.  
  1558. ?Workbench Spectrum-File
  1559.  
  1560.  The Spectrum File gadget shows the name of the current non-temporary
  1561.  spectrum file (if any), and allows you to enter a new one.  The spectrum
  1562.  file is an output file produced by GFFT which is read by GNUPLOT (if Plot
  1563.  mode is enabled) and is also human-readable.  It is not necessary to name
  1564.  spectrum files if Plot mode is enabled because GFFT will automatically
  1565.  create and manage temporary spectrum files for you.  But, if you want to
  1566.  save the spectrum file for later use, or give it a nice name (since the
  1567.  spectrum file name is used by GNUPLOT as a label), you should name it
  1568.  using this gadget or one of the following buttons.
  1569.  
  1570.  If you would like GFFT to make up a permanent spectrum file name for you,
  1571.  use the '*.fft' button.  (It will take the sample file name and tack on
  1572.  ".fft").
  1573.  
  1574.  You may enter a filename into the Spectrum File gadget using a file
  1575.  requester if you click the Spectrum File Select ('S') button.  When you
  1576.  use that button and select a file, Open mode will be activated
  1577.  automatically, but you may cancel Open mode and return to Write mode if
  1578.  you do so right away.  See help for the 'S' button for further details.
  1579.  
  1580.  The Spectrum-File-Open to the left activates 'Open' mode, which changes
  1581.  how the spectrum file will be used...
  1582.  
  1583.  By default, GFFT starts in 'Write' mode in which every spectrum file
  1584.  written by GFFT will be written from the beginning each time.  When a name
  1585.  is entered into the Spectrum File gadget, GFFT will look for an existing
  1586.  file of that same name, and back it up first (to a file with the same name
  1587.  and a trailing underscore), and then begin writing the file from the
  1588.  beginning (overwriting all previous data).  To warn you that this is
  1589.  occurring, GFFT will display a warning requester.  Note that GFFT only
  1590.  performs one level of backup, so the second time you overwrite a spectrum
  1591.  file, the original data will be lost.
  1592.  
  1593.  In Open mode, GFFT will not overwrite pre-existing data in the spectrum
  1594.  file, but may be used either to re-plot that data, or to append additional
  1595.  "bands" of spectral data to it.  See help for the 'Open' button for
  1596.  further details.
  1597.  
  1598.  New data will not actually be written to the spectrum file until you click
  1599.  either 'OK' or 'ReOutput.'
  1600.  
  1601.  If you had selected an explicitly named output file but wish to return to
  1602.  using temporary files managed by GFFT, click the Write-Cancel ('CAN')
  1603.  button.  This is also a quick way to delete an existing spectrum file
  1604.  name so you can start over.
  1605.  
  1606.  You may also select the pseudo-file 'con:' to write data to.  This will
  1607.  cause the spectral data to be written to a console window (in the same way
  1608.  that the Sample file 'con:' button causes data to be read from a console
  1609.  window...see the help for that button for some discussion of how the
  1610.  console window appears and/or may be hidden depending on how GFFT was
  1611.  started and what Workbench revision you are using).  If you select con: as
  1612.  the spectrum file, you must cancel plot mode, as GNUPLOT cannot plot data
  1613.  written to the console window.
  1614.  
  1615.  
  1616. ?Workbench Spectrum-File-Select
  1617.  
  1618.  The Spectrum-File-Select button (the 'S' following the Spectrum File
  1619.  gadget) brings up a file requester to let you select a spectrum file to
  1620.  open (or write).  This feature requires Workbench 2.0 or higher.  (If you
  1621.  do not have 2.0 or higher, you can enter the filename into the Spectrum
  1622.  File gadget.)
  1623.  
  1624.  When you select a file in this manner, 'Open' mode is automatically
  1625.  activated to prevent you from overwriting previous spectral data by
  1626.  mistake, in case you wanted to RePlot the file or append new data bands to
  1627.  it (see help for the Open button).  However, if you really DID want to
  1628.  overwrite the spectrum file from the beginning, you may then click on the
  1629.  Open button to disengage Open mode immediately after selecting the file.
  1630.  You must make this change before clicking on any other button, or GFFT
  1631.  will cancel the spectrum file selection rather than allowing you to
  1632.  overwrite a spectrum file that was 'Opened.'
  1633.  
  1634.  
  1635. ?Workbench Spectrum-File-Open
  1636.  
  1637.  The Spectrum File 'Open' button is a toggle button which activates
  1638.  spectrum file 'Open' mode, or switches back to the default 'Write' mode.
  1639.  
  1640.  After Open mode has been activated, any spectrum file selected is opened
  1641.  at the end of existing data in the file, NOT overwritten from the
  1642.  beginning (as would be the case in Write mode).  This is useful either if
  1643.  you want to RePlot previously stored spectrum files, or append data to a
  1644.  spectrum file in bands.  These two possibilities are discussed separately
  1645.  below.  In either case, you should activate Open mode BEFORE selecting the
  1646.  file, or previous data will get truncated (i.e. clobbered).  (Actually,
  1647.  GFFT will save the previous file to a backup file, but there is only one
  1648.  level of backup, and you shouldn't depend on this.)  When you use the
  1649.  Spectrum File Select ('S') button, Open mode is automatically activated.
  1650.  
  1651.  If the spectrum file does not already exist when opened, a new blank one
  1652.  is created, just as in Write mode.  You may not Open 'con:'
  1653.  
  1654.  
  1655.  Open for RePlot
  1656.  ----------------
  1657.  
  1658.  To RePlot previously stored spectrum files, you first click the Open
  1659.  button, then select or enter a spectrum file name into the Spectrum File
  1660.  gadget.
  1661.  
  1662.  (If you select a file by using the requester which comes up when you press
  1663.  the 'S' button, 'Open' will automatically be activated, to prevent you
  1664.  from accidentally overwriting a previously stored spectrum.)
  1665.  
  1666.  Then, to replot the spectrum, simply click on the RePlot button.  Do NOT
  1667.  click OK or ReOutput, as those may write additional spectral data to the
  1668.  opened file (as described in the following section).
  1669.  
  1670.  When replotting a previously stored spectrum, you may adjust any of the
  1671.  parameters allowed before using the RePlot button.  For further
  1672.  discussion, see the help message for the RePlot button.
  1673.  
  1674.  You may also use the CombinePlots ('&') and CutCombinedPlot ('X')
  1675.  functions when opening previously stored spectrum files to plot several
  1676.  spectra on the same screen or page.  For example:
  1677.  
  1678.  Click on CombinePlots ('&')
  1679.  Select piano-rect.fft               (Open mode is automatically engaged)
  1680.  Click on RePlot                     (piano-rect.fft is plotted)
  1681.  Press Return                        (Plot screen is removed)
  1682.  Select piano-hann.fft
  1683.  Click on RePlot                     (both .fft's are plotted on the screen)
  1684.  Press Return
  1685.  Select piano-74db.fft
  1686.  Click on RePlot                     (all 3 .fft's are plotted)
  1687.  
  1688.  Now, suppose you wanted to remove piano-74db.fft from the multiple plot
  1689.  display and add piano-92db.fft.  You would continue as follows:
  1690.  
  1691.  Click on CutCombinedPlot ('X')
  1692.  Select piano-92db.fft                (piano-rect.fft, piano-hann.fft and
  1693.                                        piano-92db.fft are plotted)
  1694.  
  1695.  CutCombinedPlot works in the above example as shown (removing
  1696.  piano-74db.fft from the multiple plot display), but doesn't generally work
  1697.  with RePlot in other contexts, such as if you are simply changing plot
  1698.  parameters in between each RePlot using the same spectrum file.  A
  1699.  spectrum file must have a unique name in order to be "cut."  (GFFT
  1700.  will automatically give TEMPORARY files unique names in CombinePlots
  1701.  mode, but that would not apply in this example in which we are replotting
  1702.  previously stored files.)
  1703.  
  1704.  In fact, Open, CombinePlots, RePlot, and/or CutCombinedPlot can sometimes
  1705.  have unexpected consequences when used together.  You should not have any
  1706.  trouble, however, if you follow the underlying model of the example shown
  1707.  here.
  1708.  
  1709.  
  1710.  Open for Appending 'bands'
  1711.  --------------------------
  1712.  
  1713.  Once a particular file has been Opened, each subsequent OK will append
  1714.  additional data to the same file (until another file is Opened or the GFFT
  1715.  session is ended).  Data may not be written to a file while a plot is
  1716.  being performed or displayed, however.
  1717.  
  1718.  This is particularly useful if you are composing a file of spectral data
  1719.  in several frequency "bands."  You may be using data sampled by different
  1720.  methods in separate sample files, or simply analyzed with different
  1721.  numbers of bins or smoothing points depending on the frequency range.  The
  1722.  best way to show this is with a batch mode example, but the same
  1723.  operations could be performed through the dialog window.  (Note:
  1724.  the 'read' command is the counterpart of entering a name into the
  1725.  Sample File gadget.  Here, there is a sample file named 'white.iff')
  1726.  
  1727.      gfft read white.iff write white.fft bins 8192 lowf 0 highf 200 psd
  1728.      gfft read white.iff open white.fft bins 2048 lowf 200 highf 400 psd
  1729.      gfft read white.iff open white.fft bins 1024 lowf 400 highf 800 psd
  1730.      gfft read white.iff open white.fft bins 512 lowf 800 highf 1600 psd
  1731.      gfft read white.iff open white.fft bins 256 lowf 1600 highf 3200 psd
  1732.      gfft read white.iff open white.fft bins 128 lowf 3200 highf 6400 psd
  1733.      gfft read white.iff open white.fft bins 64 lowf 6400 psd
  1734.  
  1735.  (Actually, you wouldn't need to do all this if you merely wanted to have
  1736.  the same number of spectral data points per octave. An easier way to
  1737.  accomplish that would be by using a large number of bins (e.g. 8192) and a
  1738.  smaller number of smoothing points (e.g.  200), with LogX selected.)
  1739.  
  1740.  
  1741. ?Workbench Spectrum-File-Cancel
  1742.  
  1743.  The Spectrum File Cancel button cancels the explicit filename you have
  1744.  entered into the Spectrum File Gadget.  This will cause GFFT to use
  1745.  temporary files for the spectral data written by GFFT to be read by
  1746.  GNUPLOT, which is the default before any explicit filename has been
  1747.  entered.  You may also use this button to "clear" out the old spectrum
  1748.  file name before entering a new one.
  1749.  
  1750.  
  1751. ?Workbench *.fft
  1752.  
  1753.  The '*.fft' button will let GFFT make up a spectrum file name by tacking a
  1754.  '.fft' extension on to the end of the sample file name.  
  1755.  
  1756.  In CLI mode, it is easy to make up such a name using command replay, so
  1757.  this button was created to make explicit file naming just as easy (or
  1758.  actually, easier) in Workbench Mode (so you don't have to copy the whole
  1759.  Sample File name over into the Spectrum File gadget by hand).
  1760.  
  1761.  This button will not do anything useful if you are reading from con:.
  1762.  
  1763.  
  1764. ?Workbench ReOutput
  1765.  
  1766.  The ReOutput button allows you to rewrite the results of the preceding
  1767.  analysis subject to a number of changed parameters.  The FFT analysis
  1768.  itself will not be repeated, only the output processing, writing, and
  1769.  plotting (if applicable).  This is useful for making minor changes after a
  1770.  long analysis without repeating the analysis itself.
  1771.  
  1772.  Here are the parameters which may be changed before a ReOutput:
  1773.  
  1774.         Spectrum File
  1775.         Plot (on or off)
  1776.         Smoothing Segments and Squared Smoothing
  1777.         High Frequency
  1778.         Low Frequency
  1779.         Mean
  1780.         Power
  1781.         Amplitude
  1782.         dB
  1783.         LogX
  1784.         LogY
  1785.         Multiply (CLI only)
  1786.         Sampling Rate
  1787.         Pink
  1788.         Quantization
  1789.         LowY  (see CAL requester)
  1790.         HighY (see CAL requester)
  1791.  
  1792.  Here are just a few parameters which may NOT be changed between OK and
  1793.  ReOutput:
  1794.  
  1795.         Sample File
  1796.         Bins
  1797.         Overlap
  1798.         Window Shape (Rectangle, etc.)
  1799.         Any 3D parameters...in fact, ReOutput is not at all possible with 3D
  1800.         (Pad...from CLI)
  1801.  
  1802.  [Currently, if you change these parameters and ReOutput, you will not get
  1803.  any sort of warning that the changed values have no effect.  They just
  1804.  will not have any effect.]
  1805.  
  1806.  There is also a RePlot button which has generally more limited
  1807.  capabilities, but does allow changing the 3D parameters.
  1808.         
  1809.  
  1810. ?Workbench RePlot
  1811.  
  1812.  The Workbench RePlot button allows you to RePlot the previous analysis or
  1813.  previously stored spectrum file with a few changed parameters.  The
  1814.  spectrum analysis itself, including the output phase, will not be
  1815.  repeated.  Instead, GNUPLOT will simply be launched with with new
  1816.  parameters on the currently named (or temporary) spectrum file.
  1817.  
  1818.  RePlot may be used in conjunction with Open mode to RePlot previously
  1819.  stored spectral data files.  See help for the Open button for further
  1820.  details.
  1821.  
  1822.  Here are the parameters which may be changed before doing a RePlot:
  1823.  
  1824.         Plot (if previously off)
  1825.         LogX (with no smoothing!  LogX w/smoothing requires a ReOutput)
  1826.         LogY
  1827.         RotX
  1828.         RotZ
  1829.         LowFrequency (*see note below)
  1830.         HighFrequency (*see note below)
  1831.         LowY
  1832.         HighY
  1833.  
  1834.  [Currently, if you change any other parameters and RePlot, you will not
  1835.  get any sort of warning that the changed values will have no effect.]
  1836.  
  1837.  (ReOutput permits the modification of many more parameters than RePlot,
  1838.  though it does not permit the repetition of a 3D analysis.  Like RePlot,
  1839.  ReOutput will also produce a new plot if Plot mode is on.)
  1840.  
  1841.  *Note that RePlot does not effect the LowFrequency and HighFrequency in
  1842.  exactly the same way as OK or ReOutput.  OK and ReOutput 'filter' the data
  1843.  written to the output data file so that no data outside the range
  1844.  established by LowFrequency and HighFrequency is written.  RePlot cannot
  1845.  filter the data which has already been written, but instead sends
  1846.  explicit 'set xrange' commands to GNUPLOT.  If you wanted a plot with
  1847.  artificially large left and right 'margins,' you could first do OK (with
  1848.  the desired actual data range set or defaulted), then do a RePlot with
  1849.  LowFrequency and HighFrequency values set outside the range of actual data
  1850.  to the point(s) where you would like the margins to be.  Thus, this
  1851.  difference in the way LowFrequency and HighFrequency are used in RePlot
  1852.  mode is actually a 'feature' which you can take advantage of to change
  1853.  the presentation of a plot.
  1854.  
  1855.  
  1856. ?Workbench Pink
  1857.  
  1858.   * Warning!  The results of this feature may not be entirely 'correct.' *
  1859.  
  1860.  The Pink button engages pink mode, in which a particular sort of
  1861.  frequency-dependent normalization is performed on the spectral output so
  1862.  that pink noise will be shown as having nearly 'flat' response.  The Pink
  1863.  button is a toggle button which may be clicked on or off.
  1864.  
  1865.  (Pink noise is random noise shaped so that there is an equal amount of
  1866.  energy or amplitude in each octave or fractional-octave band.  It is
  1867.  frequently used in acoustic testing.)
  1868.  
  1869.  Pink mode simply weights each output value by a corrective factor; it does
  1870.  not do any grouping and/or averaging (so no resolution is lost).  The
  1871.  current formula does not seem entirely accurate at the lowest frequencies,
  1872.  where the results may vary depending on how many bins are being used.
  1873.  This makes it difficult (or impossible) to splice several curves of pink
  1874.  noise with different numbers of bins together.  In any case, the sum of
  1875.  the squared output values will no longer reflect the sum of the squared
  1876.  input values, in fact, the scale may be offset considerably.  You may
  1877.  choose to use the 'Multiply' command (available in CLI mode; see help for
  1878.  the CLI button) to rescale the results conveniently.
  1879.  
  1880.  (You may also wish to do Smoothing with LogX set when plotting pink noise,
  1881.  and use extremely large sample files with 1,000,000 frames or more to
  1882.  allow for the randomness in pink noise to average out.)
  1883.  
  1884.  
  1885. ?Workbench LogX
  1886.  
  1887.  The LogX button is a toggle button which selects whether the X axis will
  1888.  be scaled logarithmically by GNUPLOT during plotting.  
  1889.  
  1890.  LogX has no effect on the spectral data output by GFFT itself, except that
  1891.  when both Smoothing and LogX are engaged a logarithmic mesh will be used
  1892.  during the smoothing phase.
  1893.  
  1894.  
  1895. ?Workbench LogY
  1896.  
  1897.  The LogY toggle button selects whether the vertical axis will be scaled
  1898.  logarithmically by GNUPLOT during plotting.  It has no effect on the
  1899.  spectral data output by GFFT itself.
  1900.  
  1901.  If a dB conversion is selected with the dB toggle button, LogY is probably
  1902.  not desireable (as this would mean plotting logarithms on a logarithmic
  1903.  scale).
  1904.  
  1905.  LogY is intended to make the vertical axis (representing amplitude or
  1906.  power) logarithmic.  In 3D mode, it is actually the Z axis that is
  1907.  vertical and that represents amplitude or power, so in that mode LogY
  1908.  actually scales the Z axis logarithmically.
  1909.  
  1910.  
  1911. ?Workbench dB
  1912.  
  1913.  The dB toggle button selects whether GFFT will write output amplitude or
  1914.  power values converted to the dB scale.
  1915.  
  1916.  If a dB is selected, LogY is probably not desireable (because then you
  1917.  would be plotting logarithms on a logarithmic scale).
  1918.  
  1919.  
  1920. ?Workbench Power
  1921. ?Workbench Amplitude
  1922.  
  1923.  The Power and Amplitude button are mutually exclusive toggle buttons.
  1924.  Selecting one automatically de-selects the other.  They determine whether
  1925.  GFFT will output Amplitude or "Power" (squared amplitude) values.  By
  1926.  default, GFFT will output Amplitude values.
  1927.  
  1928.  
  1929. ?Workbench Next
  1930.  
  1931.  The Next button will advance to the next sample file selected from the
  1932.  Workbench by extended selection.  If GFFT was invoked without selecting
  1933.  any files by extended selection, or if only one sample file was selected
  1934.  by extended selection, the Next button will be ghosted.
  1935.  
  1936.  
  1937. ?Workbench CLI
  1938.  
  1939.  The CLI button will continue the current session of GFFT from the CLI
  1940.  interface, and will remove the GFFT Dialog Window.  From the CLI
  1941.  interface, you may then return to the GFFT Dialog Window by giving the
  1942.  'Workbench' command.
  1943.  
  1944.  If you started GFFT from the workbench by clicking on its icon, clicking
  1945.  the CLI button will cause a new console window to be created below where
  1946.  the GFFT Dialog Window was for you to work in.  (Under AmigaDOS 1.3, this
  1947.  console window is always there whether you need it or not.)
  1948.  
  1949.  If you started the GFFT dialog from the CLI by giving the 'Workbench'
  1950.  command, control will return to the console from which GFFT was started.
  1951.  
  1952.  Using the WORKBENCH command and the CLI button, you can switch back and
  1953.  forth between WORKBENCH and CLI interfaces.  This might be useful if there
  1954.  are a few commands having no corresponding gadgets in the GFFT Dialog
  1955.  Window which are needed in your application, such as 'Frames' or
  1956.  'StartByte.'  You may also put CLI commands in your .gfft startup file.
  1957.  
  1958.  
  1959. ?Workbench-Message-Display
  1960.  
  1961.  The Message indicator shows an informational message concerning your GFFT
  1962.  session.  Usually, this gives an indication of what sort of user action is
  1963.  expected or required next.  Sometimes, it lets you know of some decision
  1964.  that has been made for you (such as selecting the exact number of bins if
  1965.  you entered a number which was not a power of 2), or how much time the
  1966.  internal FFT loop required.  (Note that the internal FFT loop DOES include
  1967.  some file reading, but not the output file writing, which is handled after
  1968.  the internal FFT loop.  Also, the FFT loop may be repeated many times for
  1969.  a 3D-Time analysis.)
  1970.  
  1971.  If the message 'Performing FFT analysis...' is displayed, the analysis is
  1972.  being performed.  This could take some time.  Additional time may also be
  1973.  required after the FFT loop elapsed time indication appears (to write the
  1974.  output file and invoke GNUPLOT).  Meanwhile, do not attempt to operate on
  1975.  any other gadgets in the GFFT Dialog Window.
  1976.  
  1977.  
  1978. ?Cli-Commands
  1979. ?Syntax
  1980.  
  1981.  The CLI commands for GFFT are either entered all in one line (for
  1982.  batch mode) or one for each prompted line (for interactive mode).
  1983.  
  1984.  The GFFT commands are not case sensitive.  They may each be abbreviated
  1985.  to the shortest unambiguous string.
  1986.  
  1987.  You may enclose filenames in either single or double quotation marks.
  1988.  This may help gfft distinguish it from the command itself.  Though no
  1989.  ambiguity could (currently) arise in CLI Interactive mode since only one
  1990.  command is permitted per line, there might otherwise be an ambiguity in
  1991.  CLI Batch mode.
  1992.  
  1993.  Most commands actually set some parameter for later use.  The OK or GO
  1994.  commands actually initiate a spectrum analysis.  That is when all
  1995.  previously specified settings are actually used (and incompatibilities
  1996.  might be detected).
  1997.  
  1998.  In the syntax descriptions for some commands, square brackets like [this]
  1999.  enclose optional arguments, and angle brackets like <this> enclose
  2000.  arguments generally, while the un-enclosed words are the command(s)
  2001.  themselves.
  2002.  
  2003.  
  2004. ??
  2005. ?help
  2006.  
  2007.  The HELP and ? commands display a list of commands available in GFFT,
  2008.  along with some hints and other helpful information.  If an argument is
  2009.  specified, help for that keyword or command is displayed.
  2010.  
  2011.  Syntax:
  2012.  
  2013.      ?
  2014.      help
  2015.      help <command or keyword>
  2016.  
  2017.  
  2018. ?About
  2019.  
  2020.  The About command displays information about the author of GFFT and how
  2021.  you can support its future development.
  2022.  
  2023.  
  2024. ?Amplitude
  2025. ?Power
  2026.  
  2027.  The Amplitude and Power commands are mutually exclusive.  Selecting one
  2028.  automatically cancels the other.  They determine whether GFFT will output
  2029.  Amplitude or "Power" (squared amplitude) values.  By default, GFFT will
  2030.  output Amplitude values.
  2031.  
  2032.  
  2033. ?Append
  2034. ?Open
  2035.  
  2036.  The Open and Append commands are identical (in this release, anyway).
  2037.  
  2038.  Syntax:
  2039.  
  2040.      append [<filename>]
  2041.      open [<filename>]
  2042.  
  2043.  The Open command is similar to the Write command (see) in that it will
  2044.  open a spectrum file which may be read or plotted by GNUPLOT.  However,
  2045.  the Open command will cause any data written to this file to be appended
  2046.  to the end of existing data, if any, while the Write command would cause
  2047.  the file to be rewritten from the beginning.  If the named file does not
  2048.  already exist, the Open command will create one (just as the Write command
  2049.  does).
  2050.  
  2051.  Open may also be used to open a previously stored spectrum file so that it
  2052.  may be plotted with the RePlot command.  Once a file has been opened, it
  2053.  may be plotted with RePlot, and parameters such as HighFrequency,
  2054.  LowFrequency, LogX, and LogY may be adjusted.  If you are using Open in
  2055.  this way, be sure NOT to give the OK or ReOutput commands, or else GFFT
  2056.  may write more data at the end of the opened file.  See help for the
  2057.  RePlot command for a discussion of which parameters may be adjusted.
  2058.  
  2059.  The Open command is normally given with one argument: the filename (which
  2060.  may include device and/or absolute or relative directory specifiers).  If
  2061.  the Open command is given without any arguments, GFFT will make a
  2062.  temporary file to plot from (assuming plot mode is enabled).  At the end
  2063.  of the GFFT session, this temporary file will be deleted (if the plot is
  2064.  no longer being displayed).
  2065.  
  2066.  Once a particular file has been opened with Open, each subsequent OK
  2067.  command will append additional data to the same file (until another Open
  2068.  or WRITE command is given, or the GFFT session is ended).  Note that data
  2069.  may not be written to a file while a plot is being performed or displayed,
  2070.  however.
  2071.  
  2072.  Open is particularly useful if you are composing a file of spectral data
  2073.  in several frequency "bands."  You may be using data sampled by different
  2074.  methods, or analyzed with different numbers of bins or smoothing points
  2075.  depending on the frequency range.
  2076.  
  2077.  Example:
  2078.  
  2079.      gfft read white write white.fft bins 8192 lowf 0 highf 200 psd
  2080.      gfft read white open white.fft bins 2048 lowf 200 highf 400 psd
  2081.      gfft read white open white.fft bins 1024 lowf 400 highf 800 psd
  2082.      gfft read white open white.fft bins 512 lowf 800 highf 1600 psd
  2083.      gfft read white open white.fft bins 256 lowf 1600 highf 3200 psd
  2084.      gfft read white open white.fft bins 128 lowf 3200 highf 6400 psd
  2085.      gfft read white open white.fft bins 64 lowf 6400 psd
  2086.  
  2087.  (Actually, you wouldn't need to do all this if you merely wanted to have
  2088.  the same number of spectral data points per octave. An easier way to
  2089.  accomplish that would be by using a large number of bins (e.g. 8192) and a
  2090.  smaller number of smoothing points (e.g.  200), with LogX selected.)
  2091.  
  2092.  If you want to comparatively plot several different spectra during the
  2093.  plotting phase, use the CombinePlots command instead of the Open command,
  2094.  or, in addition to it if you are replotting previously stored spectrum
  2095.  files (see below).  CombinePlots will cause each different spectrum to be
  2096.  plotted with a different color (or linetype) with a legend identifying
  2097.  each one.
  2098.  
  2099.  While you are using Open to open previously written spectral data files
  2100.  and RePlot to plot them, you may also use CombinePlots to overlay each of
  2101.  these spectra into one plot.
  2102.  
  2103.  Example:
  2104.  
  2105.      sys> gfft
  2106.  
  2107.      gfft> combineplots
  2108.      gfft> open piano.fft.rect
  2109.      gfft> RePlot
  2110.      gfft> open piano.fft.hann
  2111.      gfft> RePlot                 ;plots both ...rect and ...hann
  2112.      gfft> open piano.fft.74dB
  2113.      gfft> RePlot                 ;plots ...rect, ...hann, and ...74db
  2114.      gfft> CutCombinedPlot
  2115.      gfft> open piano.fft.92dB
  2116.      gfft> RePlot                 ;plots ...rect, ...hann, and ...92db
  2117.  
  2118.  CutCombinedPlot works in the above example as shown (replacing
  2119.  piano.fft.74db with piano.fft.92db with an Open command), but doesn't
  2120.  generally work with RePlot if you are only changing parameters (it works
  2121.  best if you are changing the actual filename), nor does CombinePlots work
  2122.  with Open and RePlot if you are only changing parameters (and not adding
  2123.  files with different names) between each RePlot.  The example shown here
  2124.  works, but Open, CombinePlots, RePlot, and/or CutCombinedPlot can
  2125.  sometimes have unexpected consequences when used together.  You should not
  2126.  have any trouble, however, if you follow the model of the example shown
  2127.  here.
  2128.  
  2129.  You may not Open 'con:'
  2130.  
  2131.  
  2132. ?Banner
  2133.  
  2134.  The Banner command displays the GFFT banner, which normally comes up when
  2135.  you start GFFT in CLI-interactive mode.  (This might be useful if you are
  2136.  running GFFT in batch mode but nevertheless want to have the GFFT banner
  2137.  displayed.)
  2138.  
  2139.  
  2140. ?Bins
  2141.  
  2142.  The Bins command lets you choose or default the number of bins to be used.
  2143.  It is followed by an (optional) integer argument.  By default, GFFT
  2144.  chooses the maximum number of bins which could be put to use (considering
  2145.  the number of sample frames, and the current Overlap, Pad, Interleave and
  2146.  other settings).  If you have a large sample file, or wish to reduce the
  2147.  spectral variance by averaging successive frame segments, you should
  2148.  choose a smaller number of bins than the maximum.
  2149.  
  2150.  1024 is a typical number of bins, though I usually use more.  You should
  2151.  enter a value which is a power of 2.  If you do not, however, GFFT will
  2152.  choose the next power of two for you and indicate the actual value chosen.
  2153.  
  2154.  Once set explicitly, the same number of bins will be used for the present
  2155.  and all future sample files read in the same GFFT session.
  2156.  
  2157.  If you enter the Bins command with no argument, the default (maximum) bins
  2158.  mode will be re-engaged.  In the default mode, you will be alerted as to
  2159.  the actual number of bins used after the OK command is given for each file
  2160.  analyzed.
  2161.  
  2162.  By default, GFFT attempts to make use of all data present either by using
  2163.  the largest number of bins and/or by by averaging the data segments (whose
  2164.  length is 2*N where N is the number of bins) present to reduce the
  2165.  spectral variance.  If you wish GFFT to limit analysis to a smaller number
  2166.  of data points within you file, you may use the Frames and/or StartFrames
  2167.  commands.
  2168.  
  2169.  By default, GFFT will also use Overlap to provide even more data segments,
  2170.  resulting in a further reduction of variance.  (See the Overlap command
  2171.  for further information.)  Overlap may be disengaged with the NoOverlap
  2172.  command.
  2173.  
  2174.  
  2175. ?Bits
  2176.  
  2177.  The Bits command lets you set the number of bits used in the
  2178.  representation of each input datum in an unformatted input sample file.
  2179.  Normally, the number is either 8 or 16, but you may specify any number
  2180.  between 1-16 inclusive.  (The handling of numbers other than 8 and 16 is
  2181.  as specified for the AIFF format--i.e., the least significant bits are
  2182.  ignored first.)
  2183.  
  2184.  Syntax:
  2185.  
  2186.      Bits <number of bits: integer 1-16>
  2187.  
  2188.  Note that the argument for this command is mandatory.
  2189.  
  2190.  If a Bits command is given BEFORE the header of a formatted sample file is
  2191.  read with a READ command, the number of bits specified in the sample file
  2192.  header will supercede the number specified in the Bits command.  If the
  2193.  Bits command is given AFTER the READ command, the number in the Bits
  2194.  command will supercede the number specified in the sample file header.
  2195.  
  2196.  The default for unformatted sample files is 8 bit.
  2197.  
  2198.  
  2199. ?74dB-Blackman-Harris
  2200.  
  2201.  The 74db-Blackman-Harris command selects windows of a particular shape.
  2202.  These windows will be applied to the sample data in segments whose size is
  2203.  determined by the number of bins.  This command cancels the effect of any
  2204.  preceding window shape command.
  2205.  
  2206.  The Blackman-Harris 74dB window is a nearly optimal window according to
  2207.  criteria developed by Harris.  It is superior to most other windows in
  2208.  sidelobe rejection.  The '74dB' refers to a 74dB minimum sidelobe
  2209.  rejection.  GFFT also provides the 92dB-Blackman-Harris window which has
  2210.  even greater sidelobe rejection, but also suffers considerably from a loss
  2211.  of selectivity (or, more precisely, 'processing loss.')
  2212.  
  2213.  
  2214. ?92dB-Blackman-Harris
  2215.  
  2216.  The 92db-Blackman-Harris command selects windows of a particular shape.
  2217.  These windows will be applied to the sample data in segments whose size is
  2218.  determined by the number of bins.  This command cancels the effect of any
  2219.  preceding window shape command.
  2220.  
  2221.  The Blackman-Harris 92dB window has the highest sidelobe rejection of all
  2222.  windows studied by Harris.  In fact, the '92dB' refers to the impressive
  2223.  92dB sidelobe rejection, so any spectral feature you see is that much more
  2224.  likely to be a real spectral feature (provided data of sufficient quality
  2225.  and quantity).  Unfortunately, it also suffers considerably from a
  2226.  corresponding "processing loss" in comparison with other windows included
  2227.  in this program, so that many real features may be smeared and hidden.
  2228.  Ultimately, each window has its own unique set of compromises.
  2229.  
  2230. ?Calibration
  2231. ?DbCalibration
  2232. ?NoCalibration
  2233.  
  2234.  Syntax:
  2235.  
  2236.  Calibration <Calibration File Name>
  2237.  DbCalibration <Calibration File Name>
  2238.  NoCalibration
  2239.  
  2240.  The Calibration command enables you to apply a 'calibration' to the output
  2241.  of GFFT.  In this way, you can compensate for the frequency response of
  2242.  your sampler, microphone, noise source, etc.  Any number of calibrations
  2243.  may be in effect at the same time.  Each time the Calibration (or
  2244.  DbCalibration) command is given, a new calibration is linked into the
  2245.  existing list of calibrations.  The NoCalibration command cancels the
  2246.  entire list of calibrations.  The DbCalibration command allows you to use
  2247.  a file in which the amplitudes are in dB (logarithmic) form.  Calibrations
  2248.  and DbCalibrations may be applied to spectrums in any combination
  2249.  regardless of whether the final output is in dB form or not.
  2250.  
  2251.  The calibration file(s) should be in the same format as the output files
  2252.  produced by GFFT itself.  Each line (terminated by newline) should have a
  2253.  frequency value, any number of spaces, and an amplitude value (NOT a
  2254.  'power' or squared amplitude value!).  The frequencies must be in
  2255.  increasing order, and the range of frequencies must be equal to or greater
  2256.  than that to be output by GFFT (see warning below).  Lines beginning with
  2257.  one of the following characters are considered to be comments:
  2258.  
  2259.      # ; !
  2260.  
  2261.  If a spectrum is calibrated by itself, the result should be a straight
  2262.  line at either 1.0 or 0.0 (for dB output).  Actually, due to slight
  2263.  rounding errors, the actual result will be close to, but not exactly these
  2264.  ideal values (e.g. 0.9999998).  Given that Gnuplot will always scale the Y
  2265.  axis to the maximum magnification, these small differences may be
  2266.  disconcerting.  To minimize this effect, consider setting the LowY and/or
  2267.  HighY values to fix the vertical range.  You may also use the Quantization
  2268.  command to apply a quantization to the output (but, that may cause other
  2269.  problems).
  2270.  
  2271.  Calibration as used here is unrelated to true complex 'correlation,' which
  2272.  is not currently available in GFFT.  Calibration has somewhat limited
  2273.  accuracy and validity, but is still probably a feature worth having for
  2274.  its usefulness.  Note that in between points specified in a calibration
  2275.  file, simple linear interpolation may be used.  If a frequency higher than
  2276.  the highest calibration frequency is output by GFFT, it will be calibrated
  2277.  by the value for the highest calibration frequency, and likewise for any
  2278.  frequency lower than the lowest calibration frequency.  In other words,
  2279.  GFFT extends the last calibration value rather than extrapolating.
  2280.  (WARNING!  This could be dangerous if interpreted improperly!  Remember to
  2281.  provide calibrations over a range equal to or greater than the range to be
  2282.  output by GFFT.)  GFFT does not truncate to the calibration range because
  2283.  rounding errors may cause premature truncation.
  2284.  
  2285.  One way to use the Calibration command is to perform a GFFT analysis on
  2286.  your signal source itself, and then apply that result as a 'calibration'
  2287.  to your test measurements.  Another way is to write frequency response
  2288.  data provided by a calibration laboratory into a suitable calibration
  2289.  file.  (Many microphones, for example, are provided with calibration
  2290.  curves that could be used for this purpose.)
  2291.  
  2292.  
  2293. ?Channel
  2294.  
  2295.  The Channel command selects a particular channel for a file in a format
  2296.  (e.g. AIFF) which supports multiple channels.  The desired channel number
  2297.  is entered as a digit.  If the Channel command is given with no arguments,
  2298.  the default (1) channel (which is valid for all files, whether they have
  2299.  channels or not) is selected.  You must select a valid channel number
  2300.  before giving the OK command or no analysis will be performed.
  2301.  
  2302.  
  2303. ?CombinePlots
  2304. ?NoCombinePlots
  2305. ?CutCombinedPlot
  2306.  
  2307.  The CombinePlots command activates CombinePlots mode.  In this mode,
  2308.  successive spectra (i.e. 'plots') are overlaid on top of one another.
  2309.  Each spectrum is plotted with a different color (or linetype, if plotting
  2310.  on a black and white printer) by GNUPLOT.  The x and y axis are
  2311.  automatically scaled so as to include the largest x and y values of any
  2312.  spectrum included, unless you have opted to fix the HighY and LowY values.
  2313.  
  2314.  When the first CombinePlots command is given, the previously completed
  2315.  spectrum (if any) is used as the first data set for the plotter, the next
  2316.  completed spectrum becomes the second data set, and so on.
  2317.  
  2318.  If a subsequent CombinePlots command is given when already in CombinePlots
  2319.  mode, it is ignored.
  2320.  
  2321.  To disable CombinePlots mode, enter the NoCombinePlots command.  All
  2322.  previously combined plots are 'cut' off, so that if another CombinePlots
  2323.  command is given immediately, a new plot combination starts from scratch.
  2324.  
  2325.  To 'cut' only the last plot, give the CutCombinedPlot command.  To cut
  2326.  several plots from the plot combination, enter CutCombinedPlot several
  2327.  times.  Each time CutCombinedPlot is entered, one more plot is cut from
  2328.  the end until there are no more plots to be cut.  This is a useful way to
  2329.  cut plots that didn't quite work out without starting over.
  2330.  
  2331.  (CutCombinedPlot used in conjunction with RePlot can have unexpected
  2332.  consequences.  See help for the Open command for a working example; many
  2333.  other combinations of these commands won't work as might be intended.)
  2334.  
  2335.  Combine plots mode is very useful for comparing the effect of different
  2336.  parameters (e.g. window type), or for comparing alternate sets of data
  2337.  representing the same source (e.g. to get a feel for the variance due to
  2338.  sampling size limitations--this is extremely useful for seeing which
  2339.  spectral features are truly inherent in the source and not the result
  2340.  of an inadequately large sample file.  Note that very large sample files
  2341.  (e.g. > 1,000,000 frames) may be necessary to reduce the variance of
  2342.  a pink noise source in the low frequency ranges.)
  2343.  
  2344.  Example:
  2345.  
  2346.      gfft>read pink1.iff
  2347.      gfft>bins 4096
  2348.      gfft>logx 
  2349.      gfft>db
  2350.      gfft>smoothingsegments 300
  2351.      gfft>pink
  2352.      gfft>ok
  2353.      gfft>combineplots
  2354.      gfft>read pink2.iff
  2355.      gfft>ok
  2356.  
  2357.  In this example, pink1.iff and pink2.iff are two samples of pink noise.
  2358.  If they are both large enough, their spectral lines will be overlaid
  2359.  nearly on top of one another.  In any case, the extent of their divergence
  2360.  will give an approximate feel for the variance.
  2361.  
  2362.  
  2363. ?Copying
  2364.  
  2365.  The Copying command will display the GNU General Public License under
  2366.  which this program is being distributed.  This specifies your rights to
  2367.  have the source code and to give out copies of this program.
  2368.  
  2369.  (Note: This command requires that the file named COPYING was placed either
  2370.  in the same directory as GFFT or in the S: directory, as specified in the
  2371.  file named INSTALLATION.  If this file has been lost, you may obtain
  2372.  another copy from the Free Software Foundation, Inc., 675 Mass Ave,
  2373.  Cambridge, MA 02139, USA.  Please do not ask them any other questions
  2374.  about this program.)
  2375.  
  2376.  
  2377. ?dB
  2378. ?NodB
  2379.  
  2380.  The dB command instructs GFFT to write output amplitude or power values
  2381.  converted to the dB scale.  The NodB command cancels this.
  2382.  
  2383.  If dB is engaged, LogY is probably not desireable, as then you would be
  2384.  plotting logarithms on a logarithmic scale.  (LogY causes GNUPLOT to use a
  2385.  logarithmically scaled Y axis, but does not otherwise modify the data file
  2386.  written by GFFT.)
  2387.  
  2388.  You will get a warning if any spectral values are equal to zero.  Such
  2389.  values will not be output as they cannot be converted to the dB scale.
  2390.  
  2391.  
  2392. ?Exit
  2393. ?Quit
  2394.  
  2395.  The Quit or Exit command is used to end an interactive session of GFFT.
  2396.  As GFFT is terminating, it will delete all temporary files it has created
  2397.  if they are no longer in use.  The temporary files corresponding to 
  2398.  plots or help messages still being displayed will not be deleted.
  2399.  In that case, be sure to remove all help message and plot displays before
  2400.  beginning a second GFFT session.
  2401.  
  2402.  Warning!  GFFT will also delete your files, if they match the masks
  2403.  it uses for its temporary files: 
  2404.  
  2405.      t:temp-#?.fft-#?
  2406.      ram:cli.temp-gfft-#?
  2407.      ram:gnuplot.temp-gfft-plot
  2408.      ram:temp-gfft-more-#?
  2409.  
  2410.  As you can see, however, this isn't very likely.
  2411.  
  2412.  
  2413. ?FFT-Complex
  2414.  
  2415.  The FFT-Complex command changes the operation of GFFT fundamentally.
  2416.  Instead of producing a plottable 2d (or 3D-Time) spectrum analysis, GFFT
  2417.  will simply output (not plot) a file containing the Complex FFT of the
  2418.  input data provided.  (It is complex in that for each frequency there are
  2419.  'real' and 'imaginary' components).  This will be done when the OK command
  2420.  is given.
  2421.  
  2422.  Beware that few of the parameters provided in GFFT are applicable to
  2423.  FFT-Complex operation.  Only one data segment (whose size based on the Bin
  2424.  specification) will be analyzed.
  2425.  
  2426.  
  2427. ?Frames
  2428.  
  2429.  The Frames command determines how many frames from the sample file will be
  2430.  read and used by GFFT.  It accepts one argument--the number of frames.  If
  2431.  no argument is given, the default is restored.  By default, the number of
  2432.  frames read and used by GFFT is the total number of frames in the file (if
  2433.  possible--of course, the number of frames actually used may be less than
  2434.  that if the Overlap (see) mode is turned off).
  2435.  
  2436.  (If you are unfamiliar with the 'frame' terminology, for the purposes of
  2437.  GFFT one 'frame' is the same as one 'data point,' or 'number.'  Some sample
  2438.  file formats permit more than one channel, and frequently the data points
  2439.  for all channels present are combined in each 'frame' which consists of
  2440.  all the samples taken for all channels to represent one instant of time.
  2441.  Currently, GFFT can only use the data for one channel at a time, but the
  2442.  'frame' terminology has been adopted because it is the most general.  The
  2443.  term 'sample' is ambiguous because sometimes it may refer to an individual
  2444.  data point, and other times it may refer to an entire file of data points.
  2445.  I have tried to consistently use the term 'sample file' here when
  2446.  referring to such a file.
  2447.  
  2448.  
  2449. ?Go
  2450. ?OK
  2451.  
  2452.  The OK command initiates an FFT according to all the specified parameters.
  2453.  The Go command is identical.
  2454.  
  2455.  The selected sample file will be read and transformed, the spectrum file
  2456.  (if any) which has been selected with a Write or Open command will be
  2457.  written to, and a PLOT will be produced if the Plot option is enabled.
  2458.  
  2459.  This command is invalid if any parameters have been set incorrectly, if no
  2460.  sample file has been selected, or if no spectrum file has been explicitly
  2461.  specified AND the PLOT option is not enabled (as there would be no point
  2462.  in writing to a temporary spectrum file only to delete it).
  2463.  
  2464.  It may not be necessary to give the OK command in Batch-CLI mode because
  2465.  it may be implied by the commands given and the end of the command line.
  2466.  
  2467.  Example:
  2468.  
  2469.      sys> gfft
  2470.      gfft> read piano.iff
  2471.      gfft> plot
  2472.      gfft> ok
  2473.  
  2474.  Batch Examples:
  2475.  
  2476.      gfft read piano.iff write piano.fft
  2477.      gfft read piano.iff hann write piano.hann ok hamming write piano.hamm
  2478.  
  2479.  In the first batch example, no OK command is necessary because sample and
  2480.  spectrum files are specified for which no OK command is given.  In the
  2481.  second batch example, two output files are written, OK is necessary to
  2482.  write the first, but not necessary for the second.  (See help for 'Batch'
  2483.  for further information about batch mode).
  2484.  
  2485.  Note: depending on the size of the sample file, the number of bins and
  2486.  other parameters you have set, as well as the CPU and/or FPU resources
  2487.  available, an FFT analysis could take anywhere between a fraction of a
  2488.  second to several weeks.  So, if you don't get an immediate response, have
  2489.  faith that GFFT is working, not hanging.  If there is any error, GFFT
  2490.  should let you know right away.  If it is working away on your file, and
  2491.  the number of bins is small compared with the size of your sample file,
  2492.  you will see the disk light flickering occasionally as GFFT reads in each
  2493.  additional data segment.
  2494.  
  2495.  
  2496. ?Hamming
  2497.  
  2498.  The Hamming button selects windows of a particular shape.  These windows
  2499.  will be applied to the data in segments whose size is determined by the
  2500.  number of bins.  The Hamming command cancels the effect of any preceding
  2501.  window shape command.
  2502.  
  2503.  The Hamming window is superior to the Rectangle, Triangle, Parzen, and
  2504.  Hann windows in sidelobe rejection.  The formula used here is from Harris.
  2505.  
  2506.  
  2507. ?Hann
  2508.  
  2509.  The Hann button selects windows of a particular shape.  These windows will
  2510.  be applied to the data in segments whose size is determined by the number
  2511.  of bins.  The Hann command cancels the effect of any preceding window
  2512.  shape command.
  2513.  
  2514.  The 'Hann Window' is frequently mis-named as the 'Hanning Window.'
  2515.  Actually, Hann-ing (or Hann'd) is a kind of verb which attests to the
  2516.  popularity of this window in instrumentation.  It is superior to the
  2517.  Rectangle, Triangle, and Parzen windows in sidelobe rejection.  The
  2518.  formula used here is from Harris.
  2519.  
  2520.  
  2521. ?Hidden3D
  2522. ?NoHidden3D
  2523.  
  2524.  The Hidden3D command enables hidden line removal in 3D plot displays.
  2525.  The NoHidden3D disables this feature.  It is disabled by default.
  2526.  
  2527.  I find the hidden line 3D display to be the most readable, though some
  2528.  useful data may be hidden.
  2529.  
  2530.  GNUPLOT has other 3D display features which are not yet supported by GFFT,
  2531.  such as contour plots (with many contour parameters).  If there are any
  2532.  particular ones you would like to be able to control from GNUPLOT, please
  2533.  let me know.  (I'm probably just going to add a generic GNUPLOT option
  2534.  control facility in a future release.)
  2535.  
  2536.  
  2537. ?HighFrequency
  2538.  
  2539.  The HighFrequency command allows you to select the highest frequency to be
  2540.  output (and plotted, if applicable) up to the Nyquist frequency, which is
  2541.  one-half of the sampling rate.  Any positive number (integer or floating
  2542.  point) may be given as an argument.  If no argument is given, the default
  2543.  is restored in which the highest frequency output and plotted is
  2544.  automatically the Nyquist frequency.
  2545.  
  2546.  Using the HighFrequency and LowFrequency commands, you can zoom in to see
  2547.  a particular part of the spectrum more clearly.
  2548.  
  2549.  If a HighFrequency is selected prior to a RePlot command, that value is
  2550.  given in a range specification to GNUPLOT.  Otherwise, the effect of a
  2551.  selected HighFrequency is to filter the output file produced by GFFT, and
  2552.  GNUPLOT is allow to autorange.  (This may result in a slight difference in
  2553.  how the axes are drawn by GNUPLOT, and may be used to your advantage
  2554.  during RePlot as you can then increase or decrease the right margin if
  2555.  desired.)
  2556.  
  2557.  
  2558. ?HighY
  2559.  
  2560.  The HighY command allows you to set the lowest value to be shown on the
  2561.  vertical axis used for plotting by GNUPLOT.  Using this command, you can
  2562.  'zoom in' or 'zoom out' vertically into the plot.  This command has no
  2563.  effect on the data file written by GFFT.  If the HighY command is given
  2564.  without any arguments, the HighY value will be automatically determined by
  2565.  GNUPLOT autoscaling.
  2566.  
  2567.  Syntax:
  2568.  
  2569.      HighY [<highest Y value: double>]
  2570.  
  2571.  Note that GNUPLOT might do strange things if you specify a HighY value
  2572.  without also specifying a LowY value.  It may, for example, decide to run
  2573.  the Y axis upside down in order to show the widest range of Y values.  Or,
  2574.  if less than one Y unit would be plotted when autoscaling one value,
  2575.  GNUPLOT may decide the Y range is invalid.  Be forewarned.
  2576.  
  2577.  In 3D mode, the vertical axis (representing amplitude or power) is
  2578.  actually the Z axis, so then the HighY value is applied to the Z axis.
  2579.  
  2580.  
  2581. ?IgnoreFormat
  2582. ?NoIgnoreFormat
  2583.  
  2584.  The IgnoreFormat causes GFFT to ignore the format of a file which it
  2585.  recognizes.  Currently, GFFT recognizes IFF, AIFF, AIFF-C, AVR, RIFF, and
  2586.  VOCH formats, though it is only capable of processing IFF-8SVX, AIFF,
  2587.  AIFF-C, and AVR formats (and ONLY if UNCOMPRESSED).  Thus, IgnoreFormat
  2588.  may allow you to read files in RIFF, VOCH, and other IFF formats, though
  2589.  you will be responsible for setting parameters such as StartByte, Frames,
  2590.  and Rate yourself, and there is no guarantee that even after setting these
  2591.  parameters that GFFT will read the data properly (not to imply that there
  2592.  is any guarantee anyway).
  2593.  
  2594.  This feature should be used with caution and only by those who are well
  2595.  versed in the format of the files they are going to read.
  2596.  
  2597.  If you would like GFFT to support some additional file formats, please
  2598.  contact the author and considering hiring him to do this or making a
  2599.  regular or contingent donation.  See the README file for details.
  2600.  RIFF and VOCH formats might be included in a future release.
  2601.  
  2602.  The NoIgnoreFormat command cancels the effect of a previous IgnoreFormat
  2603.  command.
  2604.  
  2605.  
  2606. ?Interleave
  2607. ?NoInterleave
  2608.  
  2609.  * Note: this command is EXPERIMENTAL (even more than the others). *
  2610.  * The theoretic validity of this technique is not well understood. *
  2611.  
  2612.  The Interleave command tells GFFT to average the results of FFT's
  2613.  performed on alternate samples.  For example, 'Interleave 2' tells GFFT to
  2614.  perform two FFT's, one on the odd frames and one on the even frames, and
  2615.  then to average the results.  'Interleave 3' would tell GFFT to perform 3
  2616.  such FFT's, and so on.  The NoInterleave command may be used to cancel
  2617.  interleave mode.  Interleave on any non-positive or non-integer number is
  2618.  invalid, and interleave set to 1 would be meaningless (it would be the
  2619.  same as NoInterleave).
  2620.  
  2621.  Syntax:
  2622.  
  2623.      Interleave <interleave-factor: integer in the range 2 - huge>
  2624.      NoInterleave
  2625.  
  2626.  This is a counterpart to the ordinary way of averaging the results of FFT
  2627.  performed on successive segments (which may also be done at the same time
  2628.  if possible).  While dividing up a file into more than the minimum number
  2629.  of segments (i.e., with less than the maximum number of bins) does not
  2630.  reduce the highest frequency for which an FFT value is computed, it does
  2631.  increase the lowest non-zero frequency for which an FFT value is computed
  2632.  (i.e., the low frequency resolution is lost).  Meanwhile, Interleave does
  2633.  not increase the lowest non-zero frequency, but instead reduces the the
  2634.  highest frequency (leaving the low frequency resolution intact).
  2635.  
  2636.  Unfortunately, though the utility of this feature seemed compelling for
  2637.  analyzing a spectrum in bands (using Interleave averaging for the low
  2638.  frequencies and typical 'bin' averaging for the high frequencies) the
  2639.  results indicate there is some theoretical error here which I still don't
  2640.  fully understand, as I haven't been able to get the bands to meet.  I
  2641.  think I understand the reason for this, but I don't understand it well
  2642.  enough to know how to compensate for it.  Meanwhile, I have found no
  2643.  discussion of this 'interleaving' or 'alternating' technique in the
  2644.  literature.
  2645.  
  2646.  
  2647. ?LogX
  2648. ?NoLogX
  2649.  
  2650.  The LogX command will cause GNUPLOT to scale the x-axis logarithmically
  2651.  during plotting (if plot mode is set).  It has no effect on the spectral
  2652.  data output by GFFT itself, except when a number of smoothing segments are
  2653.  being applied.  When smoothing with LogX on, a logarithmic mesh will be
  2654.  used during the smoothing phase.  
  2655.  
  2656.  The NoLogX command cancels the effect of the LogX command.
  2657.  
  2658.  
  2659. ?LogY
  2660. ?NoLogY
  2661.  
  2662.  The LogY command will cause GNUPLOT to scale the vertical axis
  2663.  logarithmically during plotting (if plot mode is set).  It has no effect
  2664.  on the spectral data output by GFFT itself.  The NoLogY command cancels
  2665.  the effect of the LogY command.
  2666.  
  2667.  If a dB conversion is selected with the dB command, LogY is probably
  2668.  not desireable (as this would mean plotting logarithms on a logarithmic
  2669.  scale).
  2670.  
  2671.  LogY is intended to make the vertical axis (representing amplitude or
  2672.  power) logarithmic.  In 3D mode, it is actually the Z axis that is
  2673.  vertical and that represents amplitude or power, so in that mode LogY
  2674.  actually scales the Z axis logarithmically.
  2675.  
  2676.  
  2677. ?LowFrequency
  2678.  
  2679.  The LowFrequency command allows you to select the lowest frequency to be
  2680.  output (and plotted, if applicable).  By default, GFFT outputs and plots
  2681.  the lowest non-zero frequency.  You may specify 0 or any other floating
  2682.  point number as the argument to a LowFrequency command.  If no argument is
  2683.  specified, the LowFrequency command restores the default.
  2684.  
  2685.  Although the FFT process yields a value for the 0 frequency (e.g. D.C.),
  2686.  typical FFT analyzers do not display it because it may display a
  2687.  considerable offset caused by the sampling hardware.
  2688.  
  2689.  Once you specify a LowFrequency, it will remain in effect for the current
  2690.  sample file and any additional files processed in the same GFFT session.
  2691.  
  2692.  Note that the LowFrequency is handled differently by RePlot than by OK and
  2693.  ReOut.  See help for the RePlot command for further information.
  2694.  
  2695.  
  2696. ?LowY
  2697.  
  2698.  The LowY command allows you to set the lowest value to be shown on the
  2699.  vertical axis used for plotting by GNUPLOT.  Using this command, you can
  2700.  'zoom in' or 'zoom out' vertically into the plot.  This command has no
  2701.  effect on the data file written by GFFT.  If the LowY command is given
  2702.  without any arguments, the LowY value will be automatically determined by
  2703.  GNUPLOT autoscaling.
  2704.  
  2705.  Syntax:
  2706.  
  2707.      LowY [<lowest Y value: double>]
  2708.  
  2709.  Note that GNUPLOT might do strange things if you specify a LowY value
  2710.  without also specifying a HighY value.  It may, for example, decide to run
  2711.  the Y axis upside down in order to show the widest range of Y values.  Or,
  2712.  if less than one Y unit would be plotted when one value is autoscaled,
  2713.  GNUPLOT may decide the Y range is invalid.  Be forewarned.
  2714.  
  2715.  In 3D mode, the vertical axis (representing amplitude or power) is
  2716.  actually the Z axis, so the value selected for LowY is then applied to the
  2717.  Z axis.
  2718.  
  2719.  
  2720. ?Mean
  2721. ?Sum
  2722.  
  2723.  The Mean command instructs GFFT to write 'mean' (average) values, which
  2724.  is what it does by default.  The Sum command instructs GFFT to write
  2725.  'summed' values,  which are summed but not averaged (not divided by
  2726.  the number of frames and segments).
  2727.  
  2728.  Mean values are equivalent to Root Mean Square (RMS) Amplitude or Mean
  2729.  Square Power (actually, squared amplitude) values.  Note that by default
  2730.  GFFT normalizes Mean outputs to the level of total actual amplitude
  2731.  or power within each bin.  There are two commands, PSDensity and Pink,
  2732.  which alter this default normalization.
  2733.  
  2734.  I do not recommend the use of the Sum command, except for debugging
  2735.  purposes.
  2736.  
  2737.  
  2738. ?Multiply
  2739.  
  2740.  The Multiply command allows you to multiply all of the output values of an
  2741.  FFT by some constant non-zero number for scaling purposes.  (This only
  2742.  affects the amplitude or power values, not the frequency values.)  If no
  2743.  argument is specified, the previous multiplication factor is canceled.
  2744.  
  2745.  
  2746. ?NoWarranty
  2747.  
  2748.  The NoWarranty command displays the nowarranty disclaimer of GFFT,
  2749.  excerpted from the General Public License.
  2750.  
  2751.  
  2752. ?Numerical
  2753. ?NoNumerical
  2754.  
  2755.  The Numerical command replaces the new FFT routines written originally for
  2756.  GFFT with routines from the book 'Numerical Recipes In C,' by Press,
  2757.  Flannery, Teukolsky, and Vetterling (Cambridge University Press: 1988).
  2758.  The NoNumerical restores the original GFFT routines.
  2759.  
  2760.  You will probably find only very small differences between using the
  2761.  GFFT FFT routines and the Numerical ones, though there are significant
  2762.  differences in how they have been implemented.  But this command enables
  2763.  you to compare for yourself (as it has for me).  Note that it only
  2764.  replaces the code performing the FFT itself, not the segment averaging and
  2765.  output processing.
  2766.  
  2767.  GFFT is not distributed with the source code for the 'Numerical' FFT
  2768.  routines, nor is this code linked into the distributed binary image,
  2769.  because the Numerical routines have a copyright which does not permit
  2770.  this.  To enable this command, you must acquire the code by either by
  2771.  buying the book and entering the source code yourself, or by buying the
  2772.  source code diskette, and making an image with it included (uncomment the
  2773.  line(s) defining 'NUMERICAL_RECIPES_AVAILABLE' in the smakefile.  The
  2774.  functions needed are 'four1.c' and 'realft.c.'  Be sure NOT to distribute
  2775.  a binary image of GFFT with the numerical recipes code included, or to
  2776.  distribute the Numerical Recipes code in any other fashion without
  2777.  permission of its authors.
  2778.  
  2779.  
  2780. ?Octave
  2781.  
  2782.  The Octave command allows you to select a particular octave within a file
  2783.  whose format permits more than one octave (e.g. 8SVX).  By default, the
  2784.  lowest octave is selected--this is present in all files.  You may return
  2785.  to the default by giving an octave command with no argument.  To specify
  2786.  another octave, use an argument which is a single digit between 0 and 7.
  2787.  1 specifies the lowest octave, and 7 specifies the highest one.  0 is a
  2788.  special case which specifies the highest octave available, regardless of
  2789.  how many octaves there are (it may also be the lowest).  If the octave
  2790.  specified is not available, this problem may not be detected until the OK
  2791.  command is given, but no analysis will be performed.
  2792.  
  2793.  Syntax:
  2794.  
  2795.      Octave [<number>]
  2796.  
  2797.  Examples:
  2798.  
  2799.      gfft>Octave 0
  2800.      gfft>Octave 1
  2801.  
  2802.  
  2803. ?OneShotOnly
  2804. ?NoOneShotOnly
  2805.  
  2806.  The OneShotOnly command causes GFFT to read only the one-shot portion of
  2807.  a sample in a format (e.g. 8SVX) supporting this feature.  By default,
  2808.  GFFT will read the combined one-shot and repeat portions of the file.
  2809.  The OneShotOnly command implicitly cancels the RepeatOnly command as they
  2810.  are mutually exclusive.  
  2811.  
  2812.  The NoOneShotOnly command cancels the OneShotOnly command and restores the
  2813.  default operation if OneShotOnly had been in effect.
  2814.  
  2815.  
  2816. ?Overlap
  2817. ?NoOverlap
  2818.  
  2819.  The Overlap command engages overlap mode (which is the default).  The
  2820.  NoOverlap command disengages overlap mode.
  2821.  
  2822.  Because it makes the best use of a limited amount of data, overlap mode is
  2823.  engaged by default.  It is also able to include all the data in the
  2824.  analysis, regardless of whether the number of frames is exactly 2n times a
  2825.  power of 2 (where n is a positive integer).  If you are more concerned
  2826.  with making the best use of processing time, and are not concerned about
  2827.  ignoring a trailing remainder of the data, you may wish to disengage
  2828.  overlap mode.
  2829.  
  2830.  In overlap mode, the windows applied to the data are overlapped.  By
  2831.  overlapping the windows (as compared with just laying them end-to-end to
  2832.  cover all frames present) better use is made of a fixed amount of data in
  2833.  reducing the variance of the computed spectrum.  This is true for all
  2834.  window shapes, but especially true for the non-rectangular ones.
  2835.  Overlapping may provide up to 9/11 of the variance reduction of having
  2836.  twice as much data to work with (see Press, et. al.).
  2837.  
  2838.  Normally, windows are overlapped by half their length (i.e., the fixed
  2839.  overlap percentage for flat FFT analysis is 50%).  However, in overlap
  2840.  mode, the overlap of the last window is decreased or increased to
  2841.  encompass the remainder of the data.
  2842.  
  2843.  Given real (i.e. non-complex) sample data, 2 data points (frames) are
  2844.  required for each Bin.  Thus, 1024 bins would require 2048 frames.  With
  2845.  50% overlap, two overlapping windows would fit exactly into 3072 (2048 x
  2846.  1.5) frames, three overlapping windows would fit exactly into 4096 (2048 x
  2847.  2) frames, and four overlapping windows would fit exactly into 5120 (2048
  2848.  x 2.5) frames.  But GFFT varies the overlap of the last window to fit
  2849.  whatever amount of additional data is present after the last whole window
  2850.  of data has been read.  So, two windows are used for any number of frames
  2851.  F such that 2048 < F < 4096, three windows are used for F = 4096, four
  2852.  windows are used for 4096 < F < 6144, and so on, with the overlap of the
  2853.  last window somewhere between 0 and 100% (non-inclusive).
  2854.  
  2855.  Though this scheme will ensure that all frames are included in at least
  2856.  one segment, it may result in either over-representation or
  2857.  under-representation of the last region of data.  This is a fairly minor
  2858.  detail (especially considering that the FFT is really only intended for
  2859.  'continuous' sounds...) but if you are concerned with such things you may
  2860.  want to specify exactly the number of frames to be used using the Frames
  2861.  or StartFrame commands available in the CLI interface, and make sure you
  2862.  have chosen an exact multiple (two or greater) of the bin size for an
  2863.  exact overlap fit.  For 3D-Time analysis, you should set the Time Segment
  2864.  Size instead (this is discussed further in the help for TimeSegSize).
  2865.  
  2866.  
  2867. ?Pad
  2868. ?NoPad
  2869.  
  2870.  The Pad command activates 'Pad' mode.  The NoPad command cancels Pad mode.
  2871.  Pad mode is not activated by default, and its use is strongly discouraged.
  2872.  
  2873.  In 'Pad' mode, the last (or only) partial segment of data will be padded
  2874.  with zeros prior to analysis.
  2875.  
  2876.  Though it may sound innocuous, zero padding can produce serious artifacts
  2877.  in a computed spectrum, and I strongly discourage it.  The default
  2878.  'Overlap' mode takes the best use of all the data without padding or
  2879.  truncation.  Even truncation, which might result if 'Overlap' is
  2880.  disengaged and the number of frames is not 2 times a power of 2, is
  2881.  superior to padding for most purposes.  The only advantage of padding is
  2882.  that it permits the use of a larger maximum number of bins than the other
  2883.  techniques in some cases, but be forewarned that many of those bins will
  2884.  be filled with garbage.
  2885.  
  2886.  See help for the Bins and Overlap commands for further discussion.
  2887.  
  2888.  
  2889. ?Parseval
  2890. ?NoParseval
  2891.  
  2892.  The Parseval command selects the Parseval normalization option.  The
  2893.  NoParseval command cancels the Parseval normalization option.  Parseval
  2894.  normalization is the default.  This may be slightly slower, but is more
  2895.  accurate.  By selecting the NoParseval option, you may get a performance
  2896.  improvement of about 2.5%, at the cost of a small error (I have seen
  2897.  0-20%) in the overall spectrum level.  The spectrum shape is unaffected.
  2898.  
  2899.  Using Parseval normalization, the accuracy of the output normalization
  2900.  (prior to PSDensity and/or Pink normalization, if also applied) is assured
  2901.  by applying Parseval's theorem.  According to Parseval's theorem, the sum
  2902.  of the squared sample values should equal the sum of the (squared
  2903.  amplitude) bin values.  Otherwise, estimators are used (based on the
  2904.  average window gain, etc.) which are fairly accurate.
  2905.  
  2906.  Parseval normalization is particularly significant if non-rectangular data
  2907.  windows are used, and is more significant for complex waveforms than
  2908.  simple ones.
  2909.  
  2910.  
  2911. ?Parzen
  2912.  
  2913.  The Parzen command selects windows of a particular shape.  These windows
  2914.  will be applied to the data in segments whose size is determined by the
  2915.  number of bins.  The Parzen command cancels the effect of any preceding
  2916.  window shape command.
  2917.  
  2918.  The Parzen window is based on the formula presented by Press, et al, in
  2919.  their book 'Numerical Recipes.'  It is not the same as the "Parzen
  2920.  Window" identified by Harris.  It is superior to the triangle and
  2921.  rectangle windows in sidelobe rejection.
  2922.  
  2923.  
  2924. ?Pink
  2925. ?NoPink
  2926.  
  2927.  * Warning!  The results of this command may not be entirely 'correct.' *
  2928.  
  2929.  The Pink command engages pink mode, in which a particular sort of
  2930.  frequency-dependent normalization is performed on the spectral output so
  2931.  that pink noise will be shown as having nearly 'flat' response.  The
  2932.  NoPink command cancels pink mode.
  2933.  
  2934.  (Pink noise is random noise shaped so that there is an equal amount of
  2935.  energy or amplitude in each octave or fractional-octave band.  It is
  2936.  frequently used in acoustic testing.)
  2937.  
  2938.  Pink mode simply weights each output value by a corrective factor; it does
  2939.  not do any grouping and/or averaging (so no resolution is lost).  The
  2940.  current formula does not seem entirely accurate at the lowest frequencies,
  2941.  where the results may vary depending on how many bins are being used.
  2942.  This makes it difficult (or impossible) to splice several curves of pink
  2943.  noise with different numbers of bins together.  In any case, the sum of
  2944.  the squared output values will no longer reflect the sum of the squared
  2945.  input values, in fact, the scale may be offset considerably.  You may
  2946.  use the 'Multiply' command to rescale the results conveniently.
  2947.  
  2948.  (You may also wish to do Smoothing with LogX set when plotting pink noise,
  2949.  and use extremely large sample files with 1,000,000 frames or more to
  2950.  allow for the randomness in pink noise to average out.)
  2951.  
  2952.  
  2953. ?Plot
  2954. ?NoPlot
  2955.  
  2956.  The Plot command selects Plot mode.  The NoPlot command cancels Plot mode.
  2957.  Plot mode is the default for Workbench and CLI-Interactive modes; it is
  2958.  not the default for CLI-batch mode.
  2959.  
  2960.  In Plot mode, GNUPLOT is automatically invoked in a background process to
  2961.  display the result of any spectrum analysis performed.  If no spectrum
  2962.  file has been explicitly specified, GFFT will create a temporary spectrum
  2963.  file to use to send data to GNUPLOT.  All such temporary files created by
  2964.  GFFT will be deleted on exit from GFFT (if the plot display was canceled).
  2965.  
  2966.  If plot mode is disengaged, a named output file must be explicitly
  2967.  specified with the Write command--otherwise the analysis would simply
  2968.  create and then delete a temporary file, which would be pointless.  It is
  2969.  not possible to plot data written to 'con:' (see help for the Write
  2970.  command for further details on con:) so if con: is chosen as the write
  2971.  file, Plot mode is invalid.
  2972.  
  2973.  
  2974. ?PlotOutput
  2975.  
  2976.  The PlotOutput command lets you set the output device or filename for
  2977.  GNUPLOT.  By default, plots are displayed on an amiga screen, and no
  2978.  PlotOutput command is required.  However, if the Terminal command is used
  2979.  to produce a plot on an external plotter or printer or to a Postscript or
  2980.  TeX file, the PlotOutput command may be required.  (The argument to the
  2981.  PlotOutput command will become an argument used in an Output command to
  2982.  GNUPLOT.)
  2983.  
  2984.  Syntax:
  2985.  
  2986.      plotoutput <device or filename: char *>
  2987.      plotoutput '<device or filename: char *>'
  2988.      plotoutput "<device or filename: char *>"
  2989.      plotoutput ''
  2990.      plotoutput ""
  2991.      plotoutput
  2992.  
  2993.  If the terminal command is given without any arguments, or if the argument
  2994.  is a null string enclosed in "" or '', GNUPLOT will use the default
  2995.  output (i.e. it will plot to an Amiga screen).
  2996.  
  2997.  Examples:
  2998.  
  2999.      plotoutput ser:
  3000.      plotoutput par:
  3001.      plotoutput Plot1.PS
  3002.  
  3003.  Note: Because GNUPLOT already formats the output for the particular
  3004.  printer you have, use of the serial device (ser:) or parallel device
  3005.  (par:), whichever your printer is actually attached to, is more
  3006.  appropriate than the use of the printer device (prt:).  GNUPLOT supports
  3007.  many different printers and plotters, but does not support the Amiga
  3008.  Intuition printer drivers.
  3009.  
  3010.  Example:
  3011.  
  3012.      terminal hp500c
  3013.      plotoutput par:
  3014.  
  3015.  
  3016. ?PSDensity
  3017. ?NoPSDensity
  3018.  
  3019.  The PSDensity command activates an output normalization in which each FFT
  3020.  value is divided by the width of the bins used in Hz.  The NoPSDensity
  3021.  command restores the default (total amplitude/power) normalization.
  3022.  
  3023.  By default, GFFT will output values which are normalized to show the total
  3024.  amplitude or power (squared amplitude) present in each frequency range
  3025.  centered on that bin's nominal frequency, as well as can be determined by
  3026.  the FFT technique (which depends on the window shape used, the number of
  3027.  segments which can be averaged, and other parameters, but does not feature
  3028.  an extremely sharp cut-off from one bin to the next as compared with some
  3029.  esoteric spectrum analysis techniques).
  3030.  
  3031.  For some applications, it is preferable to have a 'density' normalization,
  3032.  for which bin values are normalized by the bin width.  This will permit
  3033.  several FFT's of a random noise source using different numbers of bins to
  3034.  be directly compared with one another or spliced together, even though the
  3035.  wider bins (which result from using a smaller number of bins) will
  3036.  naturally capture more amplitude or power.  The Multiply command can then
  3037.  be used to scale each FFT as required.
  3038.  
  3039.  
  3040. ?Quantization
  3041. ?NoQuantization
  3042.  
  3043.  The Quantization command lets you set a quantization value for GFFT
  3044.  output.  For example, a quantization of 0.1 will cause all amplitude or
  3045.  power values to be rounded off to the nearest 0.1.  The quantization value
  3046.  in effect can be canceled with the NoQuantization command, or by giving
  3047.  the Quantization command with no argument.
  3048.  
  3049.  Syntax:
  3050.  
  3051.  Quantization [<quantization value: double>]
  3052.  NoQuantization
  3053.  
  3054.  Note that you could use any arbitrary value for quantization (e.g.
  3055.  12.3456) though this might not be very useful.  Typical values might be
  3056.  0.1, 0.05, 0.001, etc.
  3057.  
  3058.  This has no effect on the FFT computation itself, and does not affect the
  3059.  output of frequency values.
  3060.  
  3061.  [Unfortunately, quantization may cause 'quantum jumps' to occur back and
  3062.  forth as a spectrum nears each quantum threshold.  Thus, the quantization
  3063.  feature is not quite as useful as originally intended.  What needs to be
  3064.  done here, I think, is to apply quantization BEFORE smoothing, though the
  3065.  result would then not be quantized as such.  If you have any useful ideas
  3066.  here, please let me know.  Meanwhile, consider the use of explicit HighY
  3067.  and LowY values to make small Y variations appear less pronounced.]
  3068.  
  3069.  
  3070. ?Rate
  3071.  
  3072.  The Rate command allows you to enter the sampling rate for an unformatted
  3073.  file.  You must enter a rate for an unformatted file before giving the OK
  3074.  command or no analysis will be performed.  One you enter a rate, it
  3075.  remains in effect for all further unformatted files until you select a new
  3076.  rate or select a formatted file.  The rate command expects one numeric
  3077.  argument which may be in either integer or floating point format.  The
  3078.  rate must be greater than zero.
  3079.  
  3080.  Syntax:
  3081.  
  3082.      Rate [<sampling rate: number>]
  3083.  
  3084.      gfft>rate 10000
  3085.      gfft>rate 1.119e6
  3086.  
  3087.  You may also override the rate indicated by a formatted file with the rate
  3088.  command.  (For example, you may wish to change the units from seconds to
  3089.  microseconds.)  To override the rate for a formatted file, you must give
  3090.  the rate AFTER giving the Read command for the file. (When you give the
  3091.  Read command the formatted information is read and it supercedes any Rate
  3092.  command previously in effect.)  You may return to the default rate
  3093.  indicated by the file itself by giving a rate command with no argument.
  3094.  
  3095.  
  3096. ?Read
  3097.  
  3098.  The Read command selects a sample file for GFFT to read, or cancels
  3099.  reading from the sample file currently in effect if no argument is given.
  3100.  Once a sample file is selected, it remains in effect for one or more
  3101.  analyses until another sample file is selected.
  3102.  
  3103.  The argument following Read may be a complete file pathname or a relative
  3104.  file pathname (relative to the current directory when GFFT was started).
  3105.  If the filename contains spaces, you must enclose it in either apostrophes
  3106.  (') or quotation marks (").
  3107.  
  3108.  Syntax:
  3109.  
  3110.      Read [<filename: string>]
  3111.      Read '<filename: string>'
  3112.      Read "<filename: string>"
  3113.  
  3114.  Example:
  3115.  
  3116.      gfft> read sample1
  3117.      gfft> rate 10000
  3118.      gfft> bins 1024
  3119.      gfft> ok
  3120.      gfft> smoothing 100
  3121.      gfft> ok
  3122.      gfft> read "ram disk:samples/my old piano"
  3123.      gfft> ok
  3124.      gfft> read /old/sample1
  3125.      gfft> ok
  3126.  
  3127.  GFFT can read both formatted and unformatted files.  If GFFT understands
  3128.  the format of the file (it currently understands IFF 8SVX, AIFF, and AVR
  3129.  formats), it will automatically set the sampling rate.  If the file is
  3130.  unformatted, you will have to set the sampling rate manually before
  3131.  beginning an analysis.  You may also have to use the Bits and Unsigned
  3132.  commands if your unformatted file uses does not use the default for
  3133.  unformatted files (8 bits, signed).
  3134.  
  3135.  If the file is formatted using an unrecognized format, you may still be
  3136.  able to read it using the CLI command 'StartByte' (which allows you to
  3137.  skip over the file header) if you know how long the file header is, and
  3138.  'Frames' (which allows you to read a specified number of frames, skipping
  3139.  any file segments following the sample data).  This is not recommended
  3140.  unless you are very familiar with the inner workings of the file format
  3141.  you are working with.  (GFFT recognizes but does not yet understand RIFF
  3142.  and VOCH formats.  See help for the IgnoreFormat command for further
  3143.  advice on how to deal with those formats.)
  3144.  
  3145.  A sample file must be selected before you can perform an analysis.
  3146.  However, you may specify 'con:' as the sample file.  This will cause GFFT
  3147.  to prompt you to enter each data point from the keyboard after the OK
  3148.  command is given.  You may then enter each point as a floating point or
  3149.  integer number.  Note that for con: you must also enter the sampling rate
  3150.  before giving the OK command, since con: has no 'formatted' information.
  3151.  This may be useful if you have a small number of manually recorded data
  3152.  points, or wish to experiment with FFT spectrum analysis to gain a deeper
  3153.  understanding of it.  For example, if you entered the following:
  3154.  
  3155.  
  3156.      gfft> read con:
  3157.      gfft> rate 10000
  3158.      gfft> ok
  3159.  
  3160.      Enter <value> (float OK) or <newline> to end input [0]: 1
  3161.      Enter <value> (float OK) or <newline> to end input [0]: 0
  3162.      Enter <value> (float OK) or <newline> to end input [0]: -1.0e0
  3163.      Enter <value> (float OK) or <newline> to end input [0]: 0
  3164.      Enter <value> (float OK) or <newline> to end input [0]:
  3165.  
  3166.  You would get a spectrum of 2 points (Nyquist Frequency/2, Nyquist
  3167.  Frequency) with amplitude 0.707... at the first frequency and amplitude 0
  3168.  at the second frequency.  This illustrates the default normalization of
  3169.  GFFT, since 0.707... is also the RMS amplitude of the signal you have
  3170.  entered, and it has a frequency of half of the Nyquist frequency.
  3171.  
  3172.  Once con: has been specified as the sample file, it remains in effect
  3173.  until another Read command is given.  However, the con: data is stored
  3174.  internally so you do not have to re-enter it for each analysis.  If you
  3175.  wish to read new data from con:, you may give the 'Read con:' command
  3176.  again.
  3177.  
  3178.  con: must be specified in lower case.
  3179.  
  3180.  
  3181. ?Rectangle
  3182.  
  3183.  The Rectangle command selects windows of rectangular shape.  These windows
  3184.  will be applied to the data in segments whose size is determined by the
  3185.  number of bins.  The Rectangle command cancels the previously selected
  3186.  window shape.
  3187.  
  3188.  The 'Rectangle' window is the simplest window (effectively a series of
  3189.  1's) and the fastest to compute and apply (i.e. no computation or
  3190.  application is necessary).  It also results in the sharpest initial
  3191.  fall-off on either side of a spectral peak.  However, it is the most
  3192.  susceptible to the presence of side-lobe artifacts.  If you wish to remove
  3193.  the influence of side-lobes, use a different window shape, such as
  3194.  '74dbBlackmanHarris.'
  3195.  
  3196.  Rectangle is currently the default window shape.
  3197.  
  3198.  
  3199. ?ReOutput
  3200.  
  3201.  The ReOutput command allows you to rewrite the results of the preceding
  3202.  analysis subject to a number of changed parameters.  The FFT analysis
  3203.  itself will not be repeated, only the output processing (and plotting
  3204.  phase--if Plot is selected).  This is useful for making minor changes
  3205.  after a long analysis without repeating the analysis itself.
  3206.  
  3207.  Here are the parameters which may be changed before a ReOutput:
  3208.  
  3209.      Spectrum File  ('Write,' 'Open,' or 'Append' commands)
  3210.      Plot (or NoPlot)
  3211.      Smoothing Segments and Squared Smoothing
  3212.      High Frequency
  3213.      Low Frequency
  3214.      Mean
  3215.      Power
  3216.      Amplitude
  3217.      dB
  3218.      LogX
  3219.      LogY
  3220.      Multiply
  3221.      Sampling Rate
  3222.      Pink
  3223.      Parseval
  3224.      Quantization
  3225.      LowY
  3226.      HighY
  3227.      
  3228.  Here are just a few parameters WHICH SHOULD NOT BE CHANGED between OK and
  3229.  ReOutput:
  3230.  
  3231.      Sample File (Read command)
  3232.      Bins
  3233.      Overlap
  3234.      Pad
  3235.      Window Shape  (Rectangle, 74dB, etc.)
  3236.      Any 3d parameters...in fact, ReOutput is not at all possible with 3d...
  3237.                           see help for the RePlot command.
  3238.  
  3239.  Warning!  Currently, if you change these parameters and ReOut, you will
  3240.  not get any sort of warning that the changed values have no effect.
  3241.         
  3242.  There is also a RePlot command, with different capabilities (generally
  3243.  more limited) which skips the output stage (but allows change of 3d
  3244.  parameters).
  3245.  
  3246.  
  3247. ?RepeatOnly
  3248. ?NoRepeatOnly
  3249.  
  3250.  The RepeatOnly command causes GFFT to read only the repeat portion of a
  3251.  sample in a format (e.g. 8SVX) which supports this feature.  By default,
  3252.  GFFT will read the combined one-shot and repeat portions of the file.  The
  3253.  RepeatOnly command implicitly cancels the OneShotOnly command as they are
  3254.  mutually exclusive.  The NoRepeatOnly command cancels the RepeatOnly
  3255.  command and restores the default operation if RepeatOnly had been in
  3256.  effect.
  3257.  
  3258.  
  3259. ?RePlot
  3260.  
  3261.  The RePlot command allows you to plot the previous analysis with a few
  3262.  changed parameters.  The analysis itself, including the output phase, will
  3263.  not be repeated.  Instead, GNUPLOT will be re-invoked with with new
  3264.  parameters.
  3265.  
  3266.  Here are the parameters which may be changed between OK and RePlot:
  3267.  
  3268.         Plot (if previously off)
  3269.         LogX (with no smoothing!  LogX smoothing requires output phase)
  3270.         LogY
  3271.         RotX
  3272.         RotZ
  3273.         LowFrequency (*see note below)
  3274.         HighFrequency (*see note below)
  3275.  
  3276.  Warning!  Currently, if you change other parameters and RePlot, you will
  3277.  not get any sort of warning that the changed values have no effect.
  3278.  
  3279.  Note that the ReOutput command permits the modification of many more
  3280.  parameters than RePlot, though it might take slightly longer, and it does
  3281.  not permit the repetition of a 3D analysis.  (ReOutput will also produce a
  3282.  plot if Plot mode is activated.)
  3283.  
  3284.  RePlot may also be used in conjunction with the Open command to RePlot
  3285.  previously stored spectral data files.  See help for the Open command
  3286.  for further details.
  3287.  
  3288.  *Note that RePlot does not effect the LowFrequency and HighFrequency in
  3289.  exactly the same way as OK or ReOutput.  OK and ReOutput 'filter' the data
  3290.  written to the output data file so that no data outside the range
  3291.  established by LowFrequency and HighFrequency is written.  RePlot cannot
  3292.  filter the data which has already been written, but instead sends an
  3293.  explicit 'set xrange' command to GNUPLOT.  OK and ReOutput simply let
  3294.  GNUPLOT do autoranging for the x coordinate.  If you wanted a plot with
  3295.  artificially large left and right 'margins,' you could first do OK (with
  3296.  the desired actual data range set or defaulted), then do a RePlot with
  3297.  LowFrequency and HighFrequency values set outside the range of actual data
  3298.  to the point(s) where you would like the margins to be.  Thus, this
  3299.  difference in the way LowFrequency and HighFrequency are used in RePlot
  3300.  mode is actually a 'feature.'
  3301.  
  3302.  
  3303. ?RotX
  3304.  
  3305.  The RotX command changes the X Rotation factor used by GNUPLOT in
  3306.  rendering a three-dimensional plot (as would be produced using the Time3D
  3307.  command(s).)  Giving RotX without any arguments restores the default
  3308.  value, which is 60 degrees.
  3309.  
  3310.  Syntax:
  3311.  
  3312.      RotX [<x rotation: degrees 0-180>]
  3313.  
  3314.  Example:
  3315.  
  3316.      gfft>RotX 10
  3317.  
  3318.  
  3319. ?RotZ
  3320.  
  3321.  The RotZ command changes the Z Rotation factor used by GNUPLOT in
  3322.  rendering a three-dimensional plot (as would be produced using the Time3D
  3323.  command(s).)  Giving RotZ without any arguments restores the default
  3324.  value, which is 30 degrees.
  3325.  
  3326.  Syntax:
  3327.  
  3328.      RotZ [<x rotation: degrees 0-360>]
  3329.  
  3330.  Example:
  3331.  
  3332.      gfft>RotZ 90
  3333.  
  3334.  
  3335. ?Set
  3336.  
  3337.  Most commands in GFFT are 'set' commands, i.e., they adjust some particular
  3338.  setting which takes effect later when the OK command is given.  It is not
  3339.  necessary to preface these command with the verb 'Set,' as it is implied.
  3340.  
  3341.  However, for those whose fingers have been trained (by GNUPLOT and/or
  3342.  other programs) to type SET without thinking, an explicit SET command is
  3343.  also provided in GFFT.  It is essentially a dummy command, or, more
  3344.  precisely, it simply executes its arguments as if they are a complete
  3345.  command string in themselves.
  3346.  
  3347.  For example, the two following commands are equivalent:
  3348.  
  3349.      set logx
  3350.      logx
  3351.  
  3352.  Set does not discriminate between commands that are parameter setting
  3353.  commands and those that are not.  So, you could type 'set ok' which would
  3354.  perform the OK command.
  3355.  
  3356.  
  3357. ?SaveMemory
  3358. ?NoSaveMemory
  3359.  
  3360.  The SaveMemory option indicates to GFFT that you need to save memory
  3361.  space, possibly at the expense of processing time.  The NoSaveMemory
  3362.  command cancels this.  By default, GFFT will use extra memory if it can be
  3363.  used to save estimated processing time, even if the effect on processing
  3364.  time is fairly small.
  3365.  
  3366.  Currently, the only effect this has in on whether the trigonometric values
  3367.  used in the primary FFT function are saved for re-use.  By default, these
  3368.  values are saved, so if more than one segment is processed, they will not
  3369.  have to be recomputed.  This saves time at the expense of a considerable
  3370.  amount of memory (which increases as the number of bins increases).  If
  3371.  you are using a very large number of bins with a limited amount of memory,
  3372.  you may need the SaveMemory option.  I have found that even with a large
  3373.  number of segments, the effect of saving these trigonometric values is
  3374.  fairly small, about 6% on overall performance at most.  With some cached
  3375.  processors having very high internal floating point throughput (e.g.
  3376.  68040), the 'savememory' option might actually result in increased
  3377.  performance under some unusual circumstances, though the difference is
  3378.  likely to be quite small.
  3379.  
  3380.  
  3381. ?ShowSettings
  3382.  
  3383.  The ShowSettings command displays a number of settings (such as input
  3384.  filename, output filename, number of bins, sampling rate, and window
  3385.  shape) which are currently in effect.
  3386.  
  3387.  ShowSettings has not kept up with the enormous growth of parameters and
  3388.  options in this program.  I figure most people will be using the
  3389.  workbench interface anyway, or switching between CLI and workbench.
  3390.  Let me know if you are a CLI user so you can be counted.
  3391.  
  3392.  
  3393. ?Signed
  3394. ?Unsigned
  3395.  
  3396.  The Signed command specifies that the input data file will have samples in
  3397.  'signed' format.  The UnSigned command will specify that the input data
  3398.  file will have samples in 'unsigned' format.  These commands are not
  3399.  necessary for formatted files, as the property is determined by the file
  3400.  type and/or header.  However, if you give the Signed or Unsigned command
  3401.  after the Read command, the Signed or Unsigned command will override the
  3402.  file type and/or header.
  3403.  
  3404.  Signed is the default and most usual type.
  3405.  
  3406.  
  3407. ?SmoothingSegments
  3408.  
  3409.  Using the SmoothingSegments command, you can specify that the output be
  3410.  'smoothed' or averaged over a certain number of segments.  (This works
  3411.  best if the number of segments is much smaller than the number of bins
  3412.  used).  The argument to SmoothingSegments is the number of segments to
  3413.  span the range from the lowest non-zero frequency to the Nyquist
  3414.  frequency.  If the SmoothingSegments command is given without any
  3415.  arguments, smoothing is canceled.
  3416.  
  3417.  Syntax:
  3418.  
  3419.      SmoothingSegments [<segments: integer>]
  3420.  
  3421.  Example:
  3422.  
  3423.      gfft> smooth 200
  3424.  
  3425.  If you plot with a large number of bins, or with LogX on, you may find
  3426.  that the left or right side of the plot line 'blooms' vertically with a
  3427.  wide range of values.  Rather than 'pixel averaging,' GNUPLOT shows the
  3428.  effect of plotting a line to each and every data point (even if many such
  3429.  points occur within one vertical line of pixels).  SmoothingSegments can
  3430.  be used to eliminate this 'blooming' effect, simulate 'pixel averaging,'
  3431.  and give you a more easily interpretable curve (though some important
  3432.  actual detail may be lost).
  3433.  
  3434.  If LogX is enabled, the mesh applied to the output will be logarithmically
  3435.  scaled.  The combination of using LogX, SmoothingSegments, and a extra
  3436.  large number of Bins is especially recommended for random noise analysis
  3437.  and/or whenever LogX is used.
  3438.  
  3439.  The smoothing technique is very simple.  A mesh of smoothing segments is
  3440.  laid on top of the FFT bins, and for each smoothing segment containing
  3441.  one or more bins, the average Y (amplitude) and X (frequency) values are
  3442.  computed, and these become the X and Y values that are written to the
  3443.  output file.  If there is only one data point within a smoothing segment,
  3444.  it is unchanged by this procedure.  If there is no data point within a
  3445.  smoothing segment, no data point will be output.  (Because of this, if LogX
  3446.  is enabled, it is very possible that there will not be as many data points
  3447.  as the number of segments you have chosen.  For example, given 4096 bins
  3448.  and 400 smoothing segments, only about 225 points will actually be
  3449.  produced because the actual data points in the beginning are farther apart
  3450.  than the smoothing segments.)
  3451.  
  3452.  If SquaredSmoothing selected, the averaging of the Y values is done by
  3453.  taking the positive root of average of the sum of the squared Y values.
  3454.  
  3455.  I am aware of much more sophisticated smoothing or 'convoluting'
  3456.  procedures which may have greater theoretic validity (e.g., see S. P.
  3457.  Lipschitz, T. C. Scott, and J. Vanderkooy, 'Increasing the Audio
  3458.  Measurement Capability of Analyzers by Microcomputer Postprocessing,'
  3459.  Journal of the Audio Engineering Society, Volume 33, Number 9, September
  3460.  1985...their technique simulates 1/3 octave bandwidth digital filters
  3461.  which is useful in that it supposedly approximates human auditory
  3462.  limitations), but these are also much more complicated.  The present
  3463.  technique is workable and useful, though it may be somewhat lacking in
  3464.  theoretic validity (though it is not entirely without precedent), and the
  3465.  results should be interpreted with some caution (you are probably not
  3466.  seeing all the real features that are there--but then that is true with
  3467.  any technique).
  3468.  
  3469.  
  3470. ?SquaredSmoothing
  3471. ?NoSquaredSmoothing
  3472.  
  3473.  The SquaredSmoothing command changes the operation of SmoothingSegments
  3474.  (see) slightly.  It has no effect if SmoothingSegments are not being used.
  3475.  The NoSquaredSmoothing cancels SquaredSmoothing.
  3476.  
  3477.  With SquaredSmoothing selected, the averaging of the Y values is done by
  3478.  taking the positive root of the average of the sum of the squared Y
  3479.  values.
  3480.  
  3481.  I have found this to make a nearly negligible difference in practice, but
  3482.  your experience may vary.
  3483.  
  3484.  
  3485. ?StartByte
  3486.  
  3487.  The StartByte command allows you to set a byte offset into a file at which
  3488.  GFFT will start reading samples.  StartByte should only be used with
  3489.  unformatted files, those whose format is not recognized by GFFT, or whose
  3490.  format is being ignored with the IgnoreFormat command, and only by those
  3491.  who understand the file format.  If the StartByte command is given without
  3492.  an argument, the StartByte feature is canceled.
  3493.  
  3494.  See also the StartFrame command, which is intended for more general usage.
  3495.  
  3496.  
  3497. ?StartFrame
  3498.  
  3499.  The StartFrame command allows you to set an offset into the sampled data
  3500.  at which GFFT will begin reading.  This is intended for use with formatted
  3501.  files which GFFT understands or unformatted files.  Use this command if
  3502.  you wish to ignore an early portion of the data.
  3503.  
  3504.  Syntax:
  3505.  
  3506.      StartFrame [<frame number: non-negative integer>]
  3507.  
  3508.  If Time3D processing is being performed, the StartFrame will apply to the
  3509.  data as a whole, and not to each Time3D segment.
  3510.  
  3511.  
  3512. ?Terminal
  3513.  
  3514.  The terminal command allows you to set the terminal type to be used by
  3515.  Gnuplot.  Ordinarily, GNUPLOT will default to using the 'amiga' terminal.
  3516.  Thus, your plot will be displayed on an amiga screen.  Using the
  3517.  'terminal' command, you can set it to use a printer, plotter, or anything
  3518.  else supported by GNUPLOT.  
  3519.  
  3520.  Syntax:
  3521.  
  3522.      terminal
  3523.      terminal <terminal name: name>
  3524.      terminal '<terminal specification: character string>'
  3525.      terminal "<terminal specification: character string>"
  3526.      terminal ""
  3527.      terminal ''
  3528.  
  3529.  If the terminal command is given without any arguments, or if the argument
  3530.  is a null string enclosed in "" or '', GNUPLOT will use the default
  3531.  terminal type.  If the argument given to the terminal command consists of
  3532.  more than one word separated by spaces, it should be enclosed in "" or ''
  3533.  (whichever is not used in the actual string).
  3534.  
  3535.  Examples:
  3536.  
  3537.      terminal amiga
  3538.      terminal hp500c
  3539.      terminal dumb
  3540.      terminal 'postscript landscape color "Courier" 14'
  3541.      terminal
  3542.  
  3543.  Note that if you specify a printer terminal, you should also use the
  3544.  PlotOutput command to specify the output device (ser: or par:, NOT prt:)
  3545.  or filename.
  3546.  
  3547.  For further information about the many GNUPLOT terminal types, refer to
  3548.  the GNUPLOT documentation.
  3549.  
  3550.  Note: the version of GNUPLOT supplied with WinGnuPlot defaults to using a
  3551.  terminal 'amigawindow' which requires MUI.  For use with GFFT, this
  3552.  must be changed to terminal 'amigascreen,' which is done by renaming the
  3553.  file .gfft-WinGnuPlot to .gfft as discussed in the INSTALLATION file.
  3554.  
  3555.  
  3556. ?Time3D
  3557. ?NoTime3D
  3558. ?TimeOffset
  3559. ?TimeOverlap
  3560. ?TimeSegments
  3561. ?TimeSegSize
  3562.  
  3563.  Syntax:
  3564.  
  3565.      Time3D
  3566.      NoTime3D
  3567.      TimeOffset [<Time Offset: integer>]
  3568.      TimeOverlap [<Time Overlap: floating point number>]
  3569.      TimeSegments [<Time Segment Count: integer>]
  3570.      TimeSegSize [<Time Segment Size: integer>]
  3571.  
  3572.  The '3D-Time' facilities of GFFT are intended to enable you to show how a
  3573.  spectrum varies with time.  GFFT is very flexible in how it enables you to
  3574.  do this.  The results can also be plotted in 3 dimensions by GNUPLOT where
  3575.  Z is the axis of time.
  3576.  
  3577.  The basic model is as follows: The sample frames are divided into segments
  3578.  called 'Time Segments,' and a spectrum analysis is performed on each Time
  3579.  Segment.  Time Segments can be overlapped, and the overlap can either be
  3580.  specified as a fraction of the size of each Time Segment ('Time Segment
  3581.  Overlap') or as the number of frames by which each Time Segment is ahead
  3582.  of the previous one ('Time Segment Offset').  By default, the Time Segment
  3583.  Overlap is set to 0.5 (i.e. 50%) and the 'Time Segment Offset' is computed
  3584.  automatically.  Then, either the number of time segments can be specified
  3585.  (this is the 'Time Segment Count') or, their size can be specified (this
  3586.  is the 'Time Segment Size') whichever is more convenient or useful to your
  3587.  application.
  3588.  
  3589.  One of the two parameters Time Segment Count and Time Segment Size must be
  3590.  set.  When either of these two parameters is set, any previous value of
  3591.  the other one will then be determined automatically.
  3592.  
  3593.  Time Segment Overlap has a default value of 0.5.  If Time Segment Offset
  3594.  is set, it supercedes Time Segment Overlap.
  3595.  
  3596.  If you set any of the above 3D-Time parameters, Time3D mode is activated
  3597.  automatically.  You may deactivate it by giving the NoTime3D command, and
  3598.  subsequently reactivate it by giving the Time3D command.
  3599.  
  3600.  You may also adjust the X Rotation and Z Rotation factors used by GNUPLOT
  3601.  in rendering the 3-d plot using the RotX and RotZ commands.
  3602.  
  3603.  Note that Time Segments are distinct from the FFT 'segments' used in a
  3604.  flat spectral analysis--and in the FFT analysis within each Time Segment.
  3605.  If each Time Segment is large enough relative to the number of Bins, there
  3606.  may be more than one FFT segment within each Time Segment, the results of
  3607.  which are averaged to reduce the variance.  Within each Time Segment, the
  3608.  usual 'Bins,' 'Overlap,' 'Pad,' and window shape parameters still apply,
  3609.  so the full flexibility of a flat GFFT is available (though the maximum
  3610.  number of bins possible may be reduced).  Only one parameter available to
  3611.  a flat analysis is unavailable for analysis within each Time
  3612.  Segment--StartFrame.  StartFrame will apply to the input file as a whole
  3613.  and not to each Time Segment.
  3614.  
  3615.  In cases where 3D-Time analysis reduces the number of bins possible, the
  3616.  use of high performance window shapes such as Hann or 74dB Blackman-Harris
  3617.  is recommended.
  3618.  
  3619.  
  3620.  Examples:
  3621.  
  3622.  1.  Suppose you just want a rough idea as to how the spectrum in a fairly
  3623.  small sample file (such as an instrument) varies over time, and are
  3624.  willing to use the default Time Segment Overlap (50%), and would simply
  3625.  like each segment to use the maximum Bins size possible (with overlap, if
  3626.  possible).  You might figure 5 time segments would be adequate to get a
  3627.  rough idea, yet would not be too many considering the number of frames.
  3628.  (If you have a very small sample file, you might have to use only 2 or 3
  3629.  Time Segments.  Increasing the number of Time Segments will reduce the
  3630.  maximum possible number of bins, so there is a trade-off here which is
  3631.  critical for small sample files.)
  3632.  
  3633.      gfft>read piano.iff
  3634.      gfft>TimeSegments 5
  3635.      gfft>74dB-Blackman-Harris
  3636.      gfft>OK
  3637.  
  3638.  If the Bins value had previously been set to a specific value, or if a
  3639.  NoOverlap command had previously been given, you would also include one of
  3640.  the following commands prior to OK:
  3641.  
  3642.      gfft>Bins
  3643.      gfft>Overlap
  3644.  
  3645.  2.  Suppose you wish to divide the sample file into non-overlapping time
  3646.  segments which could each be analyzed with 1024 bins (with no overlap or
  3647.  padding within each time segment).
  3648.  
  3649.  First set the Time Segment Size parameter to 2048, then set the Time
  3650.  Overlap parameter to 0.  (For non-complex data, there must be 2 sample
  3651.  frames for each FFT bin.)  You may either specify 1024 bins or use the
  3652.  maximum (default) setting, which is re-established by giving a Bins
  3653.  command with no argument.  Since exactly 2048 frames are available in each
  3654.  Time Segment, and this corresponds exactly to what would be required for
  3655.  1024 bins, no overlap will be used within each Time Segment regardless of
  3656.  whether the Overlap mode is engaged, so it is not necessary to give the
  3657.  NoOverlap command in this case.
  3658.  
  3659.      gfft>Read manysamples.aiff
  3660.      gfft>TimeSegSize 2048
  3661.      gfft>TimeOverlap 0
  3662.      gfft>Bins
  3663.      gfft>OK
  3664.  
  3665.  3. Suppose you wish to have each Time Segment to be ahead of the previous
  3666.  one by exactly 1000 frames.  (This might apply if you want the z axis to
  3667.  have increments of 0.1 second, and the sampling rate was 10,000.)  You
  3668.  consider some Time Segment overlap of approximately 0.5 to be acceptable,
  3669.  but you would like an analysis with 1024 bins.
  3670.  
  3671.      gfft>Read myrate10000
  3672.      gfft>TimeSegSize 2048
  3673.      gfft>TimeOffset 10000
  3674.      gfft>OK
  3675.  
  3676.  
  3677.  4.  Suppose you have a VERY large sample file, and would rather not
  3678.  analyze the whole thing, but would like a 'spot' analysis every 100,000
  3679.  frames.  You would like to have 1024 bins used in each analysis, but would
  3680.  prefer to reduce the variance of each 'spot' spectrum by averaging 4
  3681.  overlapped segments within each time segment.
  3682.  
  3683.  Note that the overlap used for a flat spectral analysis and within each
  3684.  Time Segment is fixed at 0.5 and cannot be changed (though it can be
  3685.  turned off).  Therefore, 2 overlapping FFT segments would occupy 1.5x the
  3686.  space of one segment, 3 overlapping segments would occupy 2x, and 4
  3687.  overlapping segments would occupy 2.5x if exactly these numbers of frames
  3688.  are available.  
  3689.  
  3690.  So, to get 4 overlapped FFT segments within each Time Segment, we would
  3691.  specify the TimeSegSize to 2.5 x (1024 x 2) which is 5120.  In this case
  3692.  we would have to specify the Bins too, otherwise they would default to
  3693.  the maximum possible, 2048.
  3694.  
  3695.      gfft>Read hugefile.aiff
  3696.      gfft>TimeOffset 100000
  3697.      gfft>TimeSegSize 5120
  3698.      gfft>Bins 1024
  3699.      gfft>OK
  3700.  
  3701.  (Actually, 2 overlapping segments will be used for any number of frames
  3702.  greater than 1 segment but less than 2 segments, 3 overlapping segments
  3703.  will be used for exactly the number of frames in 2 segments, 4 overlapping
  3704.  segments will be used for any number of frames greater than 2 segments but
  3705.  less than 3 segments, and so on.)
  3706.  
  3707.  
  3708. ?Triangle
  3709.  
  3710.  The Triangle command selects windows of triangular shape.  These windows
  3711.  will be applied to the data in segments whose size is determined by the
  3712.  number of bins.  The Triangle command cancels the effect of any preceding
  3713.  window shape command.
  3714.  
  3715.  The 'Triangle' window is the next simplest window, after the Rectangle
  3716.  window.  Its shape is that of a triangle peaking in the center of each
  3717.  data segment.  The 'Triangle' window is often called the 'Bartlett'
  3718.  window, after a scientist who found it to be useful.
  3719.  
  3720.  The triangle window is superior to the rectangle window in side-lobe
  3721.  rejection.  In turn, it is inferior to all remaining window shapes in
  3722.  side-lobe rejection.
  3723.  
  3724.  
  3725. ?Welch
  3726.  
  3727.  The Welch button selects windows of particular shape.  These windows will
  3728.  be applied to the data in segments whose size is determined by the number
  3729.  of bins.  The Welch command cancels the effect of any preceding window
  3730.  shape command.
  3731.  
  3732.  The Welch window is based on the formula presented by Press, et al, in
  3733.  their book 'Numerical Recipes.'  It is superior to the triangle and
  3734.  rectangle windows in sidelobe rejection.
  3735.  
  3736.  
  3737. ?Workbench
  3738.  
  3739.  The Workbench command will open a 'GFFT Dialog Window' on the workbench
  3740.  (or the default public screen) to continue the current GFFT session.  If
  3741.  you have already selected file(s) and/or options, these will continue in
  3742.  effect and may be shown in the Dialog Window display.  From the GFFT
  3743.  Dialog Window, you may perform any operations ordinarily available in that
  3744.  display, the same as if you had clicked on the GFFT icon to begin with.
  3745.  
  3746.  While the GFFT Dialog Window is active, no more commands will be accepted
  3747.  from the console, but you may be prompted to enter data points from the
  3748.  console if 'con:' is specified as the sample file.
  3749.  
  3750.  To resume entering commands from the console, click the 'CLI' button on
  3751.  the lower left hand of the GFFT Dialog Window display.  At that point,
  3752.  the GFFT Dialog Window will be removed and GFFT will prompt for the
  3753.  next command.
  3754.  
  3755.  You may go back and forth between graphical and command modes as often as
  3756.  you wish.
  3757.  
  3758.  
  3759. ?Write
  3760.  
  3761.  The Write command enables you to explicitly name and save the file of
  3762.  spectral data written by GFFT (and read by GNUPLOT).  By default, if plot
  3763.  mode is activated (which is the default except for CLI-Batch mode),
  3764.  temporary spectrum file(s) are created automatically by GFFT for GNUPLOT
  3765.  and deleted when GFFT exits, so it is not necessary to give a Write
  3766.  command.  But if you would like to save the spectrum file, or if plot mode
  3767.  is not activated, you must specify an explicit spectrum file name before
  3768.  giving the OK command.  To return to the default (using automatically
  3769.  named temporary files), give the Write command without an argument.
  3770.  
  3771.  Note that spectral data will only be written after an OK command is given.
  3772.  
  3773.  Syntax:
  3774.  
  3775.      Write [<filename>]
  3776.      Write con:
  3777.  
  3778.  There are several reasons why you would use a Write command:
  3779.  
  3780.      (1) GNUPLOT uses the filename in the legend it creates to
  3781.          identify plotted lines.  You may wish to use a nicer name
  3782.          than the one automatically created for the temporary file.
  3783.  
  3784.      (2) You want to save spectral data files for later plotting or
  3785.          or other uses.
  3786.  
  3787.      (3) You wish to display the output data points on the console.
  3788.          Note that if you specify the device 'con:' as the spectral
  3789.          output data will be written to the console.  In this mode,
  3790.          it will not be possible to plot the data. 
  3791.   
  3792.  Note that if you perform more than one FFT without changing the Write
  3793.  name, the later data will, by default, overwrite the earlier data from the
  3794.  beginning.  If you would rather accumulate data in the same file (such as
  3795.  if you are computing a particular spectrum in bands), use the Open command
  3796.  (see) instead of the Write command.  If you would like to view several
  3797.  spectra in the same plot, use the CombinePlots command (see).
  3798.  
  3799.  Example:
  3800.  
  3801.      sys> gfft
  3802.  
  3803.      gfft> read whales.iff
  3804.      gfft> hann
  3805.      gfft> write whales-hann
  3806.      gfft> ok
  3807.      gfft> combineplots
  3808.      gfft> 74db
  3809.      gfft> write whales-74dB
  3810.      gfft> ok                 ;both whales-hann and whales-74db are plotted
  3811.  
  3812.  
  3813. ?Appendices
  3814.  
  3815.  The following appendices are present: code contributors, idea
  3816.  contributors, and financial contributors.
  3817.  
  3818.  
  3819. ?code contributors
  3820.  
  3821.  Code has been submitted by and accepted from...
  3822.  [See your name here...please contribute code, GOOD code.]
  3823.  [Please see README file for further details.]
  3824.  
  3825. ?Idea Contributors
  3826. ?References
  3827.  
  3828.  Just a few of the multitude who have developed the ideas behind this
  3829.  program can be listed here...
  3830.  
  3831.  Jean Baptiste Joseph Fourier...developer of the Fourier Series
  3832.  Danielson and C. Lanczos...FFT pioneers of the 1940's
  3833.  J.W. Cooley, J.W. Tukey, and R.L. Garwin of IBM...first to make the
  3834.    decimation-in-time FFT public, and in the public domain (YES!)
  3835.  N. Brenner of Lincoln Laboratories...refined the 'in-place' algorithm
  3836.  Julius Von Hann...developer of the Hann[ing] window
  3837.  Fredric J. Harris, window expert and refiner of the 'Blackman-Harris'
  3838.    window functions
  3839.  
  3840.  (Very much was learned from Press, et. al, below, listed in references) 
  3841.  Jay Miner and the other creators and developers of the Amiga computer
  3842.  Guido van Rossum for SOX and 'FAQ: Audio File Formats' (from which much
  3843.    was learned)
  3844.  David Champion for OmniPlay (from which some was learned)
  3845.  Malcolm Slaney and Ken Turkowski for ConvertFromIeeeExtended (from which
  3846.    some was learned)
  3847.  Richard M. Stallman and the Free Software Foundation, for GNU Emacs
  3848.    (which was used in the creation of this program), the GNU General
  3849.    Public License, and the GNU Manifesto
  3850.  Dennis M. Ritchie, for the C programming language (see references)
  3851.  The SAS Institute, Inc., for the SAS/C compiler  (A quality product)
  3852.  Thomas Williams, Colin Kelley, and innumerable contributors for
  3853.    Gnuplot
  3854.  Adrian Aylward and Robert Poole for POST version 1.86enh
  3855.  All the others whose work and vision has made this possible 
  3856.  
  3857.  REFERENCES:
  3858.  
  3859.  Commodore Amiga, Inc., 1992. 'Amiga ROM Kernel Reference Manual:
  3860.  Libraries, Third Edition' and 'Amiga ROM Kernel Reference Manual: Includes
  3861.  And Autodocs, Third Edition.'  (Reading, Massachusetts: Addison-Wesley
  3862.  Publishing Company)
  3863.  
  3864.  Fredric J. Harris,  1978. "On the Use of Windows for Harmonic Analysis
  3865.  with the Discrete Fourier Transform," Proceedings of the IEEE, vol. 66
  3866.  pp. 51-83.
  3867.  
  3868.  Brian W. Kernighan and Dennis M. Ritchie, 1988.  'The C Programming
  3869.  Language, Second Edition.'  (Englewood Cliffs, New Jersey: Prentice Hall)
  3870.  
  3871.  Press, Flannery, Teukolsky, and Vetterling, 1988.  'Numerical Recipes in
  3872.  C' (Cambridge UK and New York: Cambridge University Press), pp. 398- 470.
  3873.  
  3874.  SAS Institute, Inc., 1993.  SAS/C Development System User's Guide, Volumes
  3875.  1-3, Version 6.50.  (Cary, NC: SAS Institute, Inc.)
  3876.  
  3877. ?financial contributors
  3878.  
  3879.  Only a limited number of financial contributors, and ONLY those who give
  3880.  their EXPRESS permission will be listed here, and identifications may be
  3881.  limited in length (1-2 lines maximum) and/or edited.  Presence on this
  3882.  list DOES NOT constitute any form of endorsement either to the parties
  3883.  listed or from them to GFFT.  For the purposes of this list, purchasing
  3884.  services at minimum donations does not qualify.
  3885.  
  3886.  
  3887. ?Installation
  3888.  
  3889.  Installation instructions are included in a file named 'INSTALLATION.'
  3890.