Introduction To Digital Signals Using MATLAB
Introduction To Digital Signals Using MATLAB
Louis Goldstein
In a digitized signal, the time interval between each successive sample is referred to as
the sampling period (T) of the system. The number of samples acquired (or output) in a
second (i.e., 1/T) is referred to as the sampling rate (srate). Number of samples per
second is usually referred to as Hertz (Hz). Common sampling rates for speech are
10000 Hz (sometimes written 10 KHz), 20000 Hz, and 22050 Hz. The standard sampling
rate for music (CD) is 44100 Hz (the reason for this will be discussed later).
MATLAB is a system that allows us to specify digital signals in a simple way, operate
on them mathematically, plot them as time waveforms, calculate their spectra, and play
them out over headphones or speakers. The system can be used interactively (you can
just sit and type and the results of each operation will be displayed in sequence), or
you can write scripts that are sequences of MATLAB statements, and constitute
programs written in this language.
The basic unit of MATLAB is the matrix. A matrix is a set of numbers arranged into
rows and columns. A matrix with a single row (or a single column) is called a vector.
The power (and simplicity) of MATLAB stems from its treatment of matrices (and
vectors) as primitives. A single number (scalar) is the limiting case of a matrix with a
single row and a single column. In what we will be doing, we will make extensive use
of vectors. A digital signal can be represented as a vector, (usually with a large number
of elements) with the individual columns (or rows, depending on the orientation) of the
vector corresponding to the successive signal samples.
III. Some basic MATLAB examples
In what follows lines beginning with were typed by me. Other lines were typed back
by MATLAB.
(1) To define a vector as a sequence of values, set it equal to the desired of sequence of
values, enclosed in square brackets. For example, to define a vector X,
X = [9 8 2 4 8 1 2 8 7]
X =
9 8 2 4 8 1 2 8 7
(2) To plot the points of a vector in sequence across the page, use the plot command,
with the name of the vector as an argument (in parentheses). If the only argument is
the name of a single vector, the horizontal axis of the plot shows the number of each
successive vector element, while the vertical axis shows the value of each element.
plot (X)
1
1 2 3 4 5 6 7 8 9
(3) One a vector has been defined, it can be operated on by mathematical operators. For
example, to take the vector X and add 5 to every element in it:
X = X + 5
X =
14 13 7 9 13 6 7 13 12
plot (X)
14
13
12
11
10
6
1 2 3 4 5 6 7 8 9
X = X * .5
X =
Columns 1 through 7
Columns 8 through 9
6.5000 6.0000
plot (X)
6.5
5.5
4.5
3.5
3
1 2 3 4 5 6 7 8 9
(4) A vector can also be filled with a progression of values from a starting value to an
ending value. To do so, set the vector name equal to the beginning_value : ending
value.
Z = 1:9
Z =
1 2 3 4 5 6 7 8 9
plot (Z)
9
1
1 2 3 4 5 6 7 8 9
(5) By default, the increment between beginning value an d ending value is 1.
However, this can set to whatever you want by setting the vector equal to
beginning_value : increment: ending_value.
Z = 0:.1:.8
Z =
Columns 1 through 7
Columns 8 through 9
0.7000 0.8000
plot (Z)
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
1 2 3 4 5 6 7 8 9
(6) In the plots we have done so far, the successive points of the vector have been
connected by a line. Sometimes it is useful to see just the successive points themselves,
and not connect them with a line. To do this add an additional argument to the plot
command, which show symbol (in quotes) that you want to see represent each point
(choices are o, +, *, ., x)
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
1 2 3 4 5 6 7 8 9
(7) Another plot option is the give two vectors as arguments to the plot command.
In this case, the x-axis values come from the first vector, while y-axis value come from
the second. The two vectors must each have the same number of elements.
plot(Z,X,'o')
6.5
5.5
4.5
3.5
3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8
IV. Using MATLAB to generate the digital representation of a pure tone.
srate = 10000;
(2) Fill a vector with the time values of the successive samples of a digital signal
beginning at time 0, and going up to a tenth of a second. The increment will be the
sampling period, or the reciprocal of the sampling rate.
t = 0:1/srate:.1;
plot (t,'o')
0.1
0.08
0.06
0.04
0.02
0
0 200 400 600 800 1000 1200
omega = 2*pi*200
omega =
1.2566e+03
(4) For each of the sample times (vector t), calculate the elapsed angle that would be
traversed (theta) by that time (angular velocity times elapsed time).
theta = omega*t;
plot (theta)
140
120
100
80
60
40
20
0
0 200 400 600 800 1000 1200
plot (t,theta)
140
120
100
80
60
40
20
0
0 0.02 0.04 0.06 0.08 0.1
(5) To get the value of a pure tone signal (simple harmonic motion) at each sample
point, take the sine of the elapsed angle:
&
!'%
!'$
!'#
!'"
!!'"
!!'#
!!'$
!!'%
!&
! "!! #!! $!! %!! &!!! &"!!
soundsc (wave,srate)
Playing a mono buffer of length 1001 and sample rate 10000.
plot (t,wave)
!"*
!"(
!"&
!"$
!!"$
!!"&
!!"(
!!"*
!#
! !"!# !"!$ !"!% !"!& !"!' !"!( !"!) !"!* !"!+ !"#
V. Complex Numbers
(1) Define the argument (theta) and magnitude (magnitude) of a complex number.
theta = pi/6
theta =
0.5236
magnitude = 3
magnitude =
(2) Define a complex number (z1) using theta and magnitude. MATLAB returns its
value in rectangular form.
z1 = magnitude*exp(i*theta)
z1 =
2.5981 + 1.5000i
(3) The functions real and imag get the real and imaginary parts of a complex
number.
real(z1)
ans =
2.5981
imag(z1)
ans =
1.5000
(4) We can also get the real (x1) and imaginary (y1) parts trigonometri cally.
x1 = magnitude*cos(theta)
x1 =
2.5981
y1 = magnitude*sin(theta)
y1 =
1.5000
(5) Now define a complex number (z2) by specifying it real and imaginary parts.
x2 = 5
x2 =
y2 = 5
y2 =
z2 = x2+i*y2
z2 =
5.0000 + 5.0000i
(6) MATLAB functions abs and angle get the magnitude and argument (angle) of
z2.
abs (z2)
ans =
7.0711
angle (z2)
ans =
0.7854
sqrt(x2^2 + y2^2)
ans =
7.0711
atan (y2/x2)
ans =
0.7854