|
Implementation
of
Pulse
Amplitude Modulation on PulseBlasterDDS and RadioProcessor Boards
Introduction:
Pulse modulation
methods
are used to transfer a
narrowband analog
signal, such as a phone call, over a pulse
stream. Some schemes use a
digital signal for transmission, making them
essentially an
analog-to-digital conversion.
Three main
variants of Pulse
Modulation are:
1. Pulse-amplitude modulation
(PAM).
2. Pulse-width modulation (PWM).
3. Pulse-position modulation (PPM).
Pulse Amplitude
Modulation
(PAM) is the simplest of all Pulse
Modulation Techniques. In PAM, the amplitude
of the message or
modulating signal is mapped to a series of
pulses, with two possible
variant detailed below:
Flat Top PAM:
The amplitude of
each pulse
is directly proportional to
the instantaneous
modulating signal amplitude at the time of
pulse occurrence and then
keeps
the same amplitude of the pulse for the rest
of the half cycle.
Natural PAM:
The amplitude of
each pulse
is directly proportional to
the instantaneous
modulating signal amplitude at the time of
pulse occurrence and then
follows
the amplitude of the modulating signal for the
rest of the
half cycle.
PAM has
applications in
ethernet communication and in LED drivers,
among others.
Natural PAM
implementation
on SpinCore PulseBlaster DDS
Boards.
For generation of
a PAM
waveform on PBDDS Board,
the carrier waveform
is generated using the NCO. The AWG is used to
generate a waveform to
modulate the carrier signal.
The generation of
the
modulating waveform in C code is
shown
below:
void
shape_make_sin(float *shape_data)
{
int i;
for(i=0; i < 1024; i++)
{
shape_data[i]
=(sin(2.0*pi*((float)i/1024.0)));
}
}
The carrier
waveform is a
series of square pulses with
amplitude of 1V.
It can be
generated in the C
code as follows:
void
shape_make_carrier(float
*dds_data)
{
int
i,j;
for
(i=0;i<samples;i++)
{
if
(i<(samples/2))
dds_data[i]
=
1.0;
else
dds_data[i]
=0.0;
}
}
Both the above generated signals are loaded
into the board
by using the SpinAPI function as given below:
pb_dds_load
(shape_data,
DEVICE_SHAPE);
pb_dds_load
(dds_data,
DEVICE_DDS);
The
complete
C
code
demonstrating
this
implementation is
available for direct download.
In the source code, the message signal
defaults to being a sine wave.
However, any waveform can be used for the
message signal, as shown
below.
Note: Tm=1/Fm can not be less than (9 * clock
period) for
the board to function properly (Tm =
modulating signal time
period).
Example of PAM output generated on a SpinCore
PulseBlasterDDS board are
shown in the figures below.
Figure
1
shows
a
PAM
waveform
generated
using
the
example
source code on a
PulseBlasterDDS board.
Channel
1
shows
the
output
PAM
wave
for
carrier
frequency
Fc = 1 MHz and
modulating signal frequency Fm = 100
kHz. The modulating signal used is
a sine wave.
Channel
2
shows
the
TTL
output
with
frequency
=
Fm/2.
Each
cycle
of
the
TTL
output
corresponds
to
the
time
taken
to execute the two SpinAPI
functions given
below:
pb_inst_radio_shape(0,0,0,0,
TX_ENABLE,
NO_PHASE_RESET, NO_TRIGGER,
USE_SHAPE, 0, 0x0F,CONTINUE, 0,
tm*us);
pb_inst_radio_shape(0,0,0,0,
TX_ENABLE,
NO_PHASE_RESET,
NO_TRIGGER,
USE_SHAPE,
0,
0x00,BRANCH,
start,
(tm)*us);
The
execution of these instructions
results in the generation of two
full cycles of the PAM signal.
Also
note
that
Channel
1
output
is
delayed
by
(9
* clock cycle) time period.
|
Figure
2
shows
output
PAM
waveform
generated
using
the
example
source code
but with different parameters.
In this example, the carrier frequency
is set to Fc = 1 MHz and the
modulating frequency is set to Fm =
200 kHz.
|
Figure
3
shows
output
PAM
waveform
generated
using
the
same
example code but
this time with modulating frequency of
Fm = 10 kHz. The carrier
frequency remains unchanged.
|
Figure 4 shows the output PAM waveform
generated using the example
source code, but
this time the modulating signal used
is a ramp waveform instead of a
sine signal. The modulating
frequency is set to Fm = 100 kHz and
the carrier frequency remains Fc = 1
MHz.
|
These are only
the basics
of what can be done using SpinCore's
PulseBlasterDDS and RadioProcessor boards.
Please see the example code
in SpinAPI and the product manuals for more
details.
|