Main Content

comm.MSKTimingSynchronizer

Recover symbol timing phase using fourth-order nonlinearity method

Description

The comm.MSKTimingSynchronizer System object™ recovers the symbol timing phase of a minimum shift keying (MSK) modulated signal using a fourth-order nonlinearity method. This object implements a general non-data-aided feedback method that is independent of carrier phase recovery but requires precompensation for the carrier frequency offset.

To recover the symbol timing phase of an MSK modulated signal:

  1. Create the comm.MSKTimingSynchronizer object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?

Creation

Description

mskTimingSync = comm.MSKTimingSynchronizer creates a timing phase synchronizer System object, mskTimingSync. This object recovers the symbol timing phase of an MSK modulated signal using a fourth-order nonlinearity method.

mskTimingSync = comm.MSKTimingSynchronizer(Name=Value) sets properties using one or more optional name-value arguments. For example, comm.MSKTimingSynchronizer(ErrorUpdateGain=0.045) sets the error update step size to 0.045.

example

Properties

expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Number of samples per symbol, specified as an integer in the range [2, ∞).

Data Types: double

Error update step size, specified as a positive scalar. Typically, this number is less than 1/SamplesPerSymbol, which corresponds to a slowly varying timing phase.

Tunable: Yes

Data Types: double

Synchronization reset input, specified as a logical 0 (false) or 1 (true).

  • When you set the ResetInputPort property to true or 1, the timing phase synchronizer enables the resetting of the timing phase recovery process based on an input argument value.

  • When you set the ResetInputPort property to false or 0, the timing phase synchronizer disables the restarting of the timing phase recovery process.

Data Types: logical

Condition for resetting the timing phase recovery reset, specified as one of these options:

  • "Never" — Never restart the phase recovery process. The object operates continuously, retaining information from one symbol to the next.

  • "Every frame" — Restart the timing phase recovery at the start of each frame of data.

Dependencies

To enable this property, set the ResetInputPort property to false.

Usage

Description

[Y,phase] = mskTimingSync(X) recovers the timing phase and returns the time-synchronized signal, Y, and the estimated timing phase, phase, for the input signal, X.

example

[Y,phase] = mskTimingSync(X,R) restarts the timing phase recovery process when you input a nonzero reset signal, R. To enable this syntax, set the ResetInputPort property to true.

Input Arguments

expand all

Input signal, specified as a complex column vector.

Data Types: single | double
Complex Number Support: Yes

Reset signal, specified as a nonzero number.

Data Types: logical | double

Output Arguments

expand all

Time-synchronized signal, returned as a complex column vector. Y has the same data type as the input argument X.

Complex Number Support: Yes

Estimated timing phase, returned as a column vector of nonnegative numbers.

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:

release(obj)

expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Examples

collapse all

Create an MSK modulator with the bit input set to true and the number of samples per symbol set to 14.

mskMod = comm.MSKModulator(BitInput=true,SamplesPerSymbol=14);

Define the timing offset value.

timingOffset = 0.2;

Create a variable fractional delay System object.

varDelay = dsp.VariableFractionalDelay;

Create an MSK timing synchronizer System object with the number of samples per symbol set to 14 and the error update gain set to 0.045.

mskTimingSync = comm.MSKTimingSynchronizer(SamplesPerSymbol=14,ErrorUpdateGain=0.045);

Run a loop to process frames of data by following these steps.

  1. Generate a random binary data vector.

  2. Modulate the binary data using MSK modulation.

  3. Apply a timing offset error to the modulated data.

  4. Perform timing phase recovery on the impaired signal.

  5. Store the first phase estimate normalized by the number of samples per symbol.

phEst = zeros(50,1);
for i = 1:50
    data = randi([0 1],100,1);
    modData = mskMod(data);
    impairedData = varDelay(modData,timingOffset*14);
    [~,phase] = mskTimingSync(impairedData);
    phEst(i) = phase(1)/14;
end

Plot the original and estimated timing phase results.

plot(1:50,[0.2*ones(50,1) phEst]);
legend( "Original","Estimated")
title('Original and Estimated Timing Phases');

Figure contains an axes object. The axes object with title Original and Estimated Timing Phases contains 2 objects of type line. These objects represent Original, Estimated.

Algorithms

The timing extraction algorithm consists of these steps:

  1. Pass the sampled baseband signal through a fourth-order nonlinearity to extract timing information.

  2. Differentiate the signal digitally following the nonlinearity.

  3. Smooth the output of the digital differentiator to yield an error signal.

  4. Use the error signal to adjust the sampling of the baseband signal.

More specifically, the algorithm employs a timing error detector that outputs a timing error value, e(k), for the kth symbol, as defined in as defined in Synchronization Techniques for Digital Receivers by Mengali, Umberto and Aldo N. D’Andrea (New York: Plenum Press, 1997) by this expression.

e(k)=(1)D+1Re{r2(kTTs+dk1)r*2((k1)TTs+dk2)}(1)D+1Re{r2(kT+Ts+dk1)r*2((k1)T+Ts+dk1)}

where

  • r is the input signal

  • T is the symbol period

  • Ts is the sampling period

  • * means complex conjugate

  • dk is the phase estimate for the kth symbol

  • D is 1 for MSK and 2 for Gaussian MSK modulation

References

[1] Mengali, Umberto and Aldo N. D’Andrea. Synchronization Techniques for Digital Receivers. New York: Plenum Press, 1997.

Extended Capabilities

Version History

Introduced in R2012a