# dpskdemod

Differential phase shift keying demodulation

## Syntax

``z = dpskdemod(y,M)``
``z = dpskdemod(y,M,phaserot)``
``z = dpskdemod(y,M,phaserot,symorder)``

## Description

example

````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.```

## Examples

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());`

`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 natural 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`.

Note

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`.

## Version History

Introduced before R2006a