This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.


(Not recommended) Estimate frequency offset for QAM signal

comm.QAMCoarseFrequencyEstimator is not recommended. Use comm.CoarseFrequencyCompensator instead.


The QAMCoarseFrequencyEstimator System object™ estimates frequency offset for a QAM signal.

To estimate frequency offset for a QAM signal:

  1. Define and set up your QAM Coarse Frequency Estimator object. See Construction.

  2. Call step to estimate frequency offset for a QAM signal according to the properties of comm.QAMCoarseFrequencyEstimator. 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.QAMCoarseFrequencyEstimator creates a rectangular QAM coarse frequency offset estimator object, H. This object uses an open-loop, FFT-based technique to estimate the carrier frequency offset in a received rectangular QAM signal.

H = comm.QAMCoarseFrequencyEstimator(Name,Value) creates a rectangular QAM coarse frequency offset estimator object, H, with the specified property Name set to the specified Value. You can specify additional name-value pair arguments in any order as (Name1,Value1,...,NameN,ValueN).



Desired frequency resolution (Hz)

Specify the desired frequency resolution for offset frequency estimation as a positive, real scalar of data type double. This property establishes the FFT length that the object uses to perform spectral analysis. The value for this property must be less than or equal to half the SampleRate property. The default is 0.001.


Sample rate (Hz)

Specify the sample rate in samples per second as a positive, real scalar of data type double. The default is 1.


reset(Not recommended) Reset states of the QAMCoarseFrequencyEstimator object
step(Not recommended) Estimate frequency offset for QAM signal
Common to All System Objects

Allow System object property value changes


expand all

Estimate and correct for a -250 Hz frequency offset in a 16-QAM signal using the QAM Coarse Frequency Estimator System object?.

Create a rectangular QAM modulator System object using name-value pairs to set the modulation order to 16 and the constellation to have an average power of 1 W.

qamModulator = comm.RectangularQAMModulator('ModulationOrder',16, ...
    'NormalizationMethod','Average power', ...

Create a square root raised cosine transmit filter System object.

txfilter = comm.RaisedCosineTransmitFilter;

Create a phase frequency offset object, where the FrequencyOffset property is set to -250 Hz and SampleRate is set to 4000 Hz using name-value pairs.

pfo = comm.PhaseFrequencyOffset(...
    'FrequencyOffset',-250, ...

Create a QAM coarse frequency estimator System object with a sample rate of 4 kHz and a frequency resolution of 1 Hz.

frequencyEst = comm.QAMCoarseFrequencyEstimator(...
    'SampleRate',4000, ...

Create a second phase frequency offset object to correct the offset. Set the FrequencyOffsetSource property to Input port so that the frequency correction estimate is an input argument.

pfoCorrect = comm.PhaseFrequencyOffset(...
    'FrequencyOffsetSource','Input port', ...

Create a spectrum analyzer object to view the frequency response of the signals.

spectrum = dsp.SpectrumAnalyzer('SampleRate',4000);

Generate a 16-QAM signal, filter the signal, apply the frequency offset, and pass the signal through the AWGN channel.

modData = qamModulator(randi([0 15],4096,1));    % Generate QAM signal
txFiltData = txfilter(modData);                  % Apply Tx filter
offsetData = pfo(txFiltData);                    % Apply frequency offset
noisyData = awgn(offsetData,25,'measured');      % Pass through AWGN channel

Plot the frequency response of the noisy, frequency-offset signal using the spectrum analyzer. The signal is shifted 250 Hz to the left.

spectrum.Title = 'Received Signal';

Estimate the frequency offset using frequencyEst. Observe that the estimate is close to the -250 Hz target.

estFreqOffset = frequencyEst(noisyData)
estFreqOffset =


Correct for the frequency offset using pfoCorrect and the inverse of the estimated frequency offset.

compensatedData = pfoCorrect(noisyData,-estFreqOffset);

Plot the frequency response of the compensated signal using the spectrum analyzer. The signal is now properly centered.

spectrum.Title = 'Frequency-Compensated Signal';

Selected Bibliography

[1] Nakagawa, T., Matsui, M., Kobayashi, T., Ishihara, K., Kudo, R., Mizoguchi, M., and Y. Miyamoto. “Non-data-aided wide-range frequency offset estimator for QAM optical coherent receivers”, Optical Fiber Communication Conference and Exposition (OFC/NFOEC), 2011 and the National Fiber Optic Engineers Conference , March, 2011, pp. 1–3.

[2] Wang, Y., Shi. K., and E. Serpedin. “Non-Data-Aided Feedforward Carrier Frequency Offset Estimators for QAM Constellations: A Nonlinear Least-Squares Approach”, EURASIP Journal on Advances in Signal Processing, Vol. 13, 2004, pp. 1993–2001.

Compatibility Considerations

comm.QAMCoarseFrequencyEstimator is not recommended

comm.PSKCoarseFrequencyEstimator is not recommended. Use comm.CoarseFrequencyCompensator instead.

Extended Capabilities

Introduced in R2013b