Main Content


Differential phase shift keying demodulation



z = dpskdemod(y,M) demodulates the complex envelope, y, of a DPSK-modulated signal having modulation order M.

z = dpskdemod(y,M,phaserot) specifies the phase rotation of the DPSK modulation.

z = dpskdemod(y,M,phaserot,symorder) also specifies the symbol order.


collapse all

Demodulate DPSK data in a communication channel in which a phase shift is introduced.

Generate a 4-ary data vector and modulate it using DPSK.

M = 4;                          % Alphabet size
dataIn = randi([0 M-1],1000,1); % Random message
txSig = dpskmod(dataIn,M);      % Modulate

Apply the random phase shift resulting from the transmission process.

rxSig = txSig*exp(2i*pi*rand());

Demodulate the received signal.

dataOut = dpskdemod(rxSig,M);

The modulator and demodulator have the same initial condition. However, only the received signal experiences a phase shift. As a result, the first demodulated symbol is likely to be in error. Therefore, you should always discard the first symbol when using DPSK.

Find the number of symbol errors.

errs = symerr(dataIn,dataOut)
errs = 1

One symbol is in error. Repeat the error calculation after discarding the first symbol.

errs = symerr(dataIn(2:end),dataIn(2:end))
errs = 0

Input Arguments

collapse all

DPSK-modulated input signal, specified as a real or complex vector or matrix. If y is a matrix, the function processes the columns independently.

Data Types: double
Complex Number Support: Yes

Modulation order, specified as an integer power of two.

Example: 2 | 4 | 16

Data Types: double

Phase rotation of the DPSK modulation, specified in radians as a real scalar. The total phase shift per symbol is the sum of phaserot and the phase generated by the differential modulation.

If you specify phaserot as empty, then dspkdemod uses a phase rotation of 0 degrees.

Example: pi/4

Data Types: double

Symbol order, 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 ordering.

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

Data Types: char

Output Arguments

collapse all

DPSK-demodulated output signal, returned as a vector or matrix having the same number of columns as input signal y.


The differential algorithm used in this function compares two successive elements of a modulated signal. To determine the first element of vector z, or the first row of matrix z, the function uses an initial phase rotation of 0.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced before R2006a