comm.PhaseNoise System object

Package: comm

Apply phase noise to complex, baseband signal


The PhaseNoise object applies phase noise to a complex, baseband signal. This phase noise has a 1/f spectral characteristic over its entire frequency range.

To apply phase noise to a complex, baseband signal:

  1. Define and set up your phase noise object. See Construction.

  2. Call step to apply phase noise to a complex, baseband signal according to the properties of comm.PhaseNoise. The behavior of step is specific to each object in the toolbox.


H = comm.PhaseNoise creates a phase noise System object™, H. This object applies phase noise with the specified level at the specified frequency offset to a complex, baseband input signal.

H = comm.PhaseNoise(Name,Value) creates a phase noise 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.PhaseNoise(LEVEL,OFFSET,Name,Value) creates a phase noise object, H. This object has the Level property set to LEVEL, the FrequencyOffset property set to OFFSET and the other specified properties set to the specified values.



Phase noise level

Specify the phase noise level in decibels relative to carrier per Hertz (dBc/Hz) at a frequency offset specified by the FrequencyOffset property. The default is [-60 -80]. This property requires a negative, real scalar or vector of data type double.


Frequency offset

Specify the frequency offset in Hertz as a nonnegative, real scalar or increasing vector of data type double. The default is [20 200].


Sample rate

Specify the sample rate in Hertz as a positive, real scalar or vector of data type double. The default is 1024. The System object does not use this property when you specify Level and FrequencyOffset as scalars.


cloneCreate phase noise object with same property values
getNumInputsNumber of expected inputs to step method
getNumOutputsNumber of outputs from step method
isLockedLocked status for input attributes and nontunable properties
releaseAllow property value and input characteristics changes
stepApply phase noise to a complex, baseband signal


expand all

Phase Noise Effects on 16-QAM

Add a phase noise vector and frequency offset vector to a 16-QAM signal. Then, plot the signal.

Create 16-QAM modulator having an average constellation power of 10 W.

mod = comm.RectangularQAMModulator(16, ...
    'NormalizationMethod','Average power', 'AveragePower',10);

Create a phase noise object.

pnoise = comm.PhaseNoise('Level',-50,'FrequencyOffset',20);

Generate modulated symbols.

data = randi([0 15],1000,1);
modData = step(mod,data);

Apply phase noise and plot the result.

y = step(pnoise,modData);

Phase Noise Effects on Signal Spectrum

Create a sine wave generator having a carrier frequency of 100 Hz, a sample rate of 1000 Hz, and a frame size of 10,000 samples.

sinewave = dsp.SineWave('Frequency',100,'SampleRate',1000, ...

Create a phase noise object. Specify the phase noise level to be -40 dBc/Hz for a 100 Hz offset and -70 dBc/Hz for a 200 Hz offset.

pnoise = comm.PhaseNoise('Level',[-40 -70],'FrequencyOffset',[100 200], ...

Create a spectrum analyzer.

sa = dsp.SpectrumAnalyzer('SampleRate',1000,'SpectralAverages',10,'PowerUnits','dBW');

Generate a sine wave. Add phase noise to the sine wave. Plot the spectrum of the noisy signal.

x = step(sinewave);
y = step(pnoise,x);


The phase noise is -40 dBW within ±100 Hz of the carrier. The phase noise is -70 dB below the carrier for offsets greater than 200 Hz.


This object implements the algorithm, inputs, and outputs described on the Phase Noise block reference page. The object properties correspond to the block parameters, except:

  • The object respects the data types and does perform any casting other than casting the output to the input data type. The result of exp(1i×phase_noise) is cast to the input data type first, before multiplying with the input signal. This order prevents the output (phase distorted) signal from being downcast to single precision if any of the properties are of data type single while the input data type is double precision.

  • This object uses the MATLAB® default random stream to generate random numbers. The block uses a random number generator based on the V5 RANDN (Ziggurat) algorithm. In addition, the block uses an initial seed, set with the Initial seed parameter to initialize the random number generator. Every time the system that contains the block runs, the block generates the same sequence of random numbers. To generate reproducible numbers using this object, reset the MATLAB default random stream using the following code.

    For more information, see help for RandStream.

Introduced in R2012a

Was this topic helpful?