Lab 1. Overview of Hardware and Software Tools#
Aim of the experiment#
The aim of the experiment is to familiarize you with the following:
STM32H735G Discovery Kit
STM32CubeIDE
MATLAB
Reading assignment#
Digital Signal Processing using Arm Cortex-M based Microcontrollers by Cem Ünsalan, M. Erkin Yücel, H. Deniz Gürhan.
Chapter 1, sections 1-3
Chapter 5, sections 1-5
Chapter 10, sections 1-3
Software Receiver Design by C. Richard Johnson, Jr., William A. Sethares and Andrew Klein
Chapter 1
Course reader
Lecture 0 slides on Introduction
Supplemental reading#
Lab 1 instructions#
Complete the following exercises during your lab section. Include your results in the lab report.
If you are unfamiliar with a particular MATLAB function, type doc <function>
or help <function>
in the MATLAB command window.
DSP in MATLAB#
Since these exercises are intended to teach the basics of MATLAB, some possible solutions are provided.
Create a vector
t
representing the time variable with range of one second and sampling period of of \(T_s = 0.001\) sec. One way to create a vector of evenly spaced numbers in MATLAB is with the:
operator. Alternatively, you can use thelinspace
function.Solution 1:
t = 0:0.001:1;
Solution 2:
t = linspace(0,1,1001);
Create a plot that approximates the continuous time signal \(x(t)=sin(2 \pi t)\) for \(0 \leq t \leq 1\), using the
plot
function.Solution 1:
xt = sin(2*pi*t); plot(t,xt);
Explanation: Many MATLAB functions that operate on scalars (including
sin
) are automatically ‘mapped’ to arrays. Sincet
is an vector, the expressionsin(2*pi*t)
applies the scalar function \(x(t) = sin( 2\pi t)\) to each element oft
.Solution 2:
x = @(t) sin(2*pi*t); plot(t,x(t));
Explanation: The line
x = @(t) sin(2*pi*t)
defines a new functionx
. This line can be read as ‘x
is a function oft
that returnssin(2*pi*t)
’. Defining a function is useful to simplify sequences of operations. For example, if we wanted to shift \(x(t)\) in time by five seconds, we could use the expressionx(t-5)
.Label the plot using the
xlabel
,ylabel
, andtitle
functions.Solution:
xlabel('Time [seconds]'); ylabel('Signal Amplitude x(t)'); title('x(t)=sin(t)');
Obtain the value of the signal at time t = 0.32 seconds.
Solution 1:
[~, ind] = min(abs(t-0.32)); xt(ind)
Explanation: The expression
abs(t-0.32)
measures the distance of each element int
to the desired value of 0.32. Combining this expression with themin
function allows us to find the element of t which is closest to 0.32. Themin
function returns two values: the value of the minimum (which we discard by assigning the special name~
) and the indexind
which tells us the position in the array that is closest to 0.32.Solution 2:
ind = 1 + 0.32/0.001 xt(ind)
Explanation: Since
t
is sampled every 0.001 seconds, we can directly calculate the index corresponding to \(t=0.32\) as long as we consider that array indexing in MATLAB is one-based.Sample the signal at every 0.008-sec.
Solution 1:
xn = xt(1:8:end);
Solution 2:
xn = downsample(xt,8);
Warning: the ‘downsample’ function requires the signal processing toolbox.
Overlay the sampled signal on your continuous plot using the
stem
functionSolution:
tn = t(1:8:end); hold all; stem(tn,xn);
Include the code for steps 1-6 in your lab report along with the figure you generated.
Using the STM32H735G discovery kit and starter code#
In order for you to get started programming the board, we have created a sample project which passes a signal from the input jack to the output jack (this is known as a talkthrough.) Additionally, the spectrum of the input signal is visualized on the LCD.
Follow the instructions in the setup guide to import the starter code and program the board..
Connect the blue input jack on the board to the signal generator set to a 10kHz sine wave.
Connect the green output jack on the board to the oscilloscope.
Configure the oscilloscope and verify the that the signal appears as expected.
Locate the
process_left_sample
function inlab.c
. Change the behavior from a talkthrough \(f(x[n]) = x[n]\) to a squaring function \(f(x[n]) = {(x[n])}^2\) by modifying the lineoutput_sample = input_sample;
Rerun the program and observe the result on the oscilloscope.At the end of the
process_left_sample
function inlab.c
, locate the linereturn output_sample;
. Put a breakpoint at this line.Allow the program to continue until it stops at the breakpoint. Add a watch expression for the variable
elapsed_cycles
and record the value. Include this measurement in your lab report.
Lab report contents#
Be sure to include everything listed in this section when you submit your lab report.
I. Results from lab exercise#
DSP in MATLAB
Using the STM32H735G discovery Kit and starter code
II. Assignment questions#
What is aliasing? How do you manage aliasing in DSP applications?
Draw a block diagram of a generic DSP system and a talk-through system.
How are 32-bit floating-point results saved on the ARM Cortex-M7 processor? Explain briefly the IEEE single-precision floating-point format.
Give an example (such as one or more lines of C code) that would result in the processor using IEEE single-precision floating point for an operation.
How can you estimate the number of clock cycles required to execute a section of code on the STM32 board?