ObjectiveThe goal of this exercise is to correctly demodulate the noisy
received signal in RxBinaryPAM.mat.

Signal Model
The transmitted data points are taken from the signal space
constellation below. Notice the relationship between bits (0, 1)
and symbols (-A, +A).

After being corrupted by noise, the received signal is demodulated by
the system below, which detects the transmitted signal space points and
outputs the estimated values. There are two sample rates in the
system below. The
higher sampling rate is 1/T = 16 samples per symbol (indexed by n). The lower sampling rate is 1/Ts =
1 sample per symbol (indexed by k).

Design Exercise

Part I: Binary PAM Modulator
Using blocks from the SIMULINK Block Library, the Signal Processing
Blockset, and the Communications Blockset, design a modulator (below)
for the system model above. Use the modulator to send the
sequence 1 -1 -1 1.

The modulator is composed of four blocks. The first block can be
found at

DSP
Blockset --> DSP Sources --> Signal From Workspace

Drag this block to your project window. Double-click on the
Signal From Workspace block and set the block parameters as shown in
the picture below.

The first parameter is a column vector containing the data to be
modulated. The second parameter specifies the sample time (not rate), which is 16 at
this point in the system. We leave the third parameter
alone. The last option (in the drop-down list) indicates what we
want to happen when the data runs out but the simulation is still
running. We don't care about this since we will set the
simulation time to match the length of the data.

The second block can be found at

DSP
Blockset --> Signal Operations --> Upsample

Drag this
block to your
project window. Double-click on the Upsample block and
set the block parameters as shown in the picture below.d

The first parameter is the upsample factor, which is the number of
samples per symbol. The second parameter is an offset which we do
not need to use (at least in the modulator). Leave it set to the
default of zero.

The third block can be found at
Simulink --> Discrete --> Discrete Filter

Drag this
block to your
project window. Double-click on the Upsample block and
set the block parameters as shown in the picture below.

e

This block serves as the pulse shaping filter in the modulator.
We want an FIR filter, so we set the numerator to the value of the
filter coefficients, and we set the denominator to the trivial vector
of[1]. For the filter coefficents, you can either
1) type sqrt(1/16)*ones(1,16)
into the Numerator coefficient box itself, or
2) type v=sqrt(1/16)*ones(1,16)
at the Matlab prompt (this
makes the images look a little better).
You will recognize this pulse as the NRZ shape sampled at 16 sample per
symbol. The third parameter is the sample time, which is 1 at
this point in the system.

Now, test your modulator by connecting the output to the Scope block
(this can be found at Simulink --> Sinks). In your project
window, go to the menu Simulation --> Configuration Parameters and
set the parameters to:

Note: We have to run the
simulation for 5x16 samples instead of 4x16 samples since the upsample
block inserts a 16 sample delay. After you go to Simulation
--> Run, the output of the scope (double-click the scope) should
look like this:

Part II: Binary PAM Detector
Design and build a system in SIMULINK that is based on the block
diagram of the binary PAM detector shown at the top of this
exercise. The SIMULINK experience you have just gained should
prove helpful in this effort.

You can test your detector by connecting its input to the output of
your modulator. Connect the output of your detector to a To
Workspace block (this can be found at Simulink --> Sinks, open the
Properties and set the Save format to matrix, or array). After
running the simulation, a plot of the matched filter output should look
like this:

You can see with this test input signal (based on the data 1 -1 -1 1), the first valid
bit decision occurs at sample 32. The others occur at samples 48,
64, and 80. In the Matlab workspace (the Matlab prompt) you will
likely find 6 bit decisions instead of 4. This is because the
Downsample block outputs a value at sample 0 and sample 16. These
two extra values can be ignored.

It is important that your Downsample block is sampling at the correct
"phase". This will require some adjustment/experimentation on
your part. You want to sample the matched filter output when the
value is exactly +1.0 or -1.0 (think of the eye diagram). You may
need to run the simulation to a stop time of 6*16.0, depending on the
sampling offset you use. When you have successfully debugged your
system, you are ready for the final part of the exercise.

Part III: Detecting an Unknown Data SetHere are the steps for the final
part of the exercise:

Replace the modulator blocks with the From File
block (found at Simulink --> Sources) and set the filename to RxBinaryPAM.mat

The last 70 values of
the detector output (you will have to convert +/-1s to 1s and 0s)
represent 10 ASCII characters, with 7 bits per character.
Determine the message using your own conversion script or an ASCII
table, such as the one found here.