In this lab, we will learn how to do frequency analysis of a discrete-time signal on a
computer, and investigate the effect of different frequency-domain transformations.
When using a digital computer, frequency analysis of a signal (or sequence) means
using a Fast Fourier Transform (FFT), which is an efficient implementation of a
discrete Fourier Transform (DFT), which is a discrete-frequency version of the
discrete-time Fourier transform (DTFT). In this lab, you will use the MATLAB
command fft to implement the DFT of different signals. Use the help feature in
MATLAB to learn the syntax of the fft function.
For the FFT, the length N is constrained to be a power of 2. You can specify the
length of the FFT that you want to use. If the FFT length is longer than your signal,
then the function will add zeros to the end of the signal.
1. Computing and plotting DFTs with MATLAB
Recall that in discrete-time, there is only a 2p range of unique frequencies, so the
DTFT is periodic with period 2p (or 1 if we are using normalized frequency). The
DFT is a sampled version of the DTFT of a windowed signal, with samples at integer
multiples of 2p/N where N is the length of the DFT (and the time signal window). The
DFT outputs a sequence for k=0,…,N-1 where the sample k corresponds to frequency
k2p/N. We typically plot the DTFT over the range [-p,p) in radians or [-0.5,0.5) in
normalized frequency. You can take advantage of periodicity of the DFT X[k] to get
the negative frequencies (X[-k]=X[N-k]), which is done for you with the the
Suppose we want to find the Fourier Transform X_fft of signal x using N = 1024
samples in the frequency domain:
N = 1024;
X_fft = fftshift(fft(x, N));
This will give a DFT centered around w=0.
In general, a DTFT (and hence an FFT) of a sequence will be a complex function so
you will need to look at the magnitude and phase separately. The MATLAB
commands abs and angle are useful for obtaining the magnitude and phase of a
complex valued sequence. Often magnitude is plotted on a log scale.
Now, let’s say you did some processing in the frequency domain, and now want to
convert Y_fft to the time domain, we would call ifft as such:
y_ifft = ifft(fftshift(Y_fft), N)
y = real(y_ifft);
A call to function real is needed because numerical round-off errors in fft and ifft can
introduce a very small nonzero imaginary component to the output y_ifft. In general,
the time domain signals we analyze will be real-valued, so we need to remove the
insignificant imaginary part. (If the imaginary part is not small, then you probably
have an error somewhere.)
The FFT only has values at discrete frequencies, but continuous frequency plots (i.e.
using plot) are often used since they look like the DTFT or CTFT that you are
ultimately interested in. To plot the DTFT based on the DFT, you will need to convert
the discrete sample times to continuous frequencies for the x-axis: k à k2p/N in
radians or k à k/N in normalized frequency. To plot the CTFT based on the DFT,
use k à kFs/N in Hz where Fs is the sampling frequency.
Find the DFT and plot the log magnitude and phase of the corresponding DTFT for
the following signals:
IN-LAB CHECK-OFF: Show the TA your plots for the different signals. Be sure to
label the frequency axis.
WRITTEN REPORT: Turn in the plots for the different signals. Specify the window
length N and explain why the DFTs look different in terms of Fourier Transform
2. FFT of a Periodic Signal
Plot the magnitude of the FFT of the following signal before and after the fftshift
for the cases where f=0.25 and f=0.5. Generate a 2-part stem plot for each signal
(unshifted DFT and shifted DFT) using a normalized frequency scale. Discuss why
the frequency peak locations make sense. For the case where f=0.26, plot the
magnitude after the fftshift for three different length signals side by side (N=32,
N=128, and N=512), increasing the length of the FFT accordingly. Then plot the
magnitude of the results of a 512 point FFT with the original N=128 length signal.
Explain any differences you observe.
Read in the short flute sound. Generate a plot showing the log magnitude of the DFT
for this signal with a frequency axis scaled according to the sampling frequency that
you read with the signal (as for a CTFT). Determine what note is being played.
IN-LAB CHECK-OFF: Show the TA your plots for the different cosines and explain
WRITTEN REPORT: Turn in the plots for the cosine with frequency f=0.26 for the
3 window lengths and explain why the DFTs look different. Include the flute DFT
plot, specify what length FFT you used and why, and explain how you determined the
note that is being played.
3. Frequency Shifting
Recall that multiplying by a complex exponential in time (or a cosine, which is
comprised of complex exponentials) results in a frequency shift. For each of the
following sequences, let and . Use the built-in sinc function in
MATLAB. Plot the magnitude and phase plots (using plot), where the magnitude and
phase plots are over the range -0.5 ≤ f ≤ 0.5 (normalized frequency), i.e. use
x n fn n [ ] 1 cos(2 ) 0 127 =+ ; p £ £
1f = . 0 15 0 255 £ £ n
1 1 xn f n [ ] sinc( ( 32)) = –
2 1 [ ] sinc( ( 32))( 1)n xn fn = – –
c) where .
WRITTEN REPORT: Turn in plots of the magnitude and plots for (a)-(c). State
what type of signals each corresponds to (low pass, high pass, etc.) and what the
(normalized) cut-off frequencies are for each. Explain why the DTFTs do not have a
flat frequency response in the passband.
Summary of Assignments and Deadlines
• In-lab group demonstrations (due during the eighth or ninth week of class)
o Part 1: Display the frequency response plots for the TA and explain
the differences between the signals.
o Part 2: Show the TA the FFT plots for the cosine signal.
• Written report:
o Part 1: Turn in the frequency plots and discussion of differences.
o Part 2: Turn in the frequency domain plots for the cosine with
frequency f=0.26 and explain why the DFTs look different. Include the
flute DFT plot, specify what length FFT you used and why, and
explain how you determined the note that is being played.
o Part 3: Display the frequency domain plots for (a)-(c) for the TA. State
what type of signals each corresponds to (low pass, high pass, etc.) and
what the cut-off frequencies are for each. Explain why the filters do
not have a flat frequency response in the passband.
• Individual files to be turned in via Canvas (due the day before your lab during
the week of Feb 20-23)
o Written report
o Matlab code
31 2 x n f n fn [ ] sinc( ( 32)) cos(2 ) = – p 2f = . 0 2