Accelerating the pace of engineering and science

# comm.CPFSKDemodulator System object

Package: comm

Demodulate using CPFSK method and Viterbi algorithm

## Description

The CPFSKDemodulator object demodulates a signal that was modulated using the continuous phase frequency shift keying method. The input is a baseband representation of the modulated signal.

To demodulate a signal that was modulated using the continuous phase frequency shift keying method:

1. Define and set up your CPFSK demodulator object. See Construction .

2. Call step to demodulate the signal according to the properties of comm.CPFSKDemodulator. The behavior of step is specific to each object in the toolbox.

## Construction

H = comm.CPFSKDemodulator creates a demodulator System object™, H. This object demodulates the input continuous phase frequency shift keying (CPFSK) modulated data using the Viterbi algorithm.

H = comm.CPFSKDemodulator(Name,Value) creates a CPFSK demodulator object, H, with each specified property set to the specified value. You can specify additional name-value pair arguments in any order as (Name1,Value1,...,NameN,ValueN).

H = comm.CPFSKDemodulator(M,Name,Value) creates a CPFSK demodulator object, H. This object has the ModulationOrder property set to M, and the other specified properties set to the specified values.

## Properties

 ModulationOrder Size of symbol alphabet Specify the size of the symbol alphabet. The value of this property requires a power of two, real, integer scalar. The default is 4. BitOutput Output data as bits Specify whether the output consists of groups of bits or integer values. The default is false. When you set this property to false, the step method outputs a column vector of length equal to N/SamplesPerSymbol and with elements that are integers between –(ModulationOrder–1) and ModulationOrder–1. In this case, N, is the length of the input signal, which indicates the number of input baseband modulated symbols. When you set this property to true, the step method outputs a binary column vector of length equal to P$×$(N/SamplesPerSymbol), where P = log2(ModulationOrder). The output contains length-P bit words. In this scenario, the object first maps each demodulated symbol to an odd integer value, K, between –(ModulationOrder-1) and ModulationOrder–1. The object then maps K to the nonnegative integer (K+ModulationOrder–1)/2. Finally, the object maps each nonnegative integer to a length-P binary word, using the mapping specified in the SymbolMapping property. SymbolMapping Symbol encoding Specify the mapping of the modulated symbols as one of Binary | Gray. The default is Binary. This property determines how the object maps each demodulated integer symbol value (in the range 0 and ModulationOrder–1) to a P-length bit word, where P = ModulationOrder(ModulationOrder). When you set this property to Binary, the object uses a natural binary-coded ordering. When you set this property to Gray, the object uses a Gray-coded ordering. This property applies when you set the BitOutput property to true. ModulationIndex Modulation index Specify the modulation index. The default is 0.5. The value of this property can be a scalar, h, or a column vector, [h0, h1, …. hH-1] where H-1 represents the length of the column vector. When hi varies from interval to interval, the object operates in multi-h. When the object operates in multi-h, hi must be a rational number. InitialPhaseOffset Initial phase offset Specify the initial phase offset of the input modulated waveform in radians as a real, numeric scalar. The default is 0. SamplesPerSymbol Number of samples per input symbol Specify the expected number of samples per input symbol as a positive, integer scalar. The default is 8. TracebackDepth Traceback depth for Viterbi algorithm Specify the number of trellis branches that the Viterbi algorithm uses to construct each traceback path as a positive, integer scalar. The default is 16. The value of this property is also the value of the output delay. That value is the number of zero symbols that precede the first meaningful demodulated symbol in the output. OutputDataType Data type of output Specify the output data type as one of int8 | int16 | int32 | double, when you set the BitOutput property to false. The default is double. When you set the BitOutput property to true, specify the output data type as one of logical | double.

## Methods

 clone Create CPFSK demodulator object with same property values getNumInputs Number of expected inputs to step method getNumOutputs Number of outputs from step method isLocked Locked status for input attributes and nontunable properties release Allow property value and input characteristics changes reset Reset states of CPFSK demodulator object step Demodulate using CPFSK method and Viterbi algorithm

## Examples

expand all

### Demodulate a signal using CPFSK modulation with Gray mapping

% Create a CPFSK modulator, an AWGN channel, and a CPFSK demodulator
hMod = comm.CPFSKModulator(8, 'BitInput', true, ...
'SymbolMapping', 'Gray');
hAWGN = comm.AWGNChannel('NoiseMethod', ...
'Signal to noise ratio (SNR)','SNR',0);
hDemod = comm.CPFSKDemodulator(8, 'BitOutput', true, ...
'SymbolMapping', 'Gray');

% Create an error rate calculator, account for the delay caused by the Viterbi algorithm.
delay = log2(hDemod.ModulationOrder)*hDemod.TracebackDepth;
for counter = 1:100
% Transmit 100 3-bit words
data = randi([0 1],300,1);
modSignal = step(hMod, data);
noisySignal = step(hAWGN, modSignal);
end

fprintf('Error rate = %f\nNumber of errors = %d\n', ...
errorStats(1), errorStats(2))
Error rate = 0.004006
Number of errors = 120

## Algorithms

This object implements the algorithm, inputs, and outputs described on the CPFSK Demodulator Baseband block reference page. The object properties correspond to the block parameters.