Ideas for Exploration
To reiterate, my goal in this
article was to give a brief overview
of DFT theory and to provide the
basic tools necessary to get you
up and running with a DFT-related
project. This is only a starting
point. The possibilities from here
are limitless. Here are just a
1) Implement a DFT in a
microprocessor and hook up a
microphone or signal generator to
an A/D input. Hints: Try to avoid
aliasing (low pass filter required)
and remember that a processor’s
input is typically 0 to 5 volts (level
2) Try increasing the sample size
in order to get more frequency
3) As the sample size increases,
the DFT takes longer to run.
Research and implement the fast
Fourier transform (FFT). See
suggested reading. For a real
challenge, try to understand the FFT.
4) The DFT presented here was a
forward transform (going from the
time domain to the frequency
domain). We can also go the other
way. Try making a spreadsheet that
will do an inverse DFT.
5) Built a low speed frequency
analyzer using the DFT.
6) Explore specialized DSP
processors. Manufacturers include
Microchip, Analog Devices, and
Texas Instruments. They all offer
some kind of demo board.
frequency to get the same effect).
You can also check out the
“Aliasing” tab in the spreadsheet to
see how I got these graphs.
smooth curve may help bring out
the original sine wave a little better.
Finally, Figure 8d is the signal
sampled at 500 Hz, which is below
the Nyquist rate. Not only is the 400
Hz sine wave no longer discernable,
but connecting the dots actually
suggests a sine wave of a lower
You can experiment with aliasing
by going to the “DFT” tab and
entering in a test signal frequency that
is higher than half the sampling
frequency (or lower the sampling
64 October 2007
There is one basis function that
may not be obvious. Namely, a basis
function with a frequency of zero. Not
to worry, the DFT doesn’t miss this.
The 0th element in each of the sine
and cosine arrays contains the DC
offset of the signal. Go to the “DFT”
tab and try changing the test signal’s
offset and see how that affects array
element 0. NV