Main Content


Pulse amplitude modulation (PAM)


y = pammod(x,M) returns the complex envelope of the modulation of the input message signal, x, using PAM and the alphabet size, M.


y = pammod(x,M,initphase) specifies the initial phase of the modulated signal.


y = pammod(x,M,initphase,symorder) specifies binary-coded or Gray-coded mapping order for the modulation symbols.


collapse all

Generate random data symbols and apply pulse amplitude modulation.

Set the modulation order.

M = 8;

Generate random integers and apply PAM modulation having an initial phase of π/4.

data = randi([0 M-1],100,1);
modData = pammod(data,M,pi/4);

Display the PAM constellation diagram.


Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

Plot PAM symbol mapping for Gray-coded and binary-coded data.

Set the modulation order, and then create a data sequence containing a complete set of constellation points.

M = 8;
data = 0:M-1;

Modulate and demodulate Gray and natural binary encoded data.

symgray = pammod(data,M,0,'gray');
mapgray = pamdemod(symgray,M,0,'gray');

symbin = pammod(data,M,0,'bin');
mapbin = pamdemod(symbin,M,0,'bin');

Plot the constellation points using one of the symbol sets. For each constellation point, assign a label indicating the Gray-coded and binary-coded values for each symbol.

  • For Gray-code symbol mapping, adjacent constellation points differ by a single bit and are not numerically sequential.

  • For binary-coded mapping, adjacent constellation points follow the binary encoding and are sequential.

for k = 1:M
        dec2base(mapbin(k),2,4),'Color',[1 0 0]);
        num2str(mapbin(k)),'Color',[1 0 0]);
axis([-M M -2 2])

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains 33 objects of type line, text. One or more of the lines displays its values using only markers This object represents Channel 1.

Input Arguments

collapse all

Input signal, specified as a vector or matrix of integers in the range of [0, M – 1].

Example: randi([0 3],100,1)

Data Types: double

Modulation order, specified as a power of two.

Example: 4

Data Types: double

Initial phase of the modulated signal (in radians), specified as a real scalar.

Example: pi/4

Data Types: double

Mapping order for the modulation symbols, specified as 'bin' or 'gray'. This argument specifies how the function assigns binary vectors to corresponding integers.

  • If symorder is 'bin', the function uses a binary-coded mapping order.

  • If symorder is 'gray', the function uses a Gray-coded mapping order.

Data Types: char | string

Output Arguments

collapse all

Complex baseband representation of a PAM-modulated signal, returned as vector or matrix of complex values. The modulated signal has a minimum Euclidean distance of 2. The columns of y represent independent channels.

Data Types: double | single
Complex Number Support: Yes

Extended Capabilities

Version History

Introduced before R2006a