Main Content


Recover symbol timing phase using fourth-order nonlinearity method


The GMSKTimingSynchronizer object recovers the symbol timing phase of the input signal using a fourth-order nonlinearity method. This block implements a general non-data-aided feedback method. This timing synchronization is a non-data-aided feedback method that is independent of carrier phase recovery, but requires prior compensation for the carrier frequency offset. You can use this block for systems that use Gaussian minimum shift keying (GMSK) modulation.

To recover the symbol timing phase of the input signal:

  1. Define and set up your GMSK timing synchronizer object. See Construction.

  2. Call step to recover the symbol timing phase of the input signal according to the properties of comm.GMSKTimingSynchronizer. The behavior of step is specific to each object in the toolbox.


Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.


H = comm.GMSKTimingSynchronizer creates a timing phase synchronizer System object, H. This object recovers the symbol timing phase of the GMSK input signal using a fourth-order nonlinearity method.

H = comm.GMSKTimingSynchronizer(Name,Value) creates a GMSK timing synchronizer 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).



Number of samples representing each symbol

Specify the number of samples that represent each symbol in the input signal as an integer-valued scalar value greater than 1. The default is 4.


Error update step size

Specify the step size for updating successive timing phase estimates as a positive real scalar value. Typically, this number is less than 1/SamplesPerSymbol, which corresponds to a slowly varying timing phase. The default is 0.05. This property is tunable.


Enable synchronization reset input

Set this property to true to enable resetting the timing phase recovery process based on an input argument value. The default is false.

When you set this property to true, you must specify a reset input value to the step method.

When you specify a nonzero value as the reset input, the object restarts the timing phase recovery process. When you set this property to false, the object does not restart.


Condition for timing phase recovery reset

Specify the conditions to reset the timing phase recovery process as one of Never | Every frame. The default is Never.

When you set this property to Never, the phase recovery process never restarts. The object operates continuously, retaining information from one symbol to the next.

When you set this property to Every frame, the timing phase recovery restarts at the start of each frame of data. In this case, the restart occurs at each step method call. This property applies when you set the ResetInputPort property to false.


stepRecover symbol timing phase using fourth-order nonlinearity method
Common to All System Objects

Allow System object property value changes


Reset internal states of System object


collapse all

Create GMSK modulator, variable fractional delay, and GMSK timing synchronizer System objects.

gmskMod = comm.GMSKModulator('BitInput', true, ...
    'SamplesPerSymbol', 14);
timingOffset = 0.2;
varDelay = dsp.VariableFractionalDelay;
gmskTimingSync = comm.GMSKTimingSynchronizer('SamplesPerSymbol', 14, ...
    'ErrorUpdateGain', 0.05);

Main processing loop:

phEst = zeros(50,1);
for i = 1:50
    data = randi([0 1],100,1); % Generate data
    modData = gmskMod(data);   % Modulate data
    % Apply timing offset error
    impairedData = varDelay(modData,timingOffset*14);
    % Perform timing phase recovery
    [~,phase] = gmskTimingSync(impairedData);
    phEst(i) = phase(1)/14;

Plot the results.

plot(1:50,[0.2*ones(50,1) phEst])
legend( 'Original','Estimated')
title('Original and Estimated timing phases')


This object implements the algorithm, inputs, and outputs described on the MSK-Type Signal Timing Recovery block reference page. The object properties correspond to the block parameters, except:

Extended Capabilities

Version History

Introduced in R2012a