home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 6
/
FreshFish_September1994.bin
/
bbs
/
misc
/
gfft-1.12.lha
/
GFFT
/
gfft.help
< prev
next >
Wrap
Text File
|
1994-08-29
|
172KB
|
3,890 lines
?preface
This file is intended for display by the gfft 'help' facilities. However,
it also currently constitutes the most complete gfft manual, so, if you
really want to read a lot about GFFT, you might want to read it with
MORE or search for key strings using your favorite searching,
text-editing, or searching program.
The format is intended to be compatible with that used by the GNUPLOT
help/manual file, so one day I will be able to print out hardcopy
documents my massaging this file and using troff, tex, postscript, etc.
(A suitable massage might even render it in AmigaGUIDE format).
?organization
This document is organized as follows:
Preface
Organization
Introduction
General Topics
Workbench Gadgets
CLI Commands
Appendixes
?introduction
(In the following discussion, additional help topics are highlighted with
angle brackets like this: >introduction<. A list of additional help
>topics< is also available. These topics may be displayed using the HELP
requester or command.)
GFFT is an FFT-based spectrum analysis program with many features. It is
intended to provide higher resolution and higher quality than most
real-time FFT-based spectrum analyzers, and, in conjunction with a
suitable plotting program (such as GNUPLOT, a separate program written by
others which GFFT can invoke and control) it can produce high quality
spectrum plots on screen or paper (including the output of Postscript or
TeX files if desired). GFFT can be run either through a Workbench
graphical interface or from the CLI in either interactive or batch (single
command) modes.
GFFT can also do such things as control GNUPLOT to plot several spectra on
the same screen or page (see >Workbench Plot-Combine< or >CombinePlots<),
and re-plot previously stored spectrum data files (see >Workbench
Spectrum-File-Open< or >Open<).
WORKBENCH USAGE
---------------
From the Workbench, GFFT may be started by double-clicking on its icon.
The GFFT Dialog Window then appears. Within the GFFT Dialog Window, you
may select sample files to analyze either by using the ASL file requester
(which comes up after you click on the 'SELECT' gadget), or by entering
their name(s) into the 'Sample File' string gadget. Note that the ASL
file requester requires Workbench 2.0 or higher.
If you prefer, you may use 'extended selection' to select one or more
sample files in advance. This is done by first single-clicking on the
GFFT icon, and then holding down the Shift key while clicking on a series
of one or more icons representing the sample files you wish to analyze.
You double-click on the last sample icon selected to start GFFT.
GFFT is also distributed with a sample whose icon automatically invokes
GFFT (i.e., it has a GFFT tooltype).
Within the GFFT dialog window, you use the 'OK' button to actually begin a
spectrum analysis, the 'NEXT' button to advance to the next selected
sample file (if more than one was selected on the Workbench), the close
gadget (at the top left of the window border) to terminate GFFT, and the
'CLI' button to continue the GFFT session in CLI mode (if you need to
activate one of the few features available only in the GFFT CLI
interface). (You can then return to the GFFT Dialog Window by giving the
'Workbench' command.) There are also many other gadgets in the dialog
window which allow you to view and adjust parameters and use other
features. Notably, the '3D-Time' button brings up a requester allowing
you to do 3D analysis using time as the third dimension, and the 'CAL'
button brings up a requester allowing you to specify one or more
calibration files to be applied to the spectral data.
Help for any gadget in the GFFT Dialog Window may be displayed by holding
the CTRL key when clicking on that gadget. (String gadgets may need to be
de-selected first.) Additional information may be displayed by using the
Help Requester which comes up when you click on the 'HELP' button.
If you click the Version/Copyright button, a requester providing
information about the author, your rights to modify and distribute GFFT,
additional services available, disclaimers, and so on will be displayed.
CLI USAGE
---------
From the CLI, GFFT may be run as an >interactive< program which prompts
for each argument or command, or as a >batch< program for which all
arguments and commands have been specified as command-line arguments. If
no arguments are given in the command line invoking GFFT, interactive mode
is assumed. For more information about the CLI commands available in
GFFT, give the 'Help' command while running GFFT in CLI-interactive mode,
or give the batch mode question-mark (?) command.
sys> gfft ?
OR
sys> gfft
gfft> help
If you desire, a Workbench session can be started from the CLI. To do
this, give GFFT the 'Workbench' command. From the Workbench, you can then
go back to the CLI session (if it was interactive) by clicking the CLI
button.
sys> gfft workbench
[workbench session]
OR
sys> gfft
gfft> workbench
[partial workbench session ended with click on CLI button]
gfft> ok
gfft> quit
Since GFFT is designed to work in conjunction with GNUPLOT, you should
install GNUPLOT before running GFFT. You should also follow the other
instructions included in your GFFT distribution in the file named
INSTALLATION.
STARTUP FILE
------------
When starting, GFFT looks for a file named .gfft either in the current
directory (which is the one in which GFFT itself is found, if started from
the Workbench), or if not found there, in the system S: directory. This
file can contain a series of GFFT CLI commands, one per line. Lines
beginning with ; # or ! are ignored, as are blank lines. This file is
executed before GFFT does anything else. By using a .gfft file, you can
'customize' the GFFT defaults and other features to match your application
or environment.
HOW TO LEARN MORE
-----------------
If spectrum analysis is new to you, consider reading the HELP topic
>data-windowing<, but don't be discouraged if it is a little hard to
understand at first.
Also, check the >References< topic.
?General-Topics
?Topics
Help is also available for any additional topic named <topic> by entering
help <topic>
From the WORKBENCH, help is available for these topics through the
HELP requester which comes up after the HELP button has been clicked.
The additional topics are:
introduction topics interactive-CLI batch
code contributors financial contributors idea contributors
accuracy speed memory references
floating-point-errors CLI-commands
GFFT-Dialog-Window Workbench-Message-Display
More-About-Bins temporary-files Data-Windowing
zoom
?zoom
GNUPLOT, which GFFT uses, does not have an interactive 'zoom' capability.
But, using GFFT it is possible (if not extremely fast) to zoom in or out
from a spectrum using the following gadgets:
Low Freq (Low Frequency)
High Freq (High Frequency)
Low Y
High Y
(The 'Low Y' and 'High Y' gadgets are available in the Calibration and
Magnification requester which comes up when you click on the 'Cal & Mag'
button.)
Once you modify one or more of these parameters to explore the part of the
spectrum you are most interested in, you need not repeat the entire
analysis; it is only necessary to repeat the plotting phase, and this is
accomplished through using the RePlot button.
If you are using the interactive CLI interface, the corresponding commands
are LowFrequency, HighFrequency, LowY, HighY, and RePlot.
See the help information for these buttons or commands for further
discussion.
?More-About-Bins
?Data-Windowing
[This is somewhat technical, but may help you understand some of the
parameters in GFFT. If you don't understand it, don't worry; you can
usually just use the GFFT defaults, adjusting the Bins parameter downward
to about 1024 or less if you are short on memory.]
When dealing with functions that are sampled at evenly spaced intervals in
time, it is appropriate to use the 'discrete Fourier transforms.' These
equations map N complex numbers from the 'time domain' to the 'frequency
domain' (and back again). The 'fast Fourier' techniques use various
symmetries to reduce the computation times from O(N times N) to O(N log
N), but one price paid for this is that N must be a integer power of 2.
This is also true if our N is the number of real sampled data points, or
one-sided (positive frequency only) frequency 'bins,' though it will
take 2 real data points to yield an amplitude estimate at each positive
frequency (which has been averaged with the amplitude at a corresponding
negative frequency).
Another problem with Fourier transformation 'periodograms' (arrays of
frequency values computed from time-sampled values) is that the variance
(random error) can be quite high.
We can deal with both of these problems by using data windowing. Rather
than choosing the largest N (being a power of 2) that we could use with
our number of real sampled data points, we may choose a smaller N (still
being a power of 2), compute a series of periodograms, one from each
successive segment or 'window' of N times 2 data points, and then average
their results. This reduces the variance considerably (at the price of
lowering the number of frequencies in the averaged periodogram, which is
frequently not a problem). Next, we can overlap the last full window with
another window such that any remainder of data points are accounted for.
In fact, there is no reason why we can't overlap ALL of the windows by
50%, as that can reduce the total variance 9/11 as much as having twice as
much data to average over to begin with (see Press, et. al, 1988, page
445).
Unfortunately, there are some problems with having N's of finite length,
which is even exacerbated by averaging periodograms from smaller windows.
(Ideally, we would have an infinite N.) We tend to get spurious
'sidelobes' around each spectral peak. This occurs because the window
truncates the real signal, usually at some non-zero point. Sidelobing
(and other artifacts) can be reduced by using more sophisticated windows.
The trivial window type (assumed above) is rectangular, we simply take the
data points in each window as-is. This is the same as if we multiplied
each of the data points within our window by 1, and all data points
outside the window by zero. There are a huge variety of window functions
which begin at a low multiplier or zero at the beginning of the window,
ramp up to 1 in the middle, and then return to a low multiplier or zero at
the end. Each of these window 'types' has tradeoffs, but the Rectangle
window has the worst tendency to generate sidelobes because it truncates
the signal on both sides most abruptly.
GFFT includes the following window types.
>Rectangle<
>Triangle<
>Parzen<
>Welch<
>Hann<
>Hamming<
>74-dB-Blackman-Harris<
>92-dB-Blackman-Harris<
These are listed roughly in order of increasing ability to suppress
spurious sidelobes.
Refer to the HELP message provided for each one of these for further
information. See also the HELP messages for >Bins<, >Overlap<, and
>Parseval<.
?Accuracy
?Speed
?Floating-Point-Errors
GFFT uses double precision floating point for the values related to time
and frequency, and single precision for the values related to amplitude
(or power, etc.). In the standard version, the Motorola Fast Floating
Point (FFP) math library is used--this reduces the precision of double
precision to approximately that of single precision, and (seems to) reduce
the precision of single precision somewhat also. The benefit is about a
4x improvement in overall (!) performance without a floating point unit
(FPU). Despite limited precision, I believe FFP is good enough for most
graphical purposes, and it is probably superior in accuracy to using
scaled integer arithmetic.
On systems with an FPU, the GFFT-FPU version is another 10% or more
faster, and it doesn't compromise the double precision and single
precision accuracy in any way.
The standard FFP version doesn't handle errors such as divide by zero very
well, but GFFT attempts to detect problems like this before they would
occur so they shouldn't occur often.
The FPU version uses in-line FPU code, which I have found to be much
faster than using the IEEE library. Even on a machine with an FPU, using
the IEEE library is actually slower than using the FFP library which
doesn't even use the FPU.
?Memory
?More-About-Bins
?Temporary-Files
The amount of memory GFFT allocates depends mainly on the number of Bins
used. If you are having trouble with running out of memory, try using a
smaller number of bins. By default, GFFT will use as many bins as can be
meaningfully used on the sample file being analyzed. Use the Bins command
or the Bins gadget to adjust the set the number of bins. 1024 is a
typical number of bins people use, though I prefer to use more. (The
number of bins determines your frequency resolution. However, when fewer
bins are used, more averaging is done, so the results may be more
accurate. GFFT will always try to use all data present in the most
intensive way, unless limited by options such as Frames and NoOverlap.)
Note that the number of bins must be a power of two, but GFFT will round
up to the next power of two if you specify a value which is not a power of
two.
There is also a 'Savememory' command available from the CLI which will
reduce the dynamic memory requirements of GFFT somewhat, while increasing
the fft computation times slightly on most processors. The difference in
execution time is barely measurable in most cases.
GFFT also stores temporary command files in RAM: and temporary data files
in T:. During a GFFT session, temporary data files may accumulate in T:,
and thereby fill up memory (if T: is assigned to RAM:T, as is typically
done.) You may reduce the memory requirements for temporary data files by
reassigning T: to your harddrive, as in any of the following examples (use
whichever is more appropriate):
Assign t: dh0:t
Assign t: dh1:t
Assign t: work:t
Assign t: df0:t
Alternatively, you can purge unused files from T: as necessary. Upon
termination, GFFT will delete all temporary data files from T: for you.
You can also choose to use named data files (using the Write command or
the Spectrum File gadget) instead of temporary data files, and store them
in particular directories on you harddrive or floppy disk. In this case,
temporary data files will not be used.
The temporary command files stored in RAM: are so small as to be of little
consequence. They are deleted upon the termination of GFFT.
GFFT may leave some extra libraries in ram upon termination. If you are
very short of memory, you may choose to use the following command (in
AmigaDOS 2.0 and later) to remove them after terminating GFFT:
Avail /flush
?Interactive-CLI
To run GFFT in the CLI 'interactive' mode, simply enter the command GFFT
to your CLI prompt. (This assumes that you have installed GFFT to a
directory in your path, or have the current directory set to the directory
or device where GFFT resides.) If you specify any additional arguments in
the GFFT command line, GFFT will start in 'batch' mode instead.
In interactive mode, GFFT will display a verbose header with copyright and
other information, and then begin prompting for additional commands with a
GFFT> prompt. If you would like a list of available commands, enter the
'help' command. Note that any command may be abbreviated to its minimum
unambiguous string, and GFFT is not case sensitive regarding commands.
Here is a sample session:
GFFT> read piano.iff
GFFT> ok
The OK command (which has the alias GO) actually starts the fft
processing. If no file has been specified, or there is other incomplete
or invalid information, GFFT will give an error message and return another
prompt, so that you may make corrections. Note that if the input file is
unformatted, you must specify the sampling rate using the 'rate' command.
For large sample files, it is also advisable to specify a specific number
of bins with the 'bins' command, or else GFFT will attempt to use the
maximum number of bins that could be useful with the number of data points
(or 'frames') in the file and other parameters. To see a list of most of
the current parameter settings, use the 'ShowSettings' command.
In interactive mode, the Plot option is turned on by default. If you do
not specify a spectrum file with the Write command, GFFT will create (but
not delete) a temporary file for you, and run GNUPLOT automatically to
plot the spectrum when it is completed. Alternatively, you can specify a
file to write the results to using the Write command, and disable Plot
mode with the NoPlot command if you didn't want to see the plot now.
Most commands actually set parameters rather than initiating any
particular action. However, it is not necessary (or possible, currently)
to use an explicit 'set' command; it is just implied. Thus, to enable
plot mode, you enter the command 'plot' instead of 'set plot mode.' Then,
plotting will be performed during the execution of the 'OK' command.
?Batch-Mode
?Batch
To run GFFT in batch mode, enter the command 'GFFT' followed by a series
of GFFT commands as they would be entered in 'interactive' mode. A
fairly large number (around 30 or so) commands may be entered in this
fashion, on several lines (so long as you do not press RETURN unescaped).
When you have entered all the commands that you wish gfft to process,
enter RETURN. GFFT will process all the commands possible, after
which your command prompt will be returned.
You can get a list of the available GFFT commands in batch mode by using
the question-mark (?) command, i.e.:
gfft ?
Unlike 'interactive' and 'workbench' modes, plot mode is disabled by
default in batch mode. You must specify 'plot' explicitly if you want a
plot to be created at the end of fft processing.
Also, an 'OK' command is usually not required in batch mode; it is implied
by the end of the command list if there is a read not followed by an OK
command.
Batch mode is intended to be an 'Amiga' compliant CLI mode (Commodore
discourages interactive CLI programs like GNUPLOT), and is particularly
useful for doing a series of analyses. A command file may be written and
then executed as a CLI script if desired. For example, you could write
a script like this:
gfft read white write white.fft bins 8192 lowf 0 highf 200 psd
gfft read white append white.fft bins 2048 lowf 200 highf 400 psd
gfft read white append white.fft bins 1024 lowf 400 highf 800 psd
gfft read white append white.fft bins 512 lowf 800 highf 1600 psd
gfft read white append white.fft bins 256 lowf 1600 highf 3200 psd
gfft read white append white.fft bins 128 lowf 3200 highf 6400 psd
gfft read white append white.fft bins 64 lowf 6400 psd
This would append a series of fft 'bands' to a output file named white.fft,
with successively lower resolution at higher frequencies (desireable for
logarithmic display of the frequency axis). (Note that an alternative
approach would be to use 'SmoothingSegments' with 'LogX' enabled.)
?Workbench Low-Frequency
The Low-Frequency gadget allows you to select the lowest frequency to be
output (and plotted, if applicable). By default, GFFT outputs and plots
the lowest non-zero frequency, and this is shown in the gadget if it can
be computed. You may enter zero or any integer or floating point number
into the Low-Frequency gadget.
Although the FFT process yields a value for the 0 frequency (e.g. D.C.),
typical FFT analyzers do not display it because it may display some offset
caused by the sampler. With GFFT, this is also the default, but you may
also choose to display the zero frequency by entering 0 into the
Low-Frequency gadget.
If no Low-Frequency has been entered, GFFT will display the lowest
frequency which will be plotted for each file, which depends on the
sampling rate, number of bins, and other factors. This default low
frequency is the same as the spacing between frequencies in the FFT, i.e.,
the frequency resolution.
Once you enter a new Low-Frequency it will remain in effect for the
current Sample File and any additional files processed in the same GFFT
session. However, you may restore the default by deleting the number
shown in the Low-Frequency gadget and pressing RETURN.
Note that a specified Low-Frequency is handled differently by the RePlot
button than by the OK and ReOutput buttons. See the help for the RePlot
button for further details.
?Workbench High-Frequency
The High-Frequency gadget allows you to select the highest frequency to be
output (and plotted, if applicable) up to the 'Nyquist frequency,' which
is one-half of the sampling rate. Any positive number (integer or
floating point) may be given as an argument. If you enter a number higher
than the Nyquist frequency, it will have no effect (except during RePlot,
see below). If no number has been entered, the default high frequency--
the Nyquist frequency--is displayed if it can be computed.
Once you enter a new high frequency it will remain in effect for the
current Sample File and any additional files processed in the same GFFT
session. However, you may restore the default by deleting the number
shown in the High-Frequency gadget and pressing RETURN.
Note that a specified high frequency is handled differently by the RePlot
button than by the OK and ReOutput buttons. See the help for the RePlot
button for further details.
?Workbench Smoothing
Using the Smoothing gadget, you can specify that the output be 'smoothed'
or averaged over a certain number of 'smoothing segments.' To do this,
enter the number of segments you wish to used into the gadget. (This
works best if the number of segments is much smaller than the number of
bins used). The number of of segments you specify is used to span the
range from the lowest non-zero frequency to the Nyquist frequency. To
cancel smoothing, press the NO button immediately to the right of the
smoothing gadget, or delete the number in the Smoothing gadget.
Without smoothing, if you plot with a large number of bins, or with LogX
on, you may find that the left or right side of the scale 'blooms' with a
wide range of values. Rather than 'pixel averaging,' GNUPLOT shows the
effect of plotting a line to each and every data point--even if many such
points occur within one vertical line of pixels. SmoothingSegments can
be used to eliminate this 'blooming' effect, simulate 'pixel averaging,'
and give you a more easily interpretable curve (though some important
actual detail may be lost!).
If LogX is enabled, the mesh applied to the output will be logarithmically
scaled. The combination of using LogX, SmoothingSegments, and a extra
large number of Bins is especially recommended for analysis using random
noise (e.g. white or pink noise) and/or whenever LogX is used.
The smoothing technique is very simple. A mesh of smoothing segments is
laid on top of the FFT bins, and for each smoothing segment containing
one or more data points, the average Y (amplitude) and X (frequency) values
are computed, and these become the X and Y values that are written to the
output file. If there is only one data point within a smoothing segment,
it is unchanged by this procedure. If there is no data point within a
smoothing segment, no data point will be output.
(If LogX is enabled, it is very possible that there will not be as many
data points as the number of segments you have chosen. For example, given
4096 bins and 400 smoothing segments, only about 225 points will actually
be produced because the actual data points at the lower frequencies are
farther apart than the smoothing segments, even though there are many
data points per segment at the higher frequencies. This does not happen if
LogX is not enabled.)
If SquaredSmoothing button (Sq) is selected, the averaging of the Y values
is done by taking the positive root of average of the sum of the squared Y
values.
I am aware of much more sophisticated smoothing or 'convoluting'
procedures which may have greater theoretic validity (e.g., see S. P.
Lipschitz, T. C. Scott, and J. Vanderkooy, 'Increasing the Audio
Measurement Capability of Analyzers by Microcomputer Postprocessing,'
Journal of the Audio Engineering Society, Volume 33, Number 9, September
1985...their technique simulates 1/3 octave bandwidth digital filters
which is useful in that it supposedly approximates human auditory
limitations), but these are also much more complicated. The present
technique is workable and useful, though it may be somewhat lacking in
theoretic validity (though it is not without precedent), and the results
should be interpreted with some caution (you are probably not seeing all
the real features that are there--but then that is true with any
smoothing technique).
?Workbench Smoothing-NO
The 'Smoothing-NO' button cancels smoothing. When clicked, any number you
may have entered into the smoothing gadget is cleared. You can achieve
the same effect by deleting the number in the smoothing gadget. By
default when GFFT is started, smoothing is turned off, and the
Smoothing-NO button will be selected.
See help for the Smoothing gadget for more information about the smoothing
used by GFFT.
?Workbench Smoothing-Squared
The Smoothing-Squared button changes the operation of the Smoothing gadget
(see) slightly. It has no effect if smoothing segments are not being used.
This is a toggle button which can be clicked on or off, but it has no
effect unless a number of smoothing segments has been entered into the the
Smoothing gadget.
With Smoothing-Squared selected, the averaging of the Y values is done by
taking the positive root of the average of the sum of the squared Y
values.
I have found this to make a nearly negligible difference in practice, but
your experience may vary. I'm not sure which averaging approach is more
'valid' (I suspect it depends on whether you are plotting logarithmically
or not).
?Workbench Mean
The Mean button determines whether GFFT will write Mean (average) or
summed values. By default, GFFT will write Mean values. In other words,
by default, Root Mean Square (RMS) Amplitude or Mean Square (MS) Power
values will be written.
I do not recommend the use of the 'summed' values (as with Mean
deactivated) except for special debugging purposes.
?Workbench More-Help
Getting help for any button or string gadget in GFFT is easy...simply
click on that button or gadget while holding down the CTRL key.
(The CTRL key is normally found to the left of the Caps Lock key.)
There is one bug here. If a STRING GADGET has ALREADY been activated, you
must deactivate it first before requesting help for it. To do this,
simply click anywhere else on the window (such as on the window
background). Then, you may click on the string gadget while holding the
CTRL key, and the help message will be displayed. It is not necessary to
deselect ordinary buttons first. Help is not available for the message
indicator on the bottom of the GFFT Dialog Window (sorry; I tried).
If you would like more information about the author of GFFT, how you can
support GFFT development, your rights regarding the use and distribution
of GFFT, the disclaimer, and other related information, click on the
Version/Copyright button on the top of the main GFFT Dialog Window. (Of
course, you must exit from this HELP requester first by clicking on the
'...OK' button on the bottom right. Aren't you glad I don't require you
to click away a Version/Copyright requester each time you start GFFT?
The HELP requester also provides two other 'canned' messages which you may
display by clicking on the 'Intro' and 'Topics' buttons on the bottom row.
The message for 'Topics' is a list of additional topics. You may enter
the name of any HELP topic into the string gadget and press RETURN.
Note that each message will be displayed in its own window and runs in its
own shell process, and, if you re-size or move the windows, you may display
more than one message at the same time. You may also use or even exit
from GFFT while still reading one or more help windows. Isn't
multitasking wonderful?
GFFT uses MORE to display help messages. MORE must be installed either
in the usual place (sys:utilities), C:, or in the same directory as
GFFT in order to be used by GFFT. Unfortunately, aliases for MORE
will not work. However, if you would prefer to use some text reader
other than MORE, you can either create a link or a copy of that reader
in any of these three locations. Links (made with the makelink) command
are preferable, as they take a minimum of storage, but they must be
on the same device or partition as the actual program itself. A link
in the directory C: to a reader named MORE2 would be created with the
following command:
makelink c:more c:more2
Running GFFT basically requires three steps: selecting a file, selecting
options (or just using the defaults), and then clicking the 'OK' button at
the bottom right of the GFFT dialog window.
?GFFT-Dialog-Window
Almost everything in the GFFT dialog window is a button or string gadget.
One notable exception is the Message Display at the bottom. This gives
information about the current GFFT operational status, and possibly
indicates what user action is currently most desireable. (If an FFT
analysis is being performed, the message 'Performing FFT analysis...'
will be displayed. This could take a considerable amount of time. During
this time, you will should not attempt to operate on any other GFFT Dialog
Window gadgets.)
When clicked, the Version/Copyright button at the top will bring up a
requester providing more information about the author of GFFT and the
copyright and disclaimer.
For further information on the Message Display, refer to help topic
>Workbench-Message-Display<.
?Workbench 3D-Time
The 3D-Time button brings up the 3D-Time requester which allows you to
set parameters associated with the display of how a spectrum varies over
time. Further information is available through the 'Help' button in that
requester.
?Workbench 3D-Time Help
The '3D-Time' facilities of GFFT are intended to enable you to show how a
spectrum varies with time. GFFT is very flexible in how it enables you to
do this. The results can also be plotted in 3 dimensions by GNUPLOT where
z is the axis of time.
If you would like to try it now, rather than reading about it first, just
click the 'Auto Set-Up 1' button, which will set up the 3D-Time parameters
to work for many, if not most, sample files. Then, click '...Done,' then
select a sample file to analyze (if you haven't done so already), and
click 'OK.' If it doesn't work, you'll just have to read more.
The basic model is as follows: The sample frames are divided into segments
called 'Time Segments,' and a spectrum analysis is performed on each Time
Segment. Time Segments can be overlapped, and the overlap can either be
specified as a fraction of the size of each Time Segment ('Time Segment
Overlap') or as the number of frames by which each Time Segment is ahead
of the previous one ('Time Segment Offset'). By default, the Time Segment
Overlap is set to 0.5 (i.e. 50%) and the 'Time Segment Offset' is computed
automatically. Then, either the number of time segments can be specified
(this is the 'Time Segment Count') or, their size can be specified (this
is the 'Time Segment Size') whichever is more convenient or useful to your
application.
One of the two parameters Time Segment Count and Time Segment Size must be
set. When either of these two parameters is set, any previous value of
the other one is cleared.
Time Segment Overlap has a default value of 0.5. If Time Segment Offset
is set, it supercedes Time Segment Overlap (whose value is then hidden).
If you set any of the above 3D-Time parameters, the toggle button 3D-Time
On is activated.
You may also adjust the X Rotation and Z Rotation factors used by GNUPLOT
in rendering the 3-d plot, and/or select Hidden3D display, which hides all
lines which are behind the 3D surface. (This feature may not work with
versions of GNUPLOT prior to 3.4.)
The Reset button clears Time Segment Count, Time Segment Size, Time
Segment Offset, and 3D-Time On, and Time Overlap, X Rotation, and Z
Rotation are set to their default values. Any of these values may also be
cleared or defaulted by deleting all characters in each string gadget and
pressing return.
You may advance to the next string gadget in this requester simply by
pressing RETURN.
Note that Time Segments are distinct from the FFT 'segments' used in a
flat spectral analysis and from the FFT analysis within each Time Segment.
If each Time Segment is large enough relative to the number of Bins, there
may be more than one FFT segment within each Time Segment, the results of
which are averaged to reduce the variance. Within each Time Segment, the
usual 'Bins,' 'Overlap,' 'Pad,' and window shape parameters still apply,
so the full flexibility of a flat GFFT is available (though the maximum
number of bins possible may be reduced). Only one parameter available to
a flat analysis is unavailable for analysis within each Time
Segment--StartFrame (a parameter which may only be set from the CLI).
StartFrame will apply to the input file as a whole and not to each Time
Segment.
In cases where 3D-Time analysis reduces the number of bins possible, the
use of high performance window shapes such as Hann or 74dB Blackman-Harris
is recommended.
Examples:
1. Suppose you just want a rough idea as to how the spectrum in a fairly
small sample file (such as an instrument) varies over time, and are
willing to use the default Time Segment Overlap, and would simply like
each segment to use the maximum Bins size possible (and with overlap, if
possible). You might figure 5 time segments would be adequate to get a
rough idea, yet would not be too many considering the number of frames.
(If you have a very small sample file, you might have to use only 2 or 3
Time Segments. Increasing the number of Time Segments will reduce the
maximum possible number of bins, so there is a trade-off here which is
critical for small sample files.)
Set the Time Segment Count to 5, and click 'Done.' In the main Workbench
Dialog Window click on 'Bins-MAX' and/or 'Overlap' if they had previously
been turned off.
2. Suppose you wish to divide the sample file into non-overlapping time
segments which could each be analyzed with 1024 bins (with no overlap or
padding within each time segment).
First set the Time Segment Size parameter to 2048, then set the Time
Overlap parameter to 0. (For non-complex data, there must be 2 sample
frames for each FFT bin.) This is sufficient to define this analysis, and
3D-Time On is selected automatically, so then you click 'Done.' If you
have not already set the number of Bins explicitly, you will notice that
it has been automatically set to 1024. Since exactly 2048 frames are
available for each FFT analysis, no overlap will be used regardless of
whether the Overlap button in the main GFFT Dialog is activated.
3. Suppose you wish to have each Time Segment to be ahead of the previous
one by exactly 1000 frames. (This might apply if you want the z axis to
have increments of 0.1 second, and the sampling rate was 10,000.) You
consider some Time Segment Overlap of approximately 0.5 to be acceptable,
but you would like an analysis with 1024 frequency bins.
Set the Time Segment Size to 2048 and the Time Segment Offset to 1000.
4. Suppose you have a VERY large sample file, and would rather not
analyze the whole thing, but would like a 'spot' analysis every 100,000
frames. You would like to have 1024 bins used in each analysis, but would
prefer to reduce the variance of each 'spot' spectrum by averaging 4
overlapped segments within each time segment.
Note that the overlap used for a flat spectral analysis and within each
Time Segment is fixed at 0.5 and cannot be changed (though it can be
turned off). Therefore, 2 overlapping FFT segments would occupy 1.5x the
space of one segment, 3 overlapping segments would occupy 2x, and 4
overlapping segments would occupy 2.5x if exactly these numbers of frames
are available.*
Set the Time Segment Offset to 100,000, and the Time Segment Size to 5120
(2.5 x (1024 x 2)). Click 'Done...' and set the Bins gadget (in the main
dialog window) to 1024.
(*Actually, 2 overlapping segments will be used for any number of frames
greater than 1 segment but less than 2 segments, 3 overlapping segments
will be used for exactly the number of frames in 2 segments, 4 overlapping
segments will be used for any number of frames greater than 2 segments but
less than 3 segments, and so on.)
?Workbench Ok
The OK button initiates an FFT according to all the specified parameters.
The selected Sample File will be read and transformed, the selected
Spectrum File file (if any) will be written to (otherwise, a temporary
file will be used), and a PLOT will be produced (if that option is
enabled).
This command is invalid if any parameters have been set incorrectly, if no
sample file has been selected, or if plot mode is disabled AND no named
(permanent) spectrum file has been selected.
Example:
1. select sample file using the requester that appears after pressing
SELECT in the Sample File row (requires 2.0+) or enter
filename directly in Sample File Gadget
2. plot is enabled by default in workbench mode; re-enable if disabled
by clicking on it
3. click the OK button
Note: depending on the size of the sample file, the number of bins and
other parameters you have set, as well as the CPU and/or FPU resources
available, an FFT analysis could take anywhere between a fraction of a
second to several weeks. So, if you don't get an immediate response, have
faith that GFFT is working, not hanging. If there is any error, GFFT
should let you know right away. If it is working away on your file, and
the number of bins is small compared with the size of your sample file,
you will see the disk light flickering occasionally.
While an FFT is being performed, DO NOT click on any other gadgets in the
GFFT Dialog Window.
?Workbench Cal-&-Mag
The 'Cal & Mag' button brings up the Calibration and Magnification
Requester which allows you to specify calibration files and values for
quantization, low Y, and high Y.
A help button is provided within the Calibration and Magnification
Requester which provides more information.
?Workbench Calibration Help
The Calibration and Magnification requester enables you to apply a
'calibration' to the output of GFFT. In this way, you can compensate for
the frequency response of your sampler, microphone, noise source, etc.
Any number of calibrations may be in effect at the same time. Each time a
filename is entered into the Calibration or DbCalibration gadgets, a new
calibration is linked into the current list of calibrations (even though
only the last one entered into each gadget is shown). The entire list is
canceled by clicking the Cancel All Calibrations button. A message window
shows the number of calibrations currently in effect, and indicates
whether a calibration file is currently being processed...which can take
some time.) (More about these gadgets follows...)
This requester also includes the Quantization gadget, into which a
quantization value can be entered. Quantization can be canceled by
clicking the Cancel button following the Quantization gadget, or by
erasing the value shown. (More about this gadget follows...)
This requester also includes the Low Y and High Y gadgets, which allow you
to adjust the Y range used in plotting. You may restore either or both of
these to the default (autoscaling) by deleting the value shown, or by
clicking the Cancel buttons which follow each one. It is best to set both
of these gadgets if setting either one. (More about these gadgets
follows...)
The Calibration gadget allows you to enter a calibration file to be
applied to the spectrum data before output. The DbCalibration gadget
allows you to calibrate using a file in which the amplitudes are scaled in
dB. Calibrations and DbCalibrations may be applied to spectrums in any
combination regardless of whether the final output is scaled in dB or not.
Each of these gadgets has a small 'S' button; when the S button is
clicked, a file requester comes up to allow you to select the file. (This
file requester requires Workbench 2.0 or higher; otherwise, you will have
to enter the name into the corresponding gadget yourself.)
The calibration file(s) should be in the same format as the spectrum files
produced by GFFT itself. Each line (terminated by newline) should have a
frequency value, any number of spaces, and an amplitude value (NOT a
'power' or squared amplitude value!). The frequencies must be in
increasing order, and the range of frequencies must be equal to or greater
than that to be output by GFFT (see warning below). Lines beginning with
one of the following characters are considered to be comments:
# ; !
If a spectrum is calibrated by itself, the result should be a straight
line at either 1.0 or 0.0 (for dB output). Actually, due to slight
rounding errors, the actual result will be close to, but not exactly these
ideal values (e.g. 0.9999998). Given that Gnuplot will always scale the
output to the maximum Y magnification, small differences between these
values will be shown from the top to the bottom of the Y scale. To
correct this effect, consider setting the LowY and/or HighY values
explicitly to increase the vertical range, which will make the spectral
line look much flatter. Quantization can also be used, but it has some
other disadvantages.
Calibration as used here is unrelated to true complex 'correlation,' which
is not currently available in GFFT. Calibration has somewhat limited
accuracy and validity, but is still probably a feature worth having for
its usefulness. Note that in between points specified in a calibration
file, simple linear interpolation will be used by GFFT. If a frequency
higher than the highest calibration frequency is output by GFFT, it will
be calibrated by the value for the highest calibration frequency, and any
frequency lower than the lowest calibration frequency will be calibrated
by the value for the lowest calibration frequency. In other words, GFFT
uses simple horizontal extension of the calibration curve rather than
extrapolation. (WARNING! This could be dangerous if interpreted
improperly! Remember to provide calibrations over a range equal to or
greater than the range to be output by GFFT.)
One way to use Calibration is to perform a GFFT analysis on your signal
source itself, and then apply that result as a 'calibration' to your test
measurements. Another way is to write frequency response data provided by
a calibration laboratory (such as for a microphone) into a suitable
calibration file. In fact, both kinds of calibration can be used at the
same time.
The High Y gadget allows you to set the lowest value to be shown on the
vertical axis used for plotting by GNUPLOT. Using this gadget, you can
'zoom in' or 'zoom out' vertically into the plot. This gadget has no
effect on the data file written by GFFT.
The Low Y gadget allows you to set the lowest value to be shown on the
vertical axis used for plotting by GNUPLOT. Using this gadget, you can
'zoom in' or 'zoom out' vertically into the plot. This gadget has no
effect on the data file written by GFFT.
Note that GNUPLOT might do strange things if you specify a HighY value
without also specifying a LowY value and vice-versa. It may, for example,
decide to run the Y axis upside down in order to show the widest range of
Y values. Or, if less than one Y unit would be plotted when autoscaling
one value, GNUPLOT may decide the Y range is invalid. So, it is safest to
specify both High Y and Low Y.
In 3D mode, the vertical axis (representing power or amplitude) is
actually the Z axis, so the High Y and Low Y values selected are applied
to the Z axis in that mode.
Quantization lets you set a quantization value for GFFT output. For
example, a quantization of 0.1 will cause all amplitude or power values to
be rounded off to the nearest 0.1.
Note that you could use any arbitrary value for quantization (e.g.
12.3456) though this might not be very useful. Typical values might be
0.1, 0.05, 0.001, etc.
Quantization only affects the amplitude or power values. It has no effect
on the FFT computation itself, and does not affect the output of frequency
values.
?Workbench Copyright
The 'Copyright' button at the top of the GFFT Dialog window displays the
version number of GFFT you are running and a copyright notice. When
clicked, it brings up a requester which can provide more information about
the author, the NO WARRANTY disclaimer, the GNU General Public License
agreement, information about services available from the author and how
you can support the development of this program, and other information
about the development of this program.
?Workbench Help
The 'help' button brings up a requester which displays instructions on how
to obtain help for any gadget displayed in the GFFT Dialog Window,
provides a button to display an introductory message, and provides a
string gadget to get help on other topics suggested by the introductory
message.
?Workbench Help Topics
To get help for any general topic documented in the help file for GFFT,
enter the topic name in the Help Topic gadget and press return. To get
a list of topics which you may request help for, press the 'Topics'
button.
?Workbench Sample-File
The Sample File gadget displays the currently selected sample file (if
any) and allows you to enter the name of any other sample file to read.
You may click in the text box and type the name. This action may be
completed by pressing the Return key, or by clicking on any other button.
(As soon as Return is pressed or any other button is clicked, the file you
named will be opened.)
Under Workbench 2.0 or greater, you may also select a file to read using
the adjacent 'Select' button which brings up an ASL file requester.
If GFFT was started by clicking on the GFFT icon, the Sample File gadget
will be activated by default so that you can just start typing the name of
the first sample file to analyze. If GFFT was started by clicking on a
sample file icon that has GFFT as its tooltype, or through the 'extended
selection' of GFFT and one or more sample files, the name of the first
sample file will appear in the Sample File gadget and the gadget will not
be activated by default. If more than one sample file was selected, you
may advance to the next one by clicking on the 'Next' gadget.
GFFT can also read data points entered from the keyboard. See help for
the 'con:' button for further information.
GFFT can read both formatted and unformatted files. If GFFT understands
the format of the file (it currently understands IFF 8SVX, AIFF, and AVR
formats), it will automatically set the sampling rate, and it will know
the number of frames so that the maximum number of bins can be determined
without scanning the entire file. (GFFT also recognizes but does not yet
understand RIFF and VOCH formats. See help for the IgnoreFormat command
for some advice on how to deal with those formats.)
If the file is unformatted, you will have to set the sampling rate
manually before beginning an analysis. You may also have to use the Bits
and Unsigned commands if your unformatted file does not use the default
for unformatted files (8 bits, signed). If the file is formatted using an
unrecognized format, you may still be able to read it using the command
'StartByte' (which allows you to skip over the file header) if you know
how long the file header is, and 'Frames' (which allows you to read a
specified number of frames, skipping any file segments following the
sample data). This is not recommended unless you are very familiar with
the inner workings of the file format you are working with.
?Workbench Sample-Select
When the Select button is clicked, a requester will appear to let you
select the sample file for GFFT to read. This feature requires Workbench
2.0 or higher. (If you do not have 2.0 or higher, you can enter the
filename into the Sample File gadget, or use the 'extended selection' of
GFFT and one or more sample files from the Workbench.)
?Workbench Sample-Con:
In addition to reading stored sample files, GFFT can accept data points
through the keyboard 'con:' device. You can select this option either by
clicking on the Sample File 'con:' button, or entering the name 'con:'
into the Sample File string gadget. Next, you should enter the sampling
rate into the 'S Rate' gadget. Then, you can adjust other parameters.
Finally, after you click 'OK,' you will be prompted to enter each data
point from a console window. You may enter each data point as an integer
or as a floating point number with optional exponent.
If you started GFFT from the Workbench using Workbench 2.0 or greater, a
new console window will appear for you to enter data points. If you
started GFFT from the CLI, and then activated the GFFT Dialog Window using
the WORKBENCH command, you will be prompted to enter data points in the
original CLI from which you started GFFT (which might now be hidden by the
GFFT Dialog Window). If you started GFFT from the Workbench using
Workbench 1.3, the GFFT console window will be present whether you use it
or not (due to limitations of that Workbench version).
This may be useful if you have a small number of manually recorded data
points, or wish to experiment with FFT spectrum analysis to gain a deeper
understanding of it. For example, if you entered the following points:
> 1
> 0
> -1
> 0
You would get a spectrum of 2 points (Nyquist Frequency/2, Nyquist
Frequency) or 3 points if you set the Low Frequency to 0 (as "zero
frequency," i.e. D.C., would be included). The center frequency of
Nyquist Frequency/2 would have amplitude 0.707 and the amplitude would be
0 at the other frequency(ies). This illustrates the default normalization
of GFFT, since 0.707... is also the RMS amplitude of the signal you have
entered, and the frequency is 1/2 of the Nyquist Frequency.
?Workbench Octave-Low
The 'Octave Low' button selects the lowest octave currently available in
a formatted file (such as 8SVX) which may have more than one octave. If
there is only one octave present, it is considered to match the lowest
octave. 'Low Octave' is the default octave.
?Workbench Octave-2
The 'Octave 2' button selects the second (from the lowest) octave
available in a file with a format (such as 8SVX) which supports more than
one octave. If the sample file does not have this octave, this button
should be ghosted.
?Workbench Octave-3
The 'Octave 3' button selects the third (from the lowest) octave available
in a file with a format (such as 8SVX) which supports more than one
octave. If the sample file does not have this octave, this button should
be ghosted.
?Workbench Octave-4
The 'Octave 4' button selects the fourth (from the lowest) octave
available in a file with a format (such as 8SVX) which supports more than
one octave. If the sample file does not have this octave, this button
should be ghosted.
?Workbench Octave-5
The 'Octave 5' button selects the fifth (from the lowest) octave available
in a file with a format (such as 8SVX) which supports more than one
octave. If the sample file does not have this octave, this button should
be ghosted.
?Workbench Octave-6
The 'Octave 6' button selects the second (from the lowest) octave
available in a file with a format (such as 8SVX) which supports more than
one octave. If the sample file does not have this octave, this button
should be ghosted.
?Workbench Octave-7
The 'Octave 7' button selects the second (from the lowest) octave
available in a file with a format (such as 8SVX) which supports more than
one octave. If the sample file does not have this octave, this button
should be ghosted.
?Workbench Octave-Hi
The 'octave hi' button selects the highest available octave in a file with
a format (such as 8SVX) which supports more than one octave. This choice
is always valid, regardless of how many octaves are in the file.
?Workbench One-Shot-Only
The One-Shot Only button causes GFFT to read only the one-shot portion of
a sample in a format (e.g. 8SVX) supporting this feature. Pressing the
One-Shot Only button a second time will disengage it and cause GFFT to
read the entire sample.
Pressing the One-Shot Only button once will also disengage the Repeat Only
button if it had previously been engaged.
?Workbench Repeat-Only
The Repeat Only button causes GFFT to read on the repeat portion of a
sample in a format (e.g. 8SVX) which supports this feature. Pressing the
Repeat Only button a second time will disengage it and cause GFFT to read
the entire sample.
Pressing the Repeat Only button once will also disengage the One-Shot Only
button if it had previously been engaged.
?Workbench Channel
The Channel gadget selects a particular channel for a file in a format
(e.g. AIFF) which supports this feature. After entering the channel
number in this gadget, you may press return to have it entered and checked
immediately. If the selected channel is unavailable, an error requester
will appear, however, the number you selected will not be changed; it will
be up to you to enter a valid number. You must have entered a valid
channel number before clicking OK. To select the default channel, delete
all characters and press RETURN. (The default channel is always Channel
1.)
?Workbench Rate
The S Rate gadget automatically displays the sampling rate defined by a
formatted file and allows you to specify a rate for any file. For an
unformatted file, you must enter a valid sampling rate before clicking OK.
(Any positive floating point number is acceptable.) You may also override
the sampling rate value for a formatted file by entering a different rate
AFTER selecting the file. When the next formatted file is read in, the
Sampling Rate gadget will be set to the sampling rate indicated by that
file.
?Workbench Bins
The Bins gadget displays the current bins value, and allows you to enter a
different bins value if desired. By default, GFFT chooses the maximum
number of bins which could be put to use (considering the number of sample
frames and other parameters in effect). If you have a very large sample
file, or desire to reduce the spectral variance by averaging successive
frame segments, you should choose a smaller number of bins.
1024 is a typical number of bins, though I usually use more. You should
enter a value which is a power of 2. If you do not, GFFT will choose the
next higher power of two for you. If you select a number of bins higher
than the maximum, GFFT will detect this problem after you click OK.
When you enter a number of bins, the MAX Bins button will disengage. The
value you specify will then continue to be used for subsequent files
regardless of their size. To return to the default (MAX) bins setting,
press the MAX bins button, or delete all digits from the Bins gadget.
For an unformatted file, the default number of bins will not be known
until the file is scanned, and normally this does not happen until the
OK button is pressed, so the Bins gadget will remain blank unless you
choose to specify a non-default number of bins.
?Workbench Bins-MAX
The Bins MAX button indicates whether GFFT is automatically determining
the number of bins based on the number of frames in the file (and other
settings), as it does by default. Also, by clicking the MAX Bins button,
you can re-engage this automatic default mode. If the MAX Bins button is
unselected, it indicates that a number of bins was entered into the Bins
gadget, dis-engaging the default MAX mode.
(The MAX Bins gadget will not automatically be selected if you happen to
enter the maximum number of bins into the Bins gadget, as that fixed value
would continue to be applied to subsequent files regardless of their
size.)
?Workbench Plot
The Plot button is a toggle button which selects or de-selects Plot mode.
In Plot mode, GNUPLOT is automatically invoked in a shell process to
display the result of each spectrum analysis performed. If you have not
explicitly selected a file to which to write spectral data, GFFT will
automatically write a temporary file (in t:) for GNUPLOT to read. All
such temporary files will be deleted on exit from GFFT if you have
terminated the plot display. You terminate the plot display by pressing
RETURN after it has been displayed. GFFT can only display one PLOT at a
time, but you can overlay or concatenate several spectra in one PLOT
clicking the Plot-Combine ('&' following Plot) or Open buttons (see).
If Plot mode is de-selected, a spectrum file must be explicitly
specified--otherwise there is no point in doing the analysis since the
data would only be written to a temporary file and then deleted. GFFT
will check to see that either a spectrum file has been specified and/or
Plot mode is engaged when you click OK.
If you wish to create a nicely labeled Plot, it is preferable to
explicitly name each spectrum file, since GNUPLOT will use each the name
of each spectrum file to label the corresponding spectrum. Read HELP for
the Write gadget for further details.
?Workbench Plot-Combine
The Plot-Combine button (the ampersand following the PLOT button)
activates CombinePlots mode. In this mode, successive spectra are shown
together in the same plot display. Each spectrum is plotted with a
different color (or linetype) by GNUPLOT and labeled with the name of the
specified spectrum file or temporary file. Using CombinePlots mode,
different data and/or parameter choices can be compared.
CombinePlots will have no effect unless Plot mode is also engaged.
The Plot-Combine button is a toggle button. To disengage CombinePlots
mode after having engaged it, click the button again.
When CombinePlots mode is first engaged, the previously completed spectrum
(if any) becomes the first data set for the plotter, the next completed
spectrum becomes the second data set, and so on. If you would rather not
include the previously completed spectrum, click the 'Plot-Cut' (X) button
(immediately to the right) after engaging CombinePlots.
To use this mode most easily, CANCEL any spectrum file name you have
specified and let GFFT create sequentially named temporary files for you.
If you would like to save each spectrum to a named file, then YOU MUST
remember to create a different named file for each spectrum computed.
Otherwise, each new spectrum will overwrite the previous one, and you will
get nothing but the same spectrum over and over. For use with RePlot, you
will have to Plot-Cut (X) the current file first, or it will be repeated
twice. Use of Plot-Combine with Write-Append can also be tricky.
When CombinePlots mode is disengaged, all previously combined spectra are
'cut' off, so that if CombinePlots is re-engaged immediately, a new plot
combination starts from scratch.
To 'cut' only the last spectrum, click the Plot-Cut button once. To cut
several spectra from the plot combination, click Plot-Cut button several
times. Each time Plot-Cut is clicked, one more spectra is cut from the
end until there are no more spectra to be cut. (This is a useful way to
cut spectra that didn't quite work out without starting over.)
CombinePlots mode is very useful for many things including comparing the
effect of different parameters (e.g. window type), or for comparing
alternate sets of data representing the same original source (to get a
feel for the variance caused by random fluctuations). (When you are
recording sample files for later analysis, remember to record two or more
sample files so that you can compare them and see which spectral features
are truly inherent in the source and not the result of random
fluctuations. If the variance is minimal, the spectral lines for each
sample file should lay on top of one another, or nearly so. Note that
very large sample files (> 1,000,000 frames) may be necessary to reduce
the variance of a pink noise source in the low frequency ranges to
acceptable levels.)
?Workbench Plot-Cut
The workbench Plot-Cut button cuts the previous spectrum when in
CombinePlots mode.
To 'cut' only the last spectrum, click the Plot-Cut button once. To cut
several spectra from the plot combination, click Plot-Cut button several
times. Each time Plot-Cut is clicked, one more spectra is cut from the
end until there are no more spectra to be cut. (This is a useful way to
cut spectra that didn't quite work out without starting over.)
See help for the Plot-Combine button (immediately to the left) for further
information about CombinePlots mode.
?Workbench Overlap
The Overlap button is a toggle button which engages or disengages overlap
mode.
Because it makes the best use of a limited amount of data, overlap mode is
engaged by default. It is also able to include all the data in the
analysis, regardless of whether the number of frames is exactly 2n times a
power of 2 (where n is a positive integer). If you are more concerned
with making the best use of processing time, and are not concerned about
ignoring a trailing remainder of the data, you may wish to disengage
overlap mode.
In overlap mode, the windows applied to the data are overlapped. By
overlapping the windows (as compared with just laying them end-to-end to
cover all frames present) better use is made of a fixed amount of data in
reducing the variance of the computed spectrum. This is true for all
window shapes, but especially true for the non-rectangular ones.
Overlapping may provide up to 9/11 of the variance reduction of having
twice as much data to work with (see Press, et. al.).
If overlap mode is disengaged, successive windows will still be applied to
the input data (if the number of frames is 4 times or more greater than
the number of bins) and the result from each window will be averaged to
reduce the variance, but windows will not be overlapped. Also, any
partial window of data at the end will not be analyzed (unless pad mode is
selected, which is strongly discouraged).
Normally, windows are overlapped by half their length (i.e., the fixed
overlap percentage for flat FFT analysis is 50%). However, in overlap
mode, the overlap of the last window is decreased or increased to
encompass the remainder of the data.
Given real (i.e. non-complex) sample data, 2 data points (frames) are
required for each Bin. Thus, 1024 bins would require 2048 frames. With
50% overlap, two overlapping windows would fit exactly into 3072 (2048 x
1.5) frames, three overlapping windows would fit exactly into 4096 (2048 x
2) frames, and four overlapping windows would fit exactly into 5120 (2048
x 2.5) frames. But GFFT varies the overlap of the last window to fit
whatever amount of additional data is present after the last whole window
of data has been read. So, two windows are used for any number of frames
F such that 2048 < F < 4096, three windows are used for F = 4096, four
windows are used for 4096 < F < 6144, and so on, with the overlap of the
last window somewhere between 0 and 100% (non-inclusive).
Though this scheme will ensure that all frames are included in at least
one segment, it may result in either over-representation or
under-representation of the last region of data. This is a fairly minor
detail (especially considering that the FFT is really only intended for
'continuous' sounds...) but if you are concerned with such things you may
want to specify exactly the number of frames to be used using the Frames
or StartFrame commands available in the CLI interface, and make sure you
have chose<n an exact multiple (two or greater) of the bin size for an
exact overlap fit. For 3D-Time analysis, you should set the Time Segment
Size instead (this is discussed further in by the special help button in
the 3D-Time requester).
?Workbench Pad
[This button has been removed. I saw no real need for it, and it was
taking up critical screen real estate.]
The Pad button is a toggle which engages or disengages 'Pad' mode. In
'Pad' mode, the last (or only) partial window of data will be padded with
zeros prior to analysis. Pad mode is disengaged by default, and its use
is strongly discouraged.
Though it may sound innocuous, zero padding can produce serious artifacts
in a computed spectrum, and I strongly discourage it. The default
'Overlap' mode takes the best use of all the data without padding or
truncation. Even truncation, which might result if 'Overlap' mode is
disengaged, is superior to padding for most purposes. The only advantage
of padding is that it permits the use of a larger maximum number of bins
than the other techniques in some cases, but be forewarned that many of
those bins will be filled with spurious garbage.
See help for the Bins and Overlap buttons for further discussion.
?Workbench Rectangle
The Rectangle button selects windows of rectangular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins.
The Rectangle button is a 'radio' style button which disengages any other
window shape button. Likewise it is disengaged by the selection of any
other window shape button.
The 'Rectangle' window is the simplest window (effectively a series of
1's) and the fastest to compute and apply (i.e. no computation or
application is necessary). It also results in the sharpest initial
fall-off on either side of a spectral peak. However, it is also the most
susceptible to the presence of side-lobe artifacts. If you wish to remove
the influence of side-lobes, use a different window shape, such as 'B-H
74dB.'
Rectangle is currently the default window shape.
?Workbench Triangle
The Triangle button selects windows of triangular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins.
The Triangle button is a 'radio' style button which disengages any other
selected window shape button. Likewise it is disengaged by the selection
of any other window shape button.
The 'Triangle' window is the next simplest window, after the Rectangle
window. Its shape is that of a triangle peaking in the center of each
data segment. The 'Triangle' window is often called the 'Bartlett'
window, after a scientist who found it to be useful.
The triangle window is superior to the rectangle window in side-lobe
rejection. In turn, it is inferior to all other window shapes except
rectangle in side-lobe rejection.
?Workbench Parzen
The Parzen button selects windows of a particular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins.
The Parzen button is a 'radio' style button which disengages any other
selected window shape button. Likewise it is disengaged by the selection
of any other window shape button.
The Parzen window is based on the formula presented by Press, et al, in
their book 'Numerical Recipes.' It is not the same as the "Parzen Window"
identified by Harris. It is superior to the triangle and rectangle
windows in sidelobe rejection.
?Workbench Welch
The Welch button selects windows of particular shape. These windows will
be applied to the data in segments whose size is determined by the number
of bins.
The Welch button is a 'radio' style button which disengages any other
selected window shape button. Likewise it is disengaged by the selection
of any other window shape button.
The Welch window is based on the formula presented by Press, et al, in
their book 'Numerical Recipes.' It is superior to the triangle and
rectangle windows in sidelobe rejection.
?Workbench Hann
The Hann button selects windows of a particular shape. These windows will
be applied to the data in segments whose size is determined by the number
of bins.
The Hann button is a 'radio' style button which disengages any other
selected window shape button. Likewise it is disengaged by the selection
of any other window shape button.
The 'Hann Window' is frequently mis-named as the 'Hanning Window.'
Actually, Hann-ing (or Hann'd) is a kind of verb which attests to the
popularity of this window in instrumentation. It is superior to the
preceding windows in sidelobe rejection. The formula used here is from
Harris.
?Workbench Hamming
The Hamming button selects windows of a particular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins.
The Hamming button is a 'radio' style button which disengages any other
selected window shape button. Likewise it is disengaged by the selection
of any other window shape button.
The Hamming window is superior to the preceding windows in sidelobe
rejection. The formula used here is from Harris.
?Workbench 74dB-Blackman-Harris
The B-H 74dB button selects windows of a particular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins.
The B-H 74dB button is a 'radio' style button which disengages any other
selected window shape button. Likewise it is disengaged by the selection
of any other window shape button.
The Blackman-Harris 74dB window is a nearly optimal window according to
criteria developed by Harris. It is superior to all the preceding
windows in sidelobe rejection. The '74dB' refers to a 74dB minimum
sidelobe rejection. GFFT also provides the Blackman-Harris 92dB window
which has even greater sidelobe rejection, but also suffers considerably
from a loss of selectivity (actually, "processing loss") compared with
other window shapes.
?Workbench 92dB-Blackman-Harris
The B-H 92dB button selects windows of a particular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins.
The B-H 92dB button is a 'radio' style button which disengages any other
selected window shape button. Likewise it is disengaged by the selection
of any other window shape button.
The Blackman-Harris 92dB window has the highest sidelobe rejection of all
windows studied by Harris. In fact, the '92dB' refers to the impressive
92dB sidelobe rejection, so any spectral feature you see is that much more
likely to be a real spectral feature (provided data of sufficient quality
and quantity). Unfortunately, it also suffers considerably from a
corresponding "processing loss" in comparison with other windows included
in this program, so that many real features may be smeared and hidden.
Ultimately, each window has its own unique set of compromises.
?Workbench Spectrum-File
The Spectrum File gadget shows the name of the current non-temporary
spectrum file (if any), and allows you to enter a new one. The spectrum
file is an output file produced by GFFT which is read by GNUPLOT (if Plot
mode is enabled) and is also human-readable. It is not necessary to name
spectrum files if Plot mode is enabled because GFFT will automatically
create and manage temporary spectrum files for you. But, if you want to
save the spectrum file for later use, or give it a nice name (since the
spectrum file name is used by GNUPLOT as a label), you should name it
using this gadget or one of the following buttons.
If you would like GFFT to make up a permanent spectrum file name for you,
use the '*.fft' button. (It will take the sample file name and tack on
".fft").
You may enter a filename into the Spectrum File gadget using a file
requester if you click the Spectrum File Select ('S') button. When you
use that button and select a file, Open mode will be activated
automatically, but you may cancel Open mode and return to Write mode if
you do so right away. See help for the 'S' button for further details.
The Spectrum-File-Open to the left activates 'Open' mode, which changes
how the spectrum file will be used...
By default, GFFT starts in 'Write' mode in which every spectrum file
written by GFFT will be written from the beginning each time. When a name
is entered into the Spectrum File gadget, GFFT will look for an existing
file of that same name, and back it up first (to a file with the same name
and a trailing underscore), and then begin writing the file from the
beginning (overwriting all previous data). To warn you that this is
occurring, GFFT will display a warning requester. Note that GFFT only
performs one level of backup, so the second time you overwrite a spectrum
file, the original data will be lost.
In Open mode, GFFT will not overwrite pre-existing data in the spectrum
file, but may be used either to re-plot that data, or to append additional
"bands" of spectral data to it. See help for the 'Open' button for
further details.
New data will not actually be written to the spectrum file until you click
either 'OK' or 'ReOutput.'
If you had selected an explicitly named output file but wish to return to
using temporary files managed by GFFT, click the Write-Cancel ('CAN')
button. This is also a quick way to delete an existing spectrum file
name so you can start over.
You may also select the pseudo-file 'con:' to write data to. This will
cause the spectral data to be written to a console window (in the same way
that the Sample file 'con:' button causes data to be read from a console
window...see the help for that button for some discussion of how the
console window appears and/or may be hidden depending on how GFFT was
started and what Workbench revision you are using). If you select con: as
the spectrum file, you must cancel plot mode, as GNUPLOT cannot plot data
written to the console window.
?Workbench Spectrum-File-Select
The Spectrum-File-Select button (the 'S' following the Spectrum File
gadget) brings up a file requester to let you select a spectrum file to
open (or write). This feature requires Workbench 2.0 or higher. (If you
do not have 2.0 or higher, you can enter the filename into the Spectrum
File gadget.)
When you select a file in this manner, 'Open' mode is automatically
activated to prevent you from overwriting previous spectral data by
mistake, in case you wanted to RePlot the file or append new data bands to
it (see help for the Open button). However, if you really DID want to
overwrite the spectrum file from the beginning, you may then click on the
Open button to disengage Open mode immediately after selecting the file.
You must make this change before clicking on any other button, or GFFT
will cancel the spectrum file selection rather than allowing you to
overwrite a spectrum file that was 'Opened.'
?Workbench Spectrum-File-Open
The Spectrum File 'Open' button is a toggle button which activates
spectrum file 'Open' mode, or switches back to the default 'Write' mode.
After Open mode has been activated, any spectrum file selected is opened
at the end of existing data in the file, NOT overwritten from the
beginning (as would be the case in Write mode). This is useful either if
you want to RePlot previously stored spectrum files, or append data to a
spectrum file in bands. These two possibilities are discussed separately
below. In either case, you should activate Open mode BEFORE selecting the
file, or previous data will get truncated (i.e. clobbered). (Actually,
GFFT will save the previous file to a backup file, but there is only one
level of backup, and you shouldn't depend on this.) When you use the
Spectrum File Select ('S') button, Open mode is automatically activated.
If the spectrum file does not already exist when opened, a new blank one
is created, just as in Write mode. You may not Open 'con:'
Open for RePlot
----------------
To RePlot previously stored spectrum files, you first click the Open
button, then select or enter a spectrum file name into the Spectrum File
gadget.
(If you select a file by using the requester which comes up when you press
the 'S' button, 'Open' will automatically be activated, to prevent you
from accidentally overwriting a previously stored spectrum.)
Then, to replot the spectrum, simply click on the RePlot button. Do NOT
click OK or ReOutput, as those may write additional spectral data to the
opened file (as described in the following section).
When replotting a previously stored spectrum, you may adjust any of the
parameters allowed before using the RePlot button. For further
discussion, see the help message for the RePlot button.
You may also use the CombinePlots ('&') and CutCombinedPlot ('X')
functions when opening previously stored spectrum files to plot several
spectra on the same screen or page. For example:
Click on CombinePlots ('&')
Select piano-rect.fft (Open mode is automatically engaged)
Click on RePlot (piano-rect.fft is plotted)
Press Return (Plot screen is removed)
Select piano-hann.fft
Click on RePlot (both .fft's are plotted on the screen)
Press Return
Select piano-74db.fft
Click on RePlot (all 3 .fft's are plotted)
Now, suppose you wanted to remove piano-74db.fft from the multiple plot
display and add piano-92db.fft. You would continue as follows:
Click on CutCombinedPlot ('X')
Select piano-92db.fft (piano-rect.fft, piano-hann.fft and
piano-92db.fft are plotted)
CutCombinedPlot works in the above example as shown (removing
piano-74db.fft from the multiple plot display), but doesn't generally work
with RePlot in other contexts, such as if you are simply changing plot
parameters in between each RePlot using the same spectrum file. A
spectrum file must have a unique name in order to be "cut." (GFFT
will automatically give TEMPORARY files unique names in CombinePlots
mode, but that would not apply in this example in which we are replotting
previously stored files.)
In fact, Open, CombinePlots, RePlot, and/or CutCombinedPlot can sometimes
have unexpected consequences when used together. You should not have any
trouble, however, if you follow the underlying model of the example shown
here.
Open for Appending 'bands'
--------------------------
Once a particular file has been Opened, each subsequent OK will append
additional data to the same file (until another file is Opened or the GFFT
session is ended). Data may not be written to a file while a plot is
being performed or displayed, however.
This is particularly useful if you are composing a file of spectral data
in several frequency "bands." You may be using data sampled by different
methods in separate sample files, or simply analyzed with different
numbers of bins or smoothing points depending on the frequency range. The
best way to show this is with a batch mode example, but the same
operations could be performed through the dialog window. (Note:
the 'read' command is the counterpart of entering a name into the
Sample File gadget. Here, there is a sample file named 'white.iff')
gfft read white.iff write white.fft bins 8192 lowf 0 highf 200 psd
gfft read white.iff open white.fft bins 2048 lowf 200 highf 400 psd
gfft read white.iff open white.fft bins 1024 lowf 400 highf 800 psd
gfft read white.iff open white.fft bins 512 lowf 800 highf 1600 psd
gfft read white.iff open white.fft bins 256 lowf 1600 highf 3200 psd
gfft read white.iff open white.fft bins 128 lowf 3200 highf 6400 psd
gfft read white.iff open white.fft bins 64 lowf 6400 psd
(Actually, you wouldn't need to do all this if you merely wanted to have
the same number of spectral data points per octave. An easier way to
accomplish that would be by using a large number of bins (e.g. 8192) and a
smaller number of smoothing points (e.g. 200), with LogX selected.)
?Workbench Spectrum-File-Cancel
The Spectrum File Cancel button cancels the explicit filename you have
entered into the Spectrum File Gadget. This will cause GFFT to use
temporary files for the spectral data written by GFFT to be read by
GNUPLOT, which is the default before any explicit filename has been
entered. You may also use this button to "clear" out the old spectrum
file name before entering a new one.
?Workbench *.fft
The '*.fft' button will let GFFT make up a spectrum file name by tacking a
'.fft' extension on to the end of the sample file name.
In CLI mode, it is easy to make up such a name using command replay, so
this button was created to make explicit file naming just as easy (or
actually, easier) in Workbench Mode (so you don't have to copy the whole
Sample File name over into the Spectrum File gadget by hand).
This button will not do anything useful if you are reading from con:.
?Workbench ReOutput
The ReOutput button allows you to rewrite the results of the preceding
analysis subject to a number of changed parameters. The FFT analysis
itself will not be repeated, only the output processing, writing, and
plotting (if applicable). This is useful for making minor changes after a
long analysis without repeating the analysis itself.
Here are the parameters which may be changed before a ReOutput:
Spectrum File
Plot (on or off)
Smoothing Segments and Squared Smoothing
High Frequency
Low Frequency
Mean
Power
Amplitude
dB
LogX
LogY
Multiply (CLI only)
Sampling Rate
Pink
Quantization
LowY (see CAL requester)
HighY (see CAL requester)
Here are just a few parameters which may NOT be changed between OK and
ReOutput:
Sample File
Bins
Overlap
Window Shape (Rectangle, etc.)
Any 3D parameters...in fact, ReOutput is not at all possible with 3D
(Pad...from CLI)
[Currently, if you change these parameters and ReOutput, you will not get
any sort of warning that the changed values have no effect. They just
will not have any effect.]
There is also a RePlot button which has generally more limited
capabilities, but does allow changing the 3D parameters.
?Workbench RePlot
The Workbench RePlot button allows you to RePlot the previous analysis or
previously stored spectrum file with a few changed parameters. The
spectrum analysis itself, including the output phase, will not be
repeated. Instead, GNUPLOT will simply be launched with with new
parameters on the currently named (or temporary) spectrum file.
RePlot may be used in conjunction with Open mode to RePlot previously
stored spectral data files. See help for the Open button for further
details.
Here are the parameters which may be changed before doing a RePlot:
Plot (if previously off)
LogX (with no smoothing! LogX w/smoothing requires a ReOutput)
LogY
RotX
RotZ
LowFrequency (*see note below)
HighFrequency (*see note below)
LowY
HighY
[Currently, if you change any other parameters and RePlot, you will not
get any sort of warning that the changed values will have no effect.]
(ReOutput permits the modification of many more parameters than RePlot,
though it does not permit the repetition of a 3D analysis. Like RePlot,
ReOutput will also produce a new plot if Plot mode is on.)
*Note that RePlot does not effect the LowFrequency and HighFrequency in
exactly the same way as OK or ReOutput. OK and ReOutput 'filter' the data
written to the output data file so that no data outside the range
established by LowFrequency and HighFrequency is written. RePlot cannot
filter the data which has already been written, but instead sends
explicit 'set xrange' commands to GNUPLOT. If you wanted a plot with
artificially large left and right 'margins,' you could first do OK (with
the desired actual data range set or defaulted), then do a RePlot with
LowFrequency and HighFrequency values set outside the range of actual data
to the point(s) where you would like the margins to be. Thus, this
difference in the way LowFrequency and HighFrequency are used in RePlot
mode is actually a 'feature' which you can take advantage of to change
the presentation of a plot.
?Workbench Pink
* Warning! The results of this feature may not be entirely 'correct.' *
The Pink button engages pink mode, in which a particular sort of
frequency-dependent normalization is performed on the spectral output so
that pink noise will be shown as having nearly 'flat' response. The Pink
button is a toggle button which may be clicked on or off.
(Pink noise is random noise shaped so that there is an equal amount of
energy or amplitude in each octave or fractional-octave band. It is
frequently used in acoustic testing.)
Pink mode simply weights each output value by a corrective factor; it does
not do any grouping and/or averaging (so no resolution is lost). The
current formula does not seem entirely accurate at the lowest frequencies,
where the results may vary depending on how many bins are being used.
This makes it difficult (or impossible) to splice several curves of pink
noise with different numbers of bins together. In any case, the sum of
the squared output values will no longer reflect the sum of the squared
input values, in fact, the scale may be offset considerably. You may
choose to use the 'Multiply' command (available in CLI mode; see help for
the CLI button) to rescale the results conveniently.
(You may also wish to do Smoothing with LogX set when plotting pink noise,
and use extremely large sample files with 1,000,000 frames or more to
allow for the randomness in pink noise to average out.)
?Workbench LogX
The LogX button is a toggle button which selects whether the X axis will
be scaled logarithmically by GNUPLOT during plotting.
LogX has no effect on the spectral data output by GFFT itself, except that
when both Smoothing and LogX are engaged a logarithmic mesh will be used
during the smoothing phase.
?Workbench LogY
The LogY toggle button selects whether the vertical axis will be scaled
logarithmically by GNUPLOT during plotting. It has no effect on the
spectral data output by GFFT itself.
If a dB conversion is selected with the dB toggle button, LogY is probably
not desireable (as this would mean plotting logarithms on a logarithmic
scale).
LogY is intended to make the vertical axis (representing amplitude or
power) logarithmic. In 3D mode, it is actually the Z axis that is
vertical and that represents amplitude or power, so in that mode LogY
actually scales the Z axis logarithmically.
?Workbench dB
The dB toggle button selects whether GFFT will write output amplitude or
power values converted to the dB scale.
If a dB is selected, LogY is probably not desireable (because then you
would be plotting logarithms on a logarithmic scale).
?Workbench Power
?Workbench Amplitude
The Power and Amplitude button are mutually exclusive toggle buttons.
Selecting one automatically de-selects the other. They determine whether
GFFT will output Amplitude or "Power" (squared amplitude) values. By
default, GFFT will output Amplitude values.
?Workbench Next
The Next button will advance to the next sample file selected from the
Workbench by extended selection. If GFFT was invoked without selecting
any files by extended selection, or if only one sample file was selected
by extended selection, the Next button will be ghosted.
?Workbench CLI
The CLI button will continue the current session of GFFT from the CLI
interface, and will remove the GFFT Dialog Window. From the CLI
interface, you may then return to the GFFT Dialog Window by giving the
'Workbench' command.
If you started GFFT from the workbench by clicking on its icon, clicking
the CLI button will cause a new console window to be created below where
the GFFT Dialog Window was for you to work in. (Under AmigaDOS 1.3, this
console window is always there whether you need it or not.)
If you started the GFFT dialog from the CLI by giving the 'Workbench'
command, control will return to the console from which GFFT was started.
Using the WORKBENCH command and the CLI button, you can switch back and
forth between WORKBENCH and CLI interfaces. This might be useful if there
are a few commands having no corresponding gadgets in the GFFT Dialog
Window which are needed in your application, such as 'Frames' or
'StartByte.' You may also put CLI commands in your .gfft startup file.
?Workbench-Message-Display
The Message indicator shows an informational message concerning your GFFT
session. Usually, this gives an indication of what sort of user action is
expected or required next. Sometimes, it lets you know of some decision
that has been made for you (such as selecting the exact number of bins if
you entered a number which was not a power of 2), or how much time the
internal FFT loop required. (Note that the internal FFT loop DOES include
some file reading, but not the output file writing, which is handled after
the internal FFT loop. Also, the FFT loop may be repeated many times for
a 3D-Time analysis.)
If the message 'Performing FFT analysis...' is displayed, the analysis is
being performed. This could take some time. Additional time may also be
required after the FFT loop elapsed time indication appears (to write the
output file and invoke GNUPLOT). Meanwhile, do not attempt to operate on
any other gadgets in the GFFT Dialog Window.
?Cli-Commands
?Syntax
The CLI commands for GFFT are either entered all in one line (for
batch mode) or one for each prompted line (for interactive mode).
The GFFT commands are not case sensitive. They may each be abbreviated
to the shortest unambiguous string.
You may enclose filenames in either single or double quotation marks.
This may help gfft distinguish it from the command itself. Though no
ambiguity could (currently) arise in CLI Interactive mode since only one
command is permitted per line, there might otherwise be an ambiguity in
CLI Batch mode.
Most commands actually set some parameter for later use. The OK or GO
commands actually initiate a spectrum analysis. That is when all
previously specified settings are actually used (and incompatibilities
might be detected).
In the syntax descriptions for some commands, square brackets like [this]
enclose optional arguments, and angle brackets like <this> enclose
arguments generally, while the un-enclosed words are the command(s)
themselves.
??
?help
The HELP and ? commands display a list of commands available in GFFT,
along with some hints and other helpful information. If an argument is
specified, help for that keyword or command is displayed.
Syntax:
?
help
help <command or keyword>
?About
The About command displays information about the author of GFFT and how
you can support its future development.
?Amplitude
?Power
The Amplitude and Power commands are mutually exclusive. Selecting one
automatically cancels the other. They determine whether GFFT will output
Amplitude or "Power" (squared amplitude) values. By default, GFFT will
output Amplitude values.
?Append
?Open
The Open and Append commands are identical (in this release, anyway).
Syntax:
append [<filename>]
open [<filename>]
The Open command is similar to the Write command (see) in that it will
open a spectrum file which may be read or plotted by GNUPLOT. However,
the Open command will cause any data written to this file to be appended
to the end of existing data, if any, while the Write command would cause
the file to be rewritten from the beginning. If the named file does not
already exist, the Open command will create one (just as the Write command
does).
Open may also be used to open a previously stored spectrum file so that it
may be plotted with the RePlot command. Once a file has been opened, it
may be plotted with RePlot, and parameters such as HighFrequency,
LowFrequency, LogX, and LogY may be adjusted. If you are using Open in
this way, be sure NOT to give the OK or ReOutput commands, or else GFFT
may write more data at the end of the opened file. See help for the
RePlot command for a discussion of which parameters may be adjusted.
The Open command is normally given with one argument: the filename (which
may include device and/or absolute or relative directory specifiers). If
the Open command is given without any arguments, GFFT will make a
temporary file to plot from (assuming plot mode is enabled). At the end
of the GFFT session, this temporary file will be deleted (if the plot is
no longer being displayed).
Once a particular file has been opened with Open, each subsequent OK
command will append additional data to the same file (until another Open
or WRITE command is given, or the GFFT session is ended). Note that data
may not be written to a file while a plot is being performed or displayed,
however.
Open is particularly useful if you are composing a file of spectral data
in several frequency "bands." You may be using data sampled by different
methods, or analyzed with different numbers of bins or smoothing points
depending on the frequency range.
Example:
gfft read white write white.fft bins 8192 lowf 0 highf 200 psd
gfft read white open white.fft bins 2048 lowf 200 highf 400 psd
gfft read white open white.fft bins 1024 lowf 400 highf 800 psd
gfft read white open white.fft bins 512 lowf 800 highf 1600 psd
gfft read white open white.fft bins 256 lowf 1600 highf 3200 psd
gfft read white open white.fft bins 128 lowf 3200 highf 6400 psd
gfft read white open white.fft bins 64 lowf 6400 psd
(Actually, you wouldn't need to do all this if you merely wanted to have
the same number of spectral data points per octave. An easier way to
accomplish that would be by using a large number of bins (e.g. 8192) and a
smaller number of smoothing points (e.g. 200), with LogX selected.)
If you want to comparatively plot several different spectra during the
plotting phase, use the CombinePlots command instead of the Open command,
or, in addition to it if you are replotting previously stored spectrum
files (see below). CombinePlots will cause each different spectrum to be
plotted with a different color (or linetype) with a legend identifying
each one.
While you are using Open to open previously written spectral data files
and RePlot to plot them, you may also use CombinePlots to overlay each of
these spectra into one plot.
Example:
sys> gfft
gfft> combineplots
gfft> open piano.fft.rect
gfft> RePlot
gfft> open piano.fft.hann
gfft> RePlot ;plots both ...rect and ...hann
gfft> open piano.fft.74dB
gfft> RePlot ;plots ...rect, ...hann, and ...74db
gfft> CutCombinedPlot
gfft> open piano.fft.92dB
gfft> RePlot ;plots ...rect, ...hann, and ...92db
CutCombinedPlot works in the above example as shown (replacing
piano.fft.74db with piano.fft.92db with an Open command), but doesn't
generally work with RePlot if you are only changing parameters (it works
best if you are changing the actual filename), nor does CombinePlots work
with Open and RePlot if you are only changing parameters (and not adding
files with different names) between each RePlot. The example shown here
works, but Open, CombinePlots, RePlot, and/or CutCombinedPlot can
sometimes have unexpected consequences when used together. You should not
have any trouble, however, if you follow the model of the example shown
here.
You may not Open 'con:'
?Banner
The Banner command displays the GFFT banner, which normally comes up when
you start GFFT in CLI-interactive mode. (This might be useful if you are
running GFFT in batch mode but nevertheless want to have the GFFT banner
displayed.)
?Bins
The Bins command lets you choose or default the number of bins to be used.
It is followed by an (optional) integer argument. By default, GFFT
chooses the maximum number of bins which could be put to use (considering
the number of sample frames, and the current Overlap, Pad, Interleave and
other settings). If you have a large sample file, or wish to reduce the
spectral variance by averaging successive frame segments, you should
choose a smaller number of bins than the maximum.
1024 is a typical number of bins, though I usually use more. You should
enter a value which is a power of 2. If you do not, however, GFFT will
choose the next power of two for you and indicate the actual value chosen.
Once set explicitly, the same number of bins will be used for the present
and all future sample files read in the same GFFT session.
If you enter the Bins command with no argument, the default (maximum) bins
mode will be re-engaged. In the default mode, you will be alerted as to
the actual number of bins used after the OK command is given for each file
analyzed.
By default, GFFT attempts to make use of all data present either by using
the largest number of bins and/or by by averaging the data segments (whose
length is 2*N where N is the number of bins) present to reduce the
spectral variance. If you wish GFFT to limit analysis to a smaller number
of data points within you file, you may use the Frames and/or StartFrames
commands.
By default, GFFT will also use Overlap to provide even more data segments,
resulting in a further reduction of variance. (See the Overlap command
for further information.) Overlap may be disengaged with the NoOverlap
command.
?Bits
The Bits command lets you set the number of bits used in the
representation of each input datum in an unformatted input sample file.
Normally, the number is either 8 or 16, but you may specify any number
between 1-16 inclusive. (The handling of numbers other than 8 and 16 is
as specified for the AIFF format--i.e., the least significant bits are
ignored first.)
Syntax:
Bits <number of bits: integer 1-16>
Note that the argument for this command is mandatory.
If a Bits command is given BEFORE the header of a formatted sample file is
read with a READ command, the number of bits specified in the sample file
header will supercede the number specified in the Bits command. If the
Bits command is given AFTER the READ command, the number in the Bits
command will supercede the number specified in the sample file header.
The default for unformatted sample files is 8 bit.
?74dB-Blackman-Harris
The 74db-Blackman-Harris command selects windows of a particular shape.
These windows will be applied to the sample data in segments whose size is
determined by the number of bins. This command cancels the effect of any
preceding window shape command.
The Blackman-Harris 74dB window is a nearly optimal window according to
criteria developed by Harris. It is superior to most other windows in
sidelobe rejection. The '74dB' refers to a 74dB minimum sidelobe
rejection. GFFT also provides the 92dB-Blackman-Harris window which has
even greater sidelobe rejection, but also suffers considerably from a loss
of selectivity (or, more precisely, 'processing loss.')
?92dB-Blackman-Harris
The 92db-Blackman-Harris command selects windows of a particular shape.
These windows will be applied to the sample data in segments whose size is
determined by the number of bins. This command cancels the effect of any
preceding window shape command.
The Blackman-Harris 92dB window has the highest sidelobe rejection of all
windows studied by Harris. In fact, the '92dB' refers to the impressive
92dB sidelobe rejection, so any spectral feature you see is that much more
likely to be a real spectral feature (provided data of sufficient quality
and quantity). Unfortunately, it also suffers considerably from a
corresponding "processing loss" in comparison with other windows included
in this program, so that many real features may be smeared and hidden.
Ultimately, each window has its own unique set of compromises.
?Calibration
?DbCalibration
?NoCalibration
Syntax:
Calibration <Calibration File Name>
DbCalibration <Calibration File Name>
NoCalibration
The Calibration command enables you to apply a 'calibration' to the output
of GFFT. In this way, you can compensate for the frequency response of
your sampler, microphone, noise source, etc. Any number of calibrations
may be in effect at the same time. Each time the Calibration (or
DbCalibration) command is given, a new calibration is linked into the
existing list of calibrations. The NoCalibration command cancels the
entire list of calibrations. The DbCalibration command allows you to use
a file in which the amplitudes are in dB (logarithmic) form. Calibrations
and DbCalibrations may be applied to spectrums in any combination
regardless of whether the final output is in dB form or not.
The calibration file(s) should be in the same format as the output files
produced by GFFT itself. Each line (terminated by newline) should have a
frequency value, any number of spaces, and an amplitude value (NOT a
'power' or squared amplitude value!). The frequencies must be in
increasing order, and the range of frequencies must be equal to or greater
than that to be output by GFFT (see warning below). Lines beginning with
one of the following characters are considered to be comments:
# ; !
If a spectrum is calibrated by itself, the result should be a straight
line at either 1.0 or 0.0 (for dB output). Actually, due to slight
rounding errors, the actual result will be close to, but not exactly these
ideal values (e.g. 0.9999998). Given that Gnuplot will always scale the Y
axis to the maximum magnification, these small differences may be
disconcerting. To minimize this effect, consider setting the LowY and/or
HighY values to fix the vertical range. You may also use the Quantization
command to apply a quantization to the output (but, that may cause other
problems).
Calibration as used here is unrelated to true complex 'correlation,' which
is not currently available in GFFT. Calibration has somewhat limited
accuracy and validity, but is still probably a feature worth having for
its usefulness. Note that in between points specified in a calibration
file, simple linear interpolation may be used. If a frequency higher than
the highest calibration frequency is output by GFFT, it will be calibrated
by the value for the highest calibration frequency, and likewise for any
frequency lower than the lowest calibration frequency. In other words,
GFFT extends the last calibration value rather than extrapolating.
(WARNING! This could be dangerous if interpreted improperly! Remember to
provide calibrations over a range equal to or greater than the range to be
output by GFFT.) GFFT does not truncate to the calibration range because
rounding errors may cause premature truncation.
One way to use the Calibration command is to perform a GFFT analysis on
your signal source itself, and then apply that result as a 'calibration'
to your test measurements. Another way is to write frequency response
data provided by a calibration laboratory into a suitable calibration
file. (Many microphones, for example, are provided with calibration
curves that could be used for this purpose.)
?Channel
The Channel command selects a particular channel for a file in a format
(e.g. AIFF) which supports multiple channels. The desired channel number
is entered as a digit. If the Channel command is given with no arguments,
the default (1) channel (which is valid for all files, whether they have
channels or not) is selected. You must select a valid channel number
before giving the OK command or no analysis will be performed.
?CombinePlots
?NoCombinePlots
?CutCombinedPlot
The CombinePlots command activates CombinePlots mode. In this mode,
successive spectra (i.e. 'plots') are overlaid on top of one another.
Each spectrum is plotted with a different color (or linetype, if plotting
on a black and white printer) by GNUPLOT. The x and y axis are
automatically scaled so as to include the largest x and y values of any
spectrum included, unless you have opted to fix the HighY and LowY values.
When the first CombinePlots command is given, the previously completed
spectrum (if any) is used as the first data set for the plotter, the next
completed spectrum becomes the second data set, and so on.
If a subsequent CombinePlots command is given when already in CombinePlots
mode, it is ignored.
To disable CombinePlots mode, enter the NoCombinePlots command. All
previously combined plots are 'cut' off, so that if another CombinePlots
command is given immediately, a new plot combination starts from scratch.
To 'cut' only the last plot, give the CutCombinedPlot command. To cut
several plots from the plot combination, enter CutCombinedPlot several
times. Each time CutCombinedPlot is entered, one more plot is cut from
the end until there are no more plots to be cut. This is a useful way to
cut plots that didn't quite work out without starting over.
(CutCombinedPlot used in conjunction with RePlot can have unexpected
consequences. See help for the Open command for a working example; many
other combinations of these commands won't work as might be intended.)
Combine plots mode is very useful for comparing the effect of different
parameters (e.g. window type), or for comparing alternate sets of data
representing the same source (e.g. to get a feel for the variance due to
sampling size limitations--this is extremely useful for seeing which
spectral features are truly inherent in the source and not the result
of an inadequately large sample file. Note that very large sample files
(e.g. > 1,000,000 frames) may be necessary to reduce the variance of
a pink noise source in the low frequency ranges.)
Example:
gfft>read pink1.iff
gfft>bins 4096
gfft>logx
gfft>db
gfft>smoothingsegments 300
gfft>pink
gfft>ok
gfft>combineplots
gfft>read pink2.iff
gfft>ok
In this example, pink1.iff and pink2.iff are two samples of pink noise.
If they are both large enough, their spectral lines will be overlaid
nearly on top of one another. In any case, the extent of their divergence
will give an approximate feel for the variance.
?Copying
The Copying command will display the GNU General Public License under
which this program is being distributed. This specifies your rights to
have the source code and to give out copies of this program.
(Note: This command requires that the file named COPYING was placed either
in the same directory as GFFT or in the S: directory, as specified in the
file named INSTALLATION. If this file has been lost, you may obtain
another copy from the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. Please do not ask them any other questions
about this program.)
?dB
?NodB
The dB command instructs GFFT to write output amplitude or power values
converted to the dB scale. The NodB command cancels this.
If dB is engaged, LogY is probably not desireable, as then you would be
plotting logarithms on a logarithmic scale. (LogY causes GNUPLOT to use a
logarithmically scaled Y axis, but does not otherwise modify the data file
written by GFFT.)
You will get a warning if any spectral values are equal to zero. Such
values will not be output as they cannot be converted to the dB scale.
?Exit
?Quit
The Quit or Exit command is used to end an interactive session of GFFT.
As GFFT is terminating, it will delete all temporary files it has created
if they are no longer in use. The temporary files corresponding to
plots or help messages still being displayed will not be deleted.
In that case, be sure to remove all help message and plot displays before
beginning a second GFFT session.
Warning! GFFT will also delete your files, if they match the masks
it uses for its temporary files:
t:temp-#?.fft-#?
ram:cli.temp-gfft-#?
ram:gnuplot.temp-gfft-plot
ram:temp-gfft-more-#?
As you can see, however, this isn't very likely.
?FFT-Complex
The FFT-Complex command changes the operation of GFFT fundamentally.
Instead of producing a plottable 2d (or 3D-Time) spectrum analysis, GFFT
will simply output (not plot) a file containing the Complex FFT of the
input data provided. (It is complex in that for each frequency there are
'real' and 'imaginary' components). This will be done when the OK command
is given.
Beware that few of the parameters provided in GFFT are applicable to
FFT-Complex operation. Only one data segment (whose size based on the Bin
specification) will be analyzed.
?Frames
The Frames command determines how many frames from the sample file will be
read and used by GFFT. It accepts one argument--the number of frames. If
no argument is given, the default is restored. By default, the number of
frames read and used by GFFT is the total number of frames in the file (if
possible--of course, the number of frames actually used may be less than
that if the Overlap (see) mode is turned off).
(If you are unfamiliar with the 'frame' terminology, for the purposes of
GFFT one 'frame' is the same as one 'data point,' or 'number.' Some sample
file formats permit more than one channel, and frequently the data points
for all channels present are combined in each 'frame' which consists of
all the samples taken for all channels to represent one instant of time.
Currently, GFFT can only use the data for one channel at a time, but the
'frame' terminology has been adopted because it is the most general. The
term 'sample' is ambiguous because sometimes it may refer to an individual
data point, and other times it may refer to an entire file of data points.
I have tried to consistently use the term 'sample file' here when
referring to such a file.
?Go
?OK
The OK command initiates an FFT according to all the specified parameters.
The Go command is identical.
The selected sample file will be read and transformed, the spectrum file
(if any) which has been selected with a Write or Open command will be
written to, and a PLOT will be produced if the Plot option is enabled.
This command is invalid if any parameters have been set incorrectly, if no
sample file has been selected, or if no spectrum file has been explicitly
specified AND the PLOT option is not enabled (as there would be no point
in writing to a temporary spectrum file only to delete it).
It may not be necessary to give the OK command in Batch-CLI mode because
it may be implied by the commands given and the end of the command line.
Example:
sys> gfft
gfft> read piano.iff
gfft> plot
gfft> ok
Batch Examples:
gfft read piano.iff write piano.fft
gfft read piano.iff hann write piano.hann ok hamming write piano.hamm
In the first batch example, no OK command is necessary because sample and
spectrum files are specified for which no OK command is given. In the
second batch example, two output files are written, OK is necessary to
write the first, but not necessary for the second. (See help for 'Batch'
for further information about batch mode).
Note: depending on the size of the sample file, the number of bins and
other parameters you have set, as well as the CPU and/or FPU resources
available, an FFT analysis could take anywhere between a fraction of a
second to several weeks. So, if you don't get an immediate response, have
faith that GFFT is working, not hanging. If there is any error, GFFT
should let you know right away. If it is working away on your file, and
the number of bins is small compared with the size of your sample file,
you will see the disk light flickering occasionally as GFFT reads in each
additional data segment.
?Hamming
The Hamming button selects windows of a particular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins. The Hamming command cancels the effect of any preceding
window shape command.
The Hamming window is superior to the Rectangle, Triangle, Parzen, and
Hann windows in sidelobe rejection. The formula used here is from Harris.
?Hann
The Hann button selects windows of a particular shape. These windows will
be applied to the data in segments whose size is determined by the number
of bins. The Hann command cancels the effect of any preceding window
shape command.
The 'Hann Window' is frequently mis-named as the 'Hanning Window.'
Actually, Hann-ing (or Hann'd) is a kind of verb which attests to the
popularity of this window in instrumentation. It is superior to the
Rectangle, Triangle, and Parzen windows in sidelobe rejection. The
formula used here is from Harris.
?Hidden3D
?NoHidden3D
The Hidden3D command enables hidden line removal in 3D plot displays.
The NoHidden3D disables this feature. It is disabled by default.
I find the hidden line 3D display to be the most readable, though some
useful data may be hidden.
GNUPLOT has other 3D display features which are not yet supported by GFFT,
such as contour plots (with many contour parameters). If there are any
particular ones you would like to be able to control from GNUPLOT, please
let me know. (I'm probably just going to add a generic GNUPLOT option
control facility in a future release.)
?HighFrequency
The HighFrequency command allows you to select the highest frequency to be
output (and plotted, if applicable) up to the Nyquist frequency, which is
one-half of the sampling rate. Any positive number (integer or floating
point) may be given as an argument. If no argument is given, the default
is restored in which the highest frequency output and plotted is
automatically the Nyquist frequency.
Using the HighFrequency and LowFrequency commands, you can zoom in to see
a particular part of the spectrum more clearly.
If a HighFrequency is selected prior to a RePlot command, that value is
given in a range specification to GNUPLOT. Otherwise, the effect of a
selected HighFrequency is to filter the output file produced by GFFT, and
GNUPLOT is allow to autorange. (This may result in a slight difference in
how the axes are drawn by GNUPLOT, and may be used to your advantage
during RePlot as you can then increase or decrease the right margin if
desired.)
?HighY
The HighY command allows you to set the lowest value to be shown on the
vertical axis used for plotting by GNUPLOT. Using this command, you can
'zoom in' or 'zoom out' vertically into the plot. This command has no
effect on the data file written by GFFT. If the HighY command is given
without any arguments, the HighY value will be automatically determined by
GNUPLOT autoscaling.
Syntax:
HighY [<highest Y value: double>]
Note that GNUPLOT might do strange things if you specify a HighY value
without also specifying a LowY value. It may, for example, decide to run
the Y axis upside down in order to show the widest range of Y values. Or,
if less than one Y unit would be plotted when autoscaling one value,
GNUPLOT may decide the Y range is invalid. Be forewarned.
In 3D mode, the vertical axis (representing amplitude or power) is
actually the Z axis, so then the HighY value is applied to the Z axis.
?IgnoreFormat
?NoIgnoreFormat
The IgnoreFormat causes GFFT to ignore the format of a file which it
recognizes. Currently, GFFT recognizes IFF, AIFF, AIFF-C, AVR, RIFF, and
VOCH formats, though it is only capable of processing IFF-8SVX, AIFF,
AIFF-C, and AVR formats (and ONLY if UNCOMPRESSED). Thus, IgnoreFormat
may allow you to read files in RIFF, VOCH, and other IFF formats, though
you will be responsible for setting parameters such as StartByte, Frames,
and Rate yourself, and there is no guarantee that even after setting these
parameters that GFFT will read the data properly (not to imply that there
is any guarantee anyway).
This feature should be used with caution and only by those who are well
versed in the format of the files they are going to read.
If you would like GFFT to support some additional file formats, please
contact the author and considering hiring him to do this or making a
regular or contingent donation. See the README file for details.
RIFF and VOCH formats might be included in a future release.
The NoIgnoreFormat command cancels the effect of a previous IgnoreFormat
command.
?Interleave
?NoInterleave
* Note: this command is EXPERIMENTAL (even more than the others). *
* The theoretic validity of this technique is not well understood. *
The Interleave command tells GFFT to average the results of FFT's
performed on alternate samples. For example, 'Interleave 2' tells GFFT to
perform two FFT's, one on the odd frames and one on the even frames, and
then to average the results. 'Interleave 3' would tell GFFT to perform 3
such FFT's, and so on. The NoInterleave command may be used to cancel
interleave mode. Interleave on any non-positive or non-integer number is
invalid, and interleave set to 1 would be meaningless (it would be the
same as NoInterleave).
Syntax:
Interleave <interleave-factor: integer in the range 2 - huge>
NoInterleave
This is a counterpart to the ordinary way of averaging the results of FFT
performed on successive segments (which may also be done at the same time
if possible). While dividing up a file into more than the minimum number
of segments (i.e., with less than the maximum number of bins) does not
reduce the highest frequency for which an FFT value is computed, it does
increase the lowest non-zero frequency for which an FFT value is computed
(i.e., the low frequency resolution is lost). Meanwhile, Interleave does
not increase the lowest non-zero frequency, but instead reduces the the
highest frequency (leaving the low frequency resolution intact).
Unfortunately, though the utility of this feature seemed compelling for
analyzing a spectrum in bands (using Interleave averaging for the low
frequencies and typical 'bin' averaging for the high frequencies) the
results indicate there is some theoretical error here which I still don't
fully understand, as I haven't been able to get the bands to meet. I
think I understand the reason for this, but I don't understand it well
enough to know how to compensate for it. Meanwhile, I have found no
discussion of this 'interleaving' or 'alternating' technique in the
literature.
?LogX
?NoLogX
The LogX command will cause GNUPLOT to scale the x-axis logarithmically
during plotting (if plot mode is set). It has no effect on the spectral
data output by GFFT itself, except when a number of smoothing segments are
being applied. When smoothing with LogX on, a logarithmic mesh will be
used during the smoothing phase.
The NoLogX command cancels the effect of the LogX command.
?LogY
?NoLogY
The LogY command will cause GNUPLOT to scale the vertical axis
logarithmically during plotting (if plot mode is set). It has no effect
on the spectral data output by GFFT itself. The NoLogY command cancels
the effect of the LogY command.
If a dB conversion is selected with the dB command, LogY is probably
not desireable (as this would mean plotting logarithms on a logarithmic
scale).
LogY is intended to make the vertical axis (representing amplitude or
power) logarithmic. In 3D mode, it is actually the Z axis that is
vertical and that represents amplitude or power, so in that mode LogY
actually scales the Z axis logarithmically.
?LowFrequency
The LowFrequency command allows you to select the lowest frequency to be
output (and plotted, if applicable). By default, GFFT outputs and plots
the lowest non-zero frequency. You may specify 0 or any other floating
point number as the argument to a LowFrequency command. If no argument is
specified, the LowFrequency command restores the default.
Although the FFT process yields a value for the 0 frequency (e.g. D.C.),
typical FFT analyzers do not display it because it may display a
considerable offset caused by the sampling hardware.
Once you specify a LowFrequency, it will remain in effect for the current
sample file and any additional files processed in the same GFFT session.
Note that the LowFrequency is handled differently by RePlot than by OK and
ReOut. See help for the RePlot command for further information.
?LowY
The LowY command allows you to set the lowest value to be shown on the
vertical axis used for plotting by GNUPLOT. Using this command, you can
'zoom in' or 'zoom out' vertically into the plot. This command has no
effect on the data file written by GFFT. If the LowY command is given
without any arguments, the LowY value will be automatically determined by
GNUPLOT autoscaling.
Syntax:
LowY [<lowest Y value: double>]
Note that GNUPLOT might do strange things if you specify a LowY value
without also specifying a HighY value. It may, for example, decide to run
the Y axis upside down in order to show the widest range of Y values. Or,
if less than one Y unit would be plotted when one value is autoscaled,
GNUPLOT may decide the Y range is invalid. Be forewarned.
In 3D mode, the vertical axis (representing amplitude or power) is
actually the Z axis, so the value selected for LowY is then applied to the
Z axis.
?Mean
?Sum
The Mean command instructs GFFT to write 'mean' (average) values, which
is what it does by default. The Sum command instructs GFFT to write
'summed' values, which are summed but not averaged (not divided by
the number of frames and segments).
Mean values are equivalent to Root Mean Square (RMS) Amplitude or Mean
Square Power (actually, squared amplitude) values. Note that by default
GFFT normalizes Mean outputs to the level of total actual amplitude
or power within each bin. There are two commands, PSDensity and Pink,
which alter this default normalization.
I do not recommend the use of the Sum command, except for debugging
purposes.
?Multiply
The Multiply command allows you to multiply all of the output values of an
FFT by some constant non-zero number for scaling purposes. (This only
affects the amplitude or power values, not the frequency values.) If no
argument is specified, the previous multiplication factor is canceled.
?NoWarranty
The NoWarranty command displays the nowarranty disclaimer of GFFT,
excerpted from the General Public License.
?Numerical
?NoNumerical
The Numerical command replaces the new FFT routines written originally for
GFFT with routines from the book 'Numerical Recipes In C,' by Press,
Flannery, Teukolsky, and Vetterling (Cambridge University Press: 1988).
The NoNumerical restores the original GFFT routines.
You will probably find only very small differences between using the
GFFT FFT routines and the Numerical ones, though there are significant
differences in how they have been implemented. But this command enables
you to compare for yourself (as it has for me). Note that it only
replaces the code performing the FFT itself, not the segment averaging and
output processing.
GFFT is not distributed with the source code for the 'Numerical' FFT
routines, nor is this code linked into the distributed binary image,
because the Numerical routines have a copyright which does not permit
this. To enable this command, you must acquire the code by either by
buying the book and entering the source code yourself, or by buying the
source code diskette, and making an image with it included (uncomment the
line(s) defining 'NUMERICAL_RECIPES_AVAILABLE' in the smakefile. The
functions needed are 'four1.c' and 'realft.c.' Be sure NOT to distribute
a binary image of GFFT with the numerical recipes code included, or to
distribute the Numerical Recipes code in any other fashion without
permission of its authors.
?Octave
The Octave command allows you to select a particular octave within a file
whose format permits more than one octave (e.g. 8SVX). By default, the
lowest octave is selected--this is present in all files. You may return
to the default by giving an octave command with no argument. To specify
another octave, use an argument which is a single digit between 0 and 7.
1 specifies the lowest octave, and 7 specifies the highest one. 0 is a
special case which specifies the highest octave available, regardless of
how many octaves there are (it may also be the lowest). If the octave
specified is not available, this problem may not be detected until the OK
command is given, but no analysis will be performed.
Syntax:
Octave [<number>]
Examples:
gfft>Octave 0
gfft>Octave 1
?OneShotOnly
?NoOneShotOnly
The OneShotOnly command causes GFFT to read only the one-shot portion of
a sample in a format (e.g. 8SVX) supporting this feature. By default,
GFFT will read the combined one-shot and repeat portions of the file.
The OneShotOnly command implicitly cancels the RepeatOnly command as they
are mutually exclusive.
The NoOneShotOnly command cancels the OneShotOnly command and restores the
default operation if OneShotOnly had been in effect.
?Overlap
?NoOverlap
The Overlap command engages overlap mode (which is the default). The
NoOverlap command disengages overlap mode.
Because it makes the best use of a limited amount of data, overlap mode is
engaged by default. It is also able to include all the data in the
analysis, regardless of whether the number of frames is exactly 2n times a
power of 2 (where n is a positive integer). If you are more concerned
with making the best use of processing time, and are not concerned about
ignoring a trailing remainder of the data, you may wish to disengage
overlap mode.
In overlap mode, the windows applied to the data are overlapped. By
overlapping the windows (as compared with just laying them end-to-end to
cover all frames present) better use is made of a fixed amount of data in
reducing the variance of the computed spectrum. This is true for all
window shapes, but especially true for the non-rectangular ones.
Overlapping may provide up to 9/11 of the variance reduction of having
twice as much data to work with (see Press, et. al.).
Normally, windows are overlapped by half their length (i.e., the fixed
overlap percentage for flat FFT analysis is 50%). However, in overlap
mode, the overlap of the last window is decreased or increased to
encompass the remainder of the data.
Given real (i.e. non-complex) sample data, 2 data points (frames) are
required for each Bin. Thus, 1024 bins would require 2048 frames. With
50% overlap, two overlapping windows would fit exactly into 3072 (2048 x
1.5) frames, three overlapping windows would fit exactly into 4096 (2048 x
2) frames, and four overlapping windows would fit exactly into 5120 (2048
x 2.5) frames. But GFFT varies the overlap of the last window to fit
whatever amount of additional data is present after the last whole window
of data has been read. So, two windows are used for any number of frames
F such that 2048 < F < 4096, three windows are used for F = 4096, four
windows are used for 4096 < F < 6144, and so on, with the overlap of the
last window somewhere between 0 and 100% (non-inclusive).
Though this scheme will ensure that all frames are included in at least
one segment, it may result in either over-representation or
under-representation of the last region of data. This is a fairly minor
detail (especially considering that the FFT is really only intended for
'continuous' sounds...) but if you are concerned with such things you may
want to specify exactly the number of frames to be used using the Frames
or StartFrame commands available in the CLI interface, and make sure you
have chosen an exact multiple (two or greater) of the bin size for an
exact overlap fit. For 3D-Time analysis, you should set the Time Segment
Size instead (this is discussed further in the help for TimeSegSize).
?Pad
?NoPad
The Pad command activates 'Pad' mode. The NoPad command cancels Pad mode.
Pad mode is not activated by default, and its use is strongly discouraged.
In 'Pad' mode, the last (or only) partial segment of data will be padded
with zeros prior to analysis.
Though it may sound innocuous, zero padding can produce serious artifacts
in a computed spectrum, and I strongly discourage it. The default
'Overlap' mode takes the best use of all the data without padding or
truncation. Even truncation, which might result if 'Overlap' is
disengaged and the number of frames is not 2 times a power of 2, is
superior to padding for most purposes. The only advantage of padding is
that it permits the use of a larger maximum number of bins than the other
techniques in some cases, but be forewarned that many of those bins will
be filled with garbage.
See help for the Bins and Overlap commands for further discussion.
?Parseval
?NoParseval
The Parseval command selects the Parseval normalization option. The
NoParseval command cancels the Parseval normalization option. Parseval
normalization is the default. This may be slightly slower, but is more
accurate. By selecting the NoParseval option, you may get a performance
improvement of about 2.5%, at the cost of a small error (I have seen
0-20%) in the overall spectrum level. The spectrum shape is unaffected.
Using Parseval normalization, the accuracy of the output normalization
(prior to PSDensity and/or Pink normalization, if also applied) is assured
by applying Parseval's theorem. According to Parseval's theorem, the sum
of the squared sample values should equal the sum of the (squared
amplitude) bin values. Otherwise, estimators are used (based on the
average window gain, etc.) which are fairly accurate.
Parseval normalization is particularly significant if non-rectangular data
windows are used, and is more significant for complex waveforms than
simple ones.
?Parzen
The Parzen command selects windows of a particular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins. The Parzen command cancels the effect of any preceding
window shape command.
The Parzen window is based on the formula presented by Press, et al, in
their book 'Numerical Recipes.' It is not the same as the "Parzen
Window" identified by Harris. It is superior to the triangle and
rectangle windows in sidelobe rejection.
?Pink
?NoPink
* Warning! The results of this command may not be entirely 'correct.' *
The Pink command engages pink mode, in which a particular sort of
frequency-dependent normalization is performed on the spectral output so
that pink noise will be shown as having nearly 'flat' response. The
NoPink command cancels pink mode.
(Pink noise is random noise shaped so that there is an equal amount of
energy or amplitude in each octave or fractional-octave band. It is
frequently used in acoustic testing.)
Pink mode simply weights each output value by a corrective factor; it does
not do any grouping and/or averaging (so no resolution is lost). The
current formula does not seem entirely accurate at the lowest frequencies,
where the results may vary depending on how many bins are being used.
This makes it difficult (or impossible) to splice several curves of pink
noise with different numbers of bins together. In any case, the sum of
the squared output values will no longer reflect the sum of the squared
input values, in fact, the scale may be offset considerably. You may
use the 'Multiply' command to rescale the results conveniently.
(You may also wish to do Smoothing with LogX set when plotting pink noise,
and use extremely large sample files with 1,000,000 frames or more to
allow for the randomness in pink noise to average out.)
?Plot
?NoPlot
The Plot command selects Plot mode. The NoPlot command cancels Plot mode.
Plot mode is the default for Workbench and CLI-Interactive modes; it is
not the default for CLI-batch mode.
In Plot mode, GNUPLOT is automatically invoked in a background process to
display the result of any spectrum analysis performed. If no spectrum
file has been explicitly specified, GFFT will create a temporary spectrum
file to use to send data to GNUPLOT. All such temporary files created by
GFFT will be deleted on exit from GFFT (if the plot display was canceled).
If plot mode is disengaged, a named output file must be explicitly
specified with the Write command--otherwise the analysis would simply
create and then delete a temporary file, which would be pointless. It is
not possible to plot data written to 'con:' (see help for the Write
command for further details on con:) so if con: is chosen as the write
file, Plot mode is invalid.
?PlotOutput
The PlotOutput command lets you set the output device or filename for
GNUPLOT. By default, plots are displayed on an amiga screen, and no
PlotOutput command is required. However, if the Terminal command is used
to produce a plot on an external plotter or printer or to a Postscript or
TeX file, the PlotOutput command may be required. (The argument to the
PlotOutput command will become an argument used in an Output command to
GNUPLOT.)
Syntax:
plotoutput <device or filename: char *>
plotoutput '<device or filename: char *>'
plotoutput "<device or filename: char *>"
plotoutput ''
plotoutput ""
plotoutput
If the terminal command is given without any arguments, or if the argument
is a null string enclosed in "" or '', GNUPLOT will use the default
output (i.e. it will plot to an Amiga screen).
Examples:
plotoutput ser:
plotoutput par:
plotoutput Plot1.PS
Note: Because GNUPLOT already formats the output for the particular
printer you have, use of the serial device (ser:) or parallel device
(par:), whichever your printer is actually attached to, is more
appropriate than the use of the printer device (prt:). GNUPLOT supports
many different printers and plotters, but does not support the Amiga
Intuition printer drivers.
Example:
terminal hp500c
plotoutput par:
?PSDensity
?NoPSDensity
The PSDensity command activates an output normalization in which each FFT
value is divided by the width of the bins used in Hz. The NoPSDensity
command restores the default (total amplitude/power) normalization.
By default, GFFT will output values which are normalized to show the total
amplitude or power (squared amplitude) present in each frequency range
centered on that bin's nominal frequency, as well as can be determined by
the FFT technique (which depends on the window shape used, the number of
segments which can be averaged, and other parameters, but does not feature
an extremely sharp cut-off from one bin to the next as compared with some
esoteric spectrum analysis techniques).
For some applications, it is preferable to have a 'density' normalization,
for which bin values are normalized by the bin width. This will permit
several FFT's of a random noise source using different numbers of bins to
be directly compared with one another or spliced together, even though the
wider bins (which result from using a smaller number of bins) will
naturally capture more amplitude or power. The Multiply command can then
be used to scale each FFT as required.
?Quantization
?NoQuantization
The Quantization command lets you set a quantization value for GFFT
output. For example, a quantization of 0.1 will cause all amplitude or
power values to be rounded off to the nearest 0.1. The quantization value
in effect can be canceled with the NoQuantization command, or by giving
the Quantization command with no argument.
Syntax:
Quantization [<quantization value: double>]
NoQuantization
Note that you could use any arbitrary value for quantization (e.g.
12.3456) though this might not be very useful. Typical values might be
0.1, 0.05, 0.001, etc.
This has no effect on the FFT computation itself, and does not affect the
output of frequency values.
[Unfortunately, quantization may cause 'quantum jumps' to occur back and
forth as a spectrum nears each quantum threshold. Thus, the quantization
feature is not quite as useful as originally intended. What needs to be
done here, I think, is to apply quantization BEFORE smoothing, though the
result would then not be quantized as such. If you have any useful ideas
here, please let me know. Meanwhile, consider the use of explicit HighY
and LowY values to make small Y variations appear less pronounced.]
?Rate
The Rate command allows you to enter the sampling rate for an unformatted
file. You must enter a rate for an unformatted file before giving the OK
command or no analysis will be performed. One you enter a rate, it
remains in effect for all further unformatted files until you select a new
rate or select a formatted file. The rate command expects one numeric
argument which may be in either integer or floating point format. The
rate must be greater than zero.
Syntax:
Rate [<sampling rate: number>]
gfft>rate 10000
gfft>rate 1.119e6
You may also override the rate indicated by a formatted file with the rate
command. (For example, you may wish to change the units from seconds to
microseconds.) To override the rate for a formatted file, you must give
the rate AFTER giving the Read command for the file. (When you give the
Read command the formatted information is read and it supercedes any Rate
command previously in effect.) You may return to the default rate
indicated by the file itself by giving a rate command with no argument.
?Read
The Read command selects a sample file for GFFT to read, or cancels
reading from the sample file currently in effect if no argument is given.
Once a sample file is selected, it remains in effect for one or more
analyses until another sample file is selected.
The argument following Read may be a complete file pathname or a relative
file pathname (relative to the current directory when GFFT was started).
If the filename contains spaces, you must enclose it in either apostrophes
(') or quotation marks (").
Syntax:
Read [<filename: string>]
Read '<filename: string>'
Read "<filename: string>"
Example:
gfft> read sample1
gfft> rate 10000
gfft> bins 1024
gfft> ok
gfft> smoothing 100
gfft> ok
gfft> read "ram disk:samples/my old piano"
gfft> ok
gfft> read /old/sample1
gfft> ok
GFFT can read both formatted and unformatted files. If GFFT understands
the format of the file (it currently understands IFF 8SVX, AIFF, and AVR
formats), it will automatically set the sampling rate. If the file is
unformatted, you will have to set the sampling rate manually before
beginning an analysis. You may also have to use the Bits and Unsigned
commands if your unformatted file uses does not use the default for
unformatted files (8 bits, signed).
If the file is formatted using an unrecognized format, you may still be
able to read it using the CLI command 'StartByte' (which allows you to
skip over the file header) if you know how long the file header is, and
'Frames' (which allows you to read a specified number of frames, skipping
any file segments following the sample data). This is not recommended
unless you are very familiar with the inner workings of the file format
you are working with. (GFFT recognizes but does not yet understand RIFF
and VOCH formats. See help for the IgnoreFormat command for further
advice on how to deal with those formats.)
A sample file must be selected before you can perform an analysis.
However, you may specify 'con:' as the sample file. This will cause GFFT
to prompt you to enter each data point from the keyboard after the OK
command is given. You may then enter each point as a floating point or
integer number. Note that for con: you must also enter the sampling rate
before giving the OK command, since con: has no 'formatted' information.
This may be useful if you have a small number of manually recorded data
points, or wish to experiment with FFT spectrum analysis to gain a deeper
understanding of it. For example, if you entered the following:
gfft> read con:
gfft> rate 10000
gfft> ok
Enter <value> (float OK) or <newline> to end input [0]: 1
Enter <value> (float OK) or <newline> to end input [0]: 0
Enter <value> (float OK) or <newline> to end input [0]: -1.0e0
Enter <value> (float OK) or <newline> to end input [0]: 0
Enter <value> (float OK) or <newline> to end input [0]:
You would get a spectrum of 2 points (Nyquist Frequency/2, Nyquist
Frequency) with amplitude 0.707... at the first frequency and amplitude 0
at the second frequency. This illustrates the default normalization of
GFFT, since 0.707... is also the RMS amplitude of the signal you have
entered, and it has a frequency of half of the Nyquist frequency.
Once con: has been specified as the sample file, it remains in effect
until another Read command is given. However, the con: data is stored
internally so you do not have to re-enter it for each analysis. If you
wish to read new data from con:, you may give the 'Read con:' command
again.
con: must be specified in lower case.
?Rectangle
The Rectangle command selects windows of rectangular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins. The Rectangle command cancels the previously selected
window shape.
The 'Rectangle' window is the simplest window (effectively a series of
1's) and the fastest to compute and apply (i.e. no computation or
application is necessary). It also results in the sharpest initial
fall-off on either side of a spectral peak. However, it is the most
susceptible to the presence of side-lobe artifacts. If you wish to remove
the influence of side-lobes, use a different window shape, such as
'74dbBlackmanHarris.'
Rectangle is currently the default window shape.
?ReOutput
The ReOutput command allows you to rewrite the results of the preceding
analysis subject to a number of changed parameters. The FFT analysis
itself will not be repeated, only the output processing (and plotting
phase--if Plot is selected). This is useful for making minor changes
after a long analysis without repeating the analysis itself.
Here are the parameters which may be changed before a ReOutput:
Spectrum File ('Write,' 'Open,' or 'Append' commands)
Plot (or NoPlot)
Smoothing Segments and Squared Smoothing
High Frequency
Low Frequency
Mean
Power
Amplitude
dB
LogX
LogY
Multiply
Sampling Rate
Pink
Parseval
Quantization
LowY
HighY
Here are just a few parameters WHICH SHOULD NOT BE CHANGED between OK and
ReOutput:
Sample File (Read command)
Bins
Overlap
Pad
Window Shape (Rectangle, 74dB, etc.)
Any 3d parameters...in fact, ReOutput is not at all possible with 3d...
see help for the RePlot command.
Warning! Currently, if you change these parameters and ReOut, you will
not get any sort of warning that the changed values have no effect.
There is also a RePlot command, with different capabilities (generally
more limited) which skips the output stage (but allows change of 3d
parameters).
?RepeatOnly
?NoRepeatOnly
The RepeatOnly command causes GFFT to read only the repeat portion of a
sample in a format (e.g. 8SVX) which supports this feature. By default,
GFFT will read the combined one-shot and repeat portions of the file. The
RepeatOnly command implicitly cancels the OneShotOnly command as they are
mutually exclusive. The NoRepeatOnly command cancels the RepeatOnly
command and restores the default operation if RepeatOnly had been in
effect.
?RePlot
The RePlot command allows you to plot the previous analysis with a few
changed parameters. The analysis itself, including the output phase, will
not be repeated. Instead, GNUPLOT will be re-invoked with with new
parameters.
Here are the parameters which may be changed between OK and RePlot:
Plot (if previously off)
LogX (with no smoothing! LogX smoothing requires output phase)
LogY
RotX
RotZ
LowFrequency (*see note below)
HighFrequency (*see note below)
Warning! Currently, if you change other parameters and RePlot, you will
not get any sort of warning that the changed values have no effect.
Note that the ReOutput command permits the modification of many more
parameters than RePlot, though it might take slightly longer, and it does
not permit the repetition of a 3D analysis. (ReOutput will also produce a
plot if Plot mode is activated.)
RePlot may also be used in conjunction with the Open command to RePlot
previously stored spectral data files. See help for the Open command
for further details.
*Note that RePlot does not effect the LowFrequency and HighFrequency in
exactly the same way as OK or ReOutput. OK and ReOutput 'filter' the data
written to the output data file so that no data outside the range
established by LowFrequency and HighFrequency is written. RePlot cannot
filter the data which has already been written, but instead sends an
explicit 'set xrange' command to GNUPLOT. OK and ReOutput simply let
GNUPLOT do autoranging for the x coordinate. If you wanted a plot with
artificially large left and right 'margins,' you could first do OK (with
the desired actual data range set or defaulted), then do a RePlot with
LowFrequency and HighFrequency values set outside the range of actual data
to the point(s) where you would like the margins to be. Thus, this
difference in the way LowFrequency and HighFrequency are used in RePlot
mode is actually a 'feature.'
?RotX
The RotX command changes the X Rotation factor used by GNUPLOT in
rendering a three-dimensional plot (as would be produced using the Time3D
command(s).) Giving RotX without any arguments restores the default
value, which is 60 degrees.
Syntax:
RotX [<x rotation: degrees 0-180>]
Example:
gfft>RotX 10
?RotZ
The RotZ command changes the Z Rotation factor used by GNUPLOT in
rendering a three-dimensional plot (as would be produced using the Time3D
command(s).) Giving RotZ without any arguments restores the default
value, which is 30 degrees.
Syntax:
RotZ [<x rotation: degrees 0-360>]
Example:
gfft>RotZ 90
?Set
Most commands in GFFT are 'set' commands, i.e., they adjust some particular
setting which takes effect later when the OK command is given. It is not
necessary to preface these command with the verb 'Set,' as it is implied.
However, for those whose fingers have been trained (by GNUPLOT and/or
other programs) to type SET without thinking, an explicit SET command is
also provided in GFFT. It is essentially a dummy command, or, more
precisely, it simply executes its arguments as if they are a complete
command string in themselves.
For example, the two following commands are equivalent:
set logx
logx
Set does not discriminate between commands that are parameter setting
commands and those that are not. So, you could type 'set ok' which would
perform the OK command.
?SaveMemory
?NoSaveMemory
The SaveMemory option indicates to GFFT that you need to save memory
space, possibly at the expense of processing time. The NoSaveMemory
command cancels this. By default, GFFT will use extra memory if it can be
used to save estimated processing time, even if the effect on processing
time is fairly small.
Currently, the only effect this has in on whether the trigonometric values
used in the primary FFT function are saved for re-use. By default, these
values are saved, so if more than one segment is processed, they will not
have to be recomputed. This saves time at the expense of a considerable
amount of memory (which increases as the number of bins increases). If
you are using a very large number of bins with a limited amount of memory,
you may need the SaveMemory option. I have found that even with a large
number of segments, the effect of saving these trigonometric values is
fairly small, about 6% on overall performance at most. With some cached
processors having very high internal floating point throughput (e.g.
68040), the 'savememory' option might actually result in increased
performance under some unusual circumstances, though the difference is
likely to be quite small.
?ShowSettings
The ShowSettings command displays a number of settings (such as input
filename, output filename, number of bins, sampling rate, and window
shape) which are currently in effect.
ShowSettings has not kept up with the enormous growth of parameters and
options in this program. I figure most people will be using the
workbench interface anyway, or switching between CLI and workbench.
Let me know if you are a CLI user so you can be counted.
?Signed
?Unsigned
The Signed command specifies that the input data file will have samples in
'signed' format. The UnSigned command will specify that the input data
file will have samples in 'unsigned' format. These commands are not
necessary for formatted files, as the property is determined by the file
type and/or header. However, if you give the Signed or Unsigned command
after the Read command, the Signed or Unsigned command will override the
file type and/or header.
Signed is the default and most usual type.
?SmoothingSegments
Using the SmoothingSegments command, you can specify that the output be
'smoothed' or averaged over a certain number of segments. (This works
best if the number of segments is much smaller than the number of bins
used). The argument to SmoothingSegments is the number of segments to
span the range from the lowest non-zero frequency to the Nyquist
frequency. If the SmoothingSegments command is given without any
arguments, smoothing is canceled.
Syntax:
SmoothingSegments [<segments: integer>]
Example:
gfft> smooth 200
If you plot with a large number of bins, or with LogX on, you may find
that the left or right side of the plot line 'blooms' vertically with a
wide range of values. Rather than 'pixel averaging,' GNUPLOT shows the
effect of plotting a line to each and every data point (even if many such
points occur within one vertical line of pixels). SmoothingSegments can
be used to eliminate this 'blooming' effect, simulate 'pixel averaging,'
and give you a more easily interpretable curve (though some important
actual detail may be lost).
If LogX is enabled, the mesh applied to the output will be logarithmically
scaled. The combination of using LogX, SmoothingSegments, and a extra
large number of Bins is especially recommended for random noise analysis
and/or whenever LogX is used.
The smoothing technique is very simple. A mesh of smoothing segments is
laid on top of the FFT bins, and for each smoothing segment containing
one or more bins, the average Y (amplitude) and X (frequency) values are
computed, and these become the X and Y values that are written to the
output file. If there is only one data point within a smoothing segment,
it is unchanged by this procedure. If there is no data point within a
smoothing segment, no data point will be output. (Because of this, if LogX
is enabled, it is very possible that there will not be as many data points
as the number of segments you have chosen. For example, given 4096 bins
and 400 smoothing segments, only about 225 points will actually be
produced because the actual data points in the beginning are farther apart
than the smoothing segments.)
If SquaredSmoothing selected, the averaging of the Y values is done by
taking the positive root of average of the sum of the squared Y values.
I am aware of much more sophisticated smoothing or 'convoluting'
procedures which may have greater theoretic validity (e.g., see S. P.
Lipschitz, T. C. Scott, and J. Vanderkooy, 'Increasing the Audio
Measurement Capability of Analyzers by Microcomputer Postprocessing,'
Journal of the Audio Engineering Society, Volume 33, Number 9, September
1985...their technique simulates 1/3 octave bandwidth digital filters
which is useful in that it supposedly approximates human auditory
limitations), but these are also much more complicated. The present
technique is workable and useful, though it may be somewhat lacking in
theoretic validity (though it is not entirely without precedent), and the
results should be interpreted with some caution (you are probably not
seeing all the real features that are there--but then that is true with
any technique).
?SquaredSmoothing
?NoSquaredSmoothing
The SquaredSmoothing command changes the operation of SmoothingSegments
(see) slightly. It has no effect if SmoothingSegments are not being used.
The NoSquaredSmoothing cancels SquaredSmoothing.
With SquaredSmoothing selected, the averaging of the Y values is done by
taking the positive root of the average of the sum of the squared Y
values.
I have found this to make a nearly negligible difference in practice, but
your experience may vary.
?StartByte
The StartByte command allows you to set a byte offset into a file at which
GFFT will start reading samples. StartByte should only be used with
unformatted files, those whose format is not recognized by GFFT, or whose
format is being ignored with the IgnoreFormat command, and only by those
who understand the file format. If the StartByte command is given without
an argument, the StartByte feature is canceled.
See also the StartFrame command, which is intended for more general usage.
?StartFrame
The StartFrame command allows you to set an offset into the sampled data
at which GFFT will begin reading. This is intended for use with formatted
files which GFFT understands or unformatted files. Use this command if
you wish to ignore an early portion of the data.
Syntax:
StartFrame [<frame number: non-negative integer>]
If Time3D processing is being performed, the StartFrame will apply to the
data as a whole, and not to each Time3D segment.
?Terminal
The terminal command allows you to set the terminal type to be used by
Gnuplot. Ordinarily, GNUPLOT will default to using the 'amiga' terminal.
Thus, your plot will be displayed on an amiga screen. Using the
'terminal' command, you can set it to use a printer, plotter, or anything
else supported by GNUPLOT.
Syntax:
terminal
terminal <terminal name: name>
terminal '<terminal specification: character string>'
terminal "<terminal specification: character string>"
terminal ""
terminal ''
If the terminal command is given without any arguments, or if the argument
is a null string enclosed in "" or '', GNUPLOT will use the default
terminal type. If the argument given to the terminal command consists of
more than one word separated by spaces, it should be enclosed in "" or ''
(whichever is not used in the actual string).
Examples:
terminal amiga
terminal hp500c
terminal dumb
terminal 'postscript landscape color "Courier" 14'
terminal
Note that if you specify a printer terminal, you should also use the
PlotOutput command to specify the output device (ser: or par:, NOT prt:)
or filename.
For further information about the many GNUPLOT terminal types, refer to
the GNUPLOT documentation.
Note: the version of GNUPLOT supplied with WinGnuPlot defaults to using a
terminal 'amigawindow' which requires MUI. For use with GFFT, this
must be changed to terminal 'amigascreen,' which is done by renaming the
file .gfft-WinGnuPlot to .gfft as discussed in the INSTALLATION file.
?Time3D
?NoTime3D
?TimeOffset
?TimeOverlap
?TimeSegments
?TimeSegSize
Syntax:
Time3D
NoTime3D
TimeOffset [<Time Offset: integer>]
TimeOverlap [<Time Overlap: floating point number>]
TimeSegments [<Time Segment Count: integer>]
TimeSegSize [<Time Segment Size: integer>]
The '3D-Time' facilities of GFFT are intended to enable you to show how a
spectrum varies with time. GFFT is very flexible in how it enables you to
do this. The results can also be plotted in 3 dimensions by GNUPLOT where
Z is the axis of time.
The basic model is as follows: The sample frames are divided into segments
called 'Time Segments,' and a spectrum analysis is performed on each Time
Segment. Time Segments can be overlapped, and the overlap can either be
specified as a fraction of the size of each Time Segment ('Time Segment
Overlap') or as the number of frames by which each Time Segment is ahead
of the previous one ('Time Segment Offset'). By default, the Time Segment
Overlap is set to 0.5 (i.e. 50%) and the 'Time Segment Offset' is computed
automatically. Then, either the number of time segments can be specified
(this is the 'Time Segment Count') or, their size can be specified (this
is the 'Time Segment Size') whichever is more convenient or useful to your
application.
One of the two parameters Time Segment Count and Time Segment Size must be
set. When either of these two parameters is set, any previous value of
the other one will then be determined automatically.
Time Segment Overlap has a default value of 0.5. If Time Segment Offset
is set, it supercedes Time Segment Overlap.
If you set any of the above 3D-Time parameters, Time3D mode is activated
automatically. You may deactivate it by giving the NoTime3D command, and
subsequently reactivate it by giving the Time3D command.
You may also adjust the X Rotation and Z Rotation factors used by GNUPLOT
in rendering the 3-d plot using the RotX and RotZ commands.
Note that Time Segments are distinct from the FFT 'segments' used in a
flat spectral analysis--and in the FFT analysis within each Time Segment.
If each Time Segment is large enough relative to the number of Bins, there
may be more than one FFT segment within each Time Segment, the results of
which are averaged to reduce the variance. Within each Time Segment, the
usual 'Bins,' 'Overlap,' 'Pad,' and window shape parameters still apply,
so the full flexibility of a flat GFFT is available (though the maximum
number of bins possible may be reduced). Only one parameter available to
a flat analysis is unavailable for analysis within each Time
Segment--StartFrame. StartFrame will apply to the input file as a whole
and not to each Time Segment.
In cases where 3D-Time analysis reduces the number of bins possible, the
use of high performance window shapes such as Hann or 74dB Blackman-Harris
is recommended.
Examples:
1. Suppose you just want a rough idea as to how the spectrum in a fairly
small sample file (such as an instrument) varies over time, and are
willing to use the default Time Segment Overlap (50%), and would simply
like each segment to use the maximum Bins size possible (with overlap, if
possible). You might figure 5 time segments would be adequate to get a
rough idea, yet would not be too many considering the number of frames.
(If you have a very small sample file, you might have to use only 2 or 3
Time Segments. Increasing the number of Time Segments will reduce the
maximum possible number of bins, so there is a trade-off here which is
critical for small sample files.)
gfft>read piano.iff
gfft>TimeSegments 5
gfft>74dB-Blackman-Harris
gfft>OK
If the Bins value had previously been set to a specific value, or if a
NoOverlap command had previously been given, you would also include one of
the following commands prior to OK:
gfft>Bins
gfft>Overlap
2. Suppose you wish to divide the sample file into non-overlapping time
segments which could each be analyzed with 1024 bins (with no overlap or
padding within each time segment).
First set the Time Segment Size parameter to 2048, then set the Time
Overlap parameter to 0. (For non-complex data, there must be 2 sample
frames for each FFT bin.) You may either specify 1024 bins or use the
maximum (default) setting, which is re-established by giving a Bins
command with no argument. Since exactly 2048 frames are available in each
Time Segment, and this corresponds exactly to what would be required for
1024 bins, no overlap will be used within each Time Segment regardless of
whether the Overlap mode is engaged, so it is not necessary to give the
NoOverlap command in this case.
gfft>Read manysamples.aiff
gfft>TimeSegSize 2048
gfft>TimeOverlap 0
gfft>Bins
gfft>OK
3. Suppose you wish to have each Time Segment to be ahead of the previous
one by exactly 1000 frames. (This might apply if you want the z axis to
have increments of 0.1 second, and the sampling rate was 10,000.) You
consider some Time Segment overlap of approximately 0.5 to be acceptable,
but you would like an analysis with 1024 bins.
gfft>Read myrate10000
gfft>TimeSegSize 2048
gfft>TimeOffset 10000
gfft>OK
4. Suppose you have a VERY large sample file, and would rather not
analyze the whole thing, but would like a 'spot' analysis every 100,000
frames. You would like to have 1024 bins used in each analysis, but would
prefer to reduce the variance of each 'spot' spectrum by averaging 4
overlapped segments within each time segment.
Note that the overlap used for a flat spectral analysis and within each
Time Segment is fixed at 0.5 and cannot be changed (though it can be
turned off). Therefore, 2 overlapping FFT segments would occupy 1.5x the
space of one segment, 3 overlapping segments would occupy 2x, and 4
overlapping segments would occupy 2.5x if exactly these numbers of frames
are available.
So, to get 4 overlapped FFT segments within each Time Segment, we would
specify the TimeSegSize to 2.5 x (1024 x 2) which is 5120. In this case
we would have to specify the Bins too, otherwise they would default to
the maximum possible, 2048.
gfft>Read hugefile.aiff
gfft>TimeOffset 100000
gfft>TimeSegSize 5120
gfft>Bins 1024
gfft>OK
(Actually, 2 overlapping segments will be used for any number of frames
greater than 1 segment but less than 2 segments, 3 overlapping segments
will be used for exactly the number of frames in 2 segments, 4 overlapping
segments will be used for any number of frames greater than 2 segments but
less than 3 segments, and so on.)
?Triangle
The Triangle command selects windows of triangular shape. These windows
will be applied to the data in segments whose size is determined by the
number of bins. The Triangle command cancels the effect of any preceding
window shape command.
The 'Triangle' window is the next simplest window, after the Rectangle
window. Its shape is that of a triangle peaking in the center of each
data segment. The 'Triangle' window is often called the 'Bartlett'
window, after a scientist who found it to be useful.
The triangle window is superior to the rectangle window in side-lobe
rejection. In turn, it is inferior to all remaining window shapes in
side-lobe rejection.
?Welch
The Welch button selects windows of particular shape. These windows will
be applied to the data in segments whose size is determined by the number
of bins. The Welch command cancels the effect of any preceding window
shape command.
The Welch window is based on the formula presented by Press, et al, in
their book 'Numerical Recipes.' It is superior to the triangle and
rectangle windows in sidelobe rejection.
?Workbench
The Workbench command will open a 'GFFT Dialog Window' on the workbench
(or the default public screen) to continue the current GFFT session. If
you have already selected file(s) and/or options, these will continue in
effect and may be shown in the Dialog Window display. From the GFFT
Dialog Window, you may perform any operations ordinarily available in that
display, the same as if you had clicked on the GFFT icon to begin with.
While the GFFT Dialog Window is active, no more commands will be accepted
from the console, but you may be prompted to enter data points from the
console if 'con:' is specified as the sample file.
To resume entering commands from the console, click the 'CLI' button on
the lower left hand of the GFFT Dialog Window display. At that point,
the GFFT Dialog Window will be removed and GFFT will prompt for the
next command.
You may go back and forth between graphical and command modes as often as
you wish.
?Write
The Write command enables you to explicitly name and save the file of
spectral data written by GFFT (and read by GNUPLOT). By default, if plot
mode is activated (which is the default except for CLI-Batch mode),
temporary spectrum file(s) are created automatically by GFFT for GNUPLOT
and deleted when GFFT exits, so it is not necessary to give a Write
command. But if you would like to save the spectrum file, or if plot mode
is not activated, you must specify an explicit spectrum file name before
giving the OK command. To return to the default (using automatically
named temporary files), give the Write command without an argument.
Note that spectral data will only be written after an OK command is given.
Syntax:
Write [<filename>]
Write con:
There are several reasons why you would use a Write command:
(1) GNUPLOT uses the filename in the legend it creates to
identify plotted lines. You may wish to use a nicer name
than the one automatically created for the temporary file.
(2) You want to save spectral data files for later plotting or
or other uses.
(3) You wish to display the output data points on the console.
Note that if you specify the device 'con:' as the spectral
output data will be written to the console. In this mode,
it will not be possible to plot the data.
Note that if you perform more than one FFT without changing the Write
name, the later data will, by default, overwrite the earlier data from the
beginning. If you would rather accumulate data in the same file (such as
if you are computing a particular spectrum in bands), use the Open command
(see) instead of the Write command. If you would like to view several
spectra in the same plot, use the CombinePlots command (see).
Example:
sys> gfft
gfft> read whales.iff
gfft> hann
gfft> write whales-hann
gfft> ok
gfft> combineplots
gfft> 74db
gfft> write whales-74dB
gfft> ok ;both whales-hann and whales-74db are plotted
?Appendices
The following appendices are present: code contributors, idea
contributors, and financial contributors.
?code contributors
Code has been submitted by and accepted from...
[See your name here...please contribute code, GOOD code.]
[Please see README file for further details.]
?Idea Contributors
?References
Just a few of the multitude who have developed the ideas behind this
program can be listed here...
Jean Baptiste Joseph Fourier...developer of the Fourier Series
Danielson and C. Lanczos...FFT pioneers of the 1940's
J.W. Cooley, J.W. Tukey, and R.L. Garwin of IBM...first to make the
decimation-in-time FFT public, and in the public domain (YES!)
N. Brenner of Lincoln Laboratories...refined the 'in-place' algorithm
Julius Von Hann...developer of the Hann[ing] window
Fredric J. Harris, window expert and refiner of the 'Blackman-Harris'
window functions
(Very much was learned from Press, et. al, below, listed in references)
Jay Miner and the other creators and developers of the Amiga computer
Guido van Rossum for SOX and 'FAQ: Audio File Formats' (from which much
was learned)
David Champion for OmniPlay (from which some was learned)
Malcolm Slaney and Ken Turkowski for ConvertFromIeeeExtended (from which
some was learned)
Richard M. Stallman and the Free Software Foundation, for GNU Emacs
(which was used in the creation of this program), the GNU General
Public License, and the GNU Manifesto
Dennis M. Ritchie, for the C programming language (see references)
The SAS Institute, Inc., for the SAS/C compiler (A quality product)
Thomas Williams, Colin Kelley, and innumerable contributors for
Gnuplot
Adrian Aylward and Robert Poole for POST version 1.86enh
All the others whose work and vision has made this possible
REFERENCES:
Commodore Amiga, Inc., 1992. 'Amiga ROM Kernel Reference Manual:
Libraries, Third Edition' and 'Amiga ROM Kernel Reference Manual: Includes
And Autodocs, Third Edition.' (Reading, Massachusetts: Addison-Wesley
Publishing Company)
Fredric J. Harris, 1978. "On the Use of Windows for Harmonic Analysis
with the Discrete Fourier Transform," Proceedings of the IEEE, vol. 66
pp. 51-83.
Brian W. Kernighan and Dennis M. Ritchie, 1988. 'The C Programming
Language, Second Edition.' (Englewood Cliffs, New Jersey: Prentice Hall)
Press, Flannery, Teukolsky, and Vetterling, 1988. 'Numerical Recipes in
C' (Cambridge UK and New York: Cambridge University Press), pp. 398- 470.
SAS Institute, Inc., 1993. SAS/C Development System User's Guide, Volumes
1-3, Version 6.50. (Cary, NC: SAS Institute, Inc.)
?financial contributors
Only a limited number of financial contributors, and ONLY those who give
their EXPRESS permission will be listed here, and identifications may be
limited in length (1-2 lines maximum) and/or edited. Presence on this
list DOES NOT constitute any form of endorsement either to the parties
listed or from them to GFFT. For the purposes of this list, purchasing
services at minimum donations does not qualify.
?Installation
Installation instructions are included in a file named 'INSTALLATION.'