Adaptive Optimal-Kernel (AOK) Time-Frequency
Representation
Version 4.0
Douglas L. Jones
Coordinated Science Lab
University of Illinois
1308 West Main Street
Urbana, IL 61801
Tel: (217) 244-6823
Fax: (217) 244-1642
Email: jones@uicsl.csl.uiuc.edu
Richard G. Baraniuk
Department of Electrical and
Computer Engineering
Rice University
P.O. Box 1892
Houston, TX 77251-1892 USA
Tel: (713) 527-4020
Fax: (713) 524-5237
Email: richb@rice.edu
URL: http://www.dsp.rice.edu/
This document briefly describes how to compile and run version 4.0 of
the program ``aok'', which implements the adaptive optimal-kernel
(AOK) time-frequency representation algorithm described in the paper:
``An Adaptive Optimal-Kernel Time-Frequency Representation,''
by D. L. Jones and R. G. Baraniuk, IEEE Transactions on Signal
Processing, Vol. 43, No. 10, pp. 2361--2371, October 1995.
The program is written in the C language (for speed) and produces an
ASCII output that is readily read into Matlab for display. For more
details on the specifics of the algorithm, please refer to this paper
--- preprints are available from either author or from the Rice DSP
WWW homepage at http://www-dsp.rice.edu.
1. COMPILING AOKn.C
----------------
aok4.c is written in the C language, and should compile immediately on
most platforms. Compile using:
cc aok4.c -lm -O4 -o aok
This will create the executable file ``aok''.
2. USING AOK
---------
aok is very simple to use. When prompted, simply enter the following
data:
Name of input file?
- the name of the file containing the signal that you wish to
analyze.
- the data should be in ASCII format, in two columns, as COMPLEX
numbers (that is, with both real and imaginary parts) with the
real part in the leftmost column and the imaginary part in the
rightmost column, and with each new sample on a new line, like
so:
1.234 0.123 - first sample real and imag part
4.1234 5.1235 - second sample real and imag part
0.0 10e-5 - third sample real and imag part
...
- if REAL data is to be analyzed, care must be taken to place
zeros in the imaginary column, like so:
1.234 0.00
4.1234 0.00
0.0 0.00
Otherwise, erroneous output will result. (!)
- there is *no* need to "double oversample" the signal as with
many other TFR programs, because special anti-aliasing protection
has been provided.
Name of output file?
- the name of the output file that will contain the adaptive
optimal-kernel time-frequency distribution (AOK TFR).
- the TFR is saved in ASCII format that is readable by Matlab.
To load a TFR saved in file foo.dat with Matlab version 3,
simply use the command
load foo.dat
With matlab version 4, use the command
load foo.dat -ascii
Each line in the ascii file corresponds to a row of the TFR
matrix, which in turn corresponds to one time slice of the
transform. Note that the name of the TFR is ``foo'' after
read-in.
- when read into Matlab, the TFR is arranged as follows: the
row index is time, with increasing row index corresponding to
increasing time, and the column index is frequency (between
-pi and +pi rad/sec), with increasing column index corresponding
to increasing frequency.
- note that there are more time rows in the TFR than samples in
the signal, to allow for any spreading that may occur from
selecting very long kernels in the time direction.
- while we have chosen to use an ASCII output for greater
compatibility across various computing platforms, this choice
also results in the data output portion of the program dominating
the total running time of aok. Note, however, that the save
portion of aok4.c can easily be customized for other (faster!)
types of output formats. (In fact, a C-Mex version for direct
interface with Matlab is planned.)
Number of signal samples in input file?
- the number of signal samples in the data file.
Length of sliding analysis window? (power of two)
(Number of samples along each dimension of the STAF)
- this value also corresponds to the length of the portion of the
signal that is windowed and viewed to compute each update of the
optimal kernel and slice of the adaptive optimal-kernel TFR.
- this number is equivalent to the number of samples along one
dimension of the short-time ambiguity function (STAF) that is
utilized to update the optimal kernel and compute a slice of the
adaptive optimal-kernel TFR.
- in general, the window length should be chosen as the minimum of a
number slightly larger (in samples) than the number of samples in
the longest-duration signal component which it is desired to
resolve, or the effective number of the maximum desired number of
independently resolvable frequency bins.
- the maximum allowable value is currently hardlimited to 256.
If your machine has plenty of memory, this value can easily be
increased by changing the array size definitions in the program.
Number of output frequency samples per time-slice? (power of two)
- number of samples in the frequency direction that are computed
for the optimal-kernel TFR at each time instant.
- the frequency output ranges from -0.5 to 0.5 cycles per sample
(the full range available to a discrete-time signal).
Time increment in samples between time-slice outputs?
- for very long signals, the optimal-kernel TFR can be decimated.
- input value is the decimation factor.
- for short signals, use the value 1.
Normalized volume of optimal kernel?
(Typically between 1 and 5)
- this parameter controls the amount of smoothing in the optimal-
kernel TFR, and hence, controls the cross-component suppression
versus auto-component smearing tradeoff.
- a value of 1 corresponds to the same amount of smoothing as a
spectrogram (in many cases excessive).
- a value of above 5 or 10 gives essentially the pseudo Wigner
distribution of the signal.
- typically we balance between these two extremes by selecting
a kernel volume of between 2 and 4 (2.5 or 3 are both good
defaults).
- if the results of the optimal-kernel TFR are not satisfactory,
try again with a different volume:
Too many cross-components => decrease the volume
Excessive smoothing => increase the volume.
3. TEST SIGNALS
------------
Two test signals are included with this distribution of the aok
software. The first, contained in the file ``chirp.sig'' is a simple
chirp signal, whose instantaneous frequency rises with time. After
starting aok, enter the following data to produce an adaptive TFR with
64 frequency bins:
Name of input file?
chirp.sig
Name of output file?
chirp_aok.dat
Number of signal samples in input file?
64
Length of sliding analysis window? (power of two)
(Number of samples along each dimension of the STAF)
64
Number of output frequency samples per time-slice? (power of two)
64
Time increment in samples between time-slice outputs?
1
Normalized volume of optimal kernel?
(Typically between 1 and 5)
3
Now, in Matlab version 4, enter the following to get a display of the adaptive
TFR of this chirp signal (``>>'' represents the Matlab prompt):
>> load chirp_aok.dat -ascii
*** Loads the matrix ``chirp_aok''
>> whos
Name Size Elements Bytes Density Complex
chirp_aok 130 by 64 8320 66560 Full No
Grand total is 8320 elements using 66560 bytes
*** To display the AOK TFR with the time axis horizontal and the
frequency axis vertical, enter (in Matlab 4):
>> contour(abs(flipud(chirp_aok')))
*** Note also that the adaptive TFR is pre- and post-zeropadded by
approximately Nstaf/2 samples, where Nstaf is the amount entered
when prompted ``No. of samples in STAF?''.
The second signal is the test signal utilized in the paper mentioned
in the Introduction. The signal in file ``papertest.sig'' contains
two closely-spaced impulses, two simultaneous sinusoids, a Gaussian
pulse, two parallel chirps, and a final impulse (in 223 time points).
Running aok as follows should result in a high resolution
time-frequency image:
Name of input file?
papertest.sig
Name of output file?
papertest_aok.dat
Number of signal samples in input file?
223
Length of the sliding analysis window? (power of two)
(Number of samples along each dimension of the STAF)
64
Number of output frequency samples per time-slice? (power of two)
64
Time increment in samples between time-slice outputs?
1
Normalized volume of optimal kernel?
(Typically between 1 and 5)
1.5
4. CHANGES FROM RUNRGK3.c
----------------------
aok4.c is simply a renamed version of the program runrgk4.c. The main
change from runrgk3 to runrgk4 was an improvement in the iterative
algorithm that solves for the optimal spread vector of the optimal
radially Gaussian kernel.
5. COMMENTS / QUESTIONS ?
----------------------
If you have any comments, suggestions, or questions, please do not hesitate
to contact either one of us. Thanks for trying out the AOK TFR!
- Rich and Doug
November 15, 1992
February 9, 1993
January 29, 1996