Phase Noise
Apply receiver phase noise to complex baseband signal
Libraries:
Communications Toolbox /
RF Impairments and Components
Description
The Phase Noise block adds phase noise to a complex signal. This block emulates impairments introduced by the local oscillator of a wireless communication transmitter or receiver. The block generates filtered phase noise according to the specified spectral mask and adds it to the input signal. For a description of the phase noise modeling, see Algorithms.
Examples
Phase Noise Effects on 16QAM in Simulink
Add a phase noise vector and frequency offset vector to a 16QAM signal. Display the constellation.
The slex_PhaseNoise16QAM model generates random data, applies 16QAM modulation to the data, and adds phase noise to the signal. The Phase Noise
block specifies a spectral mask with phase noise levels of –40 dBc/Hz at 100 Hz and –70 dBc/Hz at 200 Hz.
The constellation diagram shows a reference 16QAM constellation and the signal samples impaired by phase noise.
View Phase Noise Effects on Signal Spectrum in Simulink
This example shows the effects that spectral and phase noise have on a 100 kHz sine wave.
The slex_phasenoise
model generates a 100 kHz tone by using a Sine Wave block and adds phase noise at these frequencies by using a Phase Noise block.
85
dBc/Hz at a frequency offset of1e3
Hz118
dBc/Hz at a frequency offset of9.5e3
Hz125
dBc/Hz at a frequency offset of19.5e3
Hz145
dBc/Hz at a frequency offset of195e3
Hz
To analyze the spectrum and phase noise, the model includes three Spectrum Analyzer blocks configured for the dBW/Hz
view:
Pure Tone, RBW=1 Hz — 1 Hz resolution bandwidth
Noisy Tone, RBW=1 Hz — 1 Hz resolution bandwidth
Noisy Tone, RBW=10 Hz — 10 Hz resolution bandwidth
The model also includes a subsystem to calculate the RMS phase noise. The subsystem that calculates the RMS phase noise finds the phase error between the pure and noisy sine waves, then calculates the RMS phase noise in degrees. In general, to accurately determine the phase error, the pure signal must be time aligned with the noisy signal. However, the periodicity of the sine wave in this model makes this step unnecessary.
The model displays the signal spectrum and outputs the average of the calculated phase noise. The calculated phase noise achieves the spectrum defined by the Phase Noise block.
When the model runs, it displays the signal spectrum and outputs the average of the calculated phase noise. The calculated phase noise achieves the spectrum defined by the Phase Noise block.
With the resolution bandwidth set to 1 Hz, the dBW/Hz
view for the spectrum analyzer shows the tone at 0 dBW/Hz. With the resolution bandwidth set to 10 Hz, the dBW/Hz
view for the spectrum analyzer shows the tone at 10 dBW/Hz. That same tone energy is now spread across 10 Hz instead of 1 Hz, so the sine wave PSD level reduces by 10 dB. With the resolution bandwidth at 10 Hz, the displayed average of the calculated phase noise still achieves the phase noise defined by the Phase Noise block.
The Spectrum Analyzer block achieves better spectral averaging with the wider resolution bandwidth. For more information, see Windows.
The calculated average phase noise is 0.37 degrees.
To explore further, you can change the Phase noise level (dBc/Hz) parameter in the Phase Noise block, rerun the model, and notice how the spectrum shape changes. With more noise, the side lobes increase in amplitude. As more phase noise is added, the 100 Hz signal becomes less distinct and the measured RMS phase noise increases.
Extended Examples
Impact of RF Effects on Communication System Performance
Model thermal noise, phase noise, and nonlinearity impairments of an RF transceiver in Simulink^{®}.
Ports
Input
In — Input signal
vector  matrix
Input signal, specified as an N_{S}by1 numeric vector or N_{S}byM numeric matrix. N_{S} represents the number of samples and M is the number of channels.
Data Types: double
 single
Complex Number Support: Yes
Output
Out — Output signal
vector  matrix
Output signal, returned as a complexvalued signal with the same data type and size as the input signal.
Parameters
To edit block parameters interactively, use the Property Inspector. From the Simulink Toolstrip, on the Simulation tab, in the Prepare gallery, select Property Inspector.
Phase noise level (dBc/Hz) — Phase noise level
[80 100]
(default)  vector of negative scalars
Phase noise level in decibels relative to carrier per hertz (dBc/Hz), specified as a vector of negative scalars. The Phase noise level (dBc/Hz) and Frequency offset (Hz) parameters must have the same length.
Frequency offset (Hz) — Frequency offset
[2000 20000]
(default)  vector of positive increasing values
Frequency offset in Hz, specified as a vector of positive increasing values. The maximum frequency offset value must be less than F_{S} / 2, where F_{S} represents the Sample rate (Hz) parameter value.
The Phase noise level (dBc/Hz) and Frequency offset (Hz) parameters must have the same length.
Sample rate (Hz) — Sample rate
1e6
(default)  positive scalar
Sample rate in Hz, specified as a positive scalar greater than two times the maximum value specified by the Frequency offset (Hz) parameter.
Initial seed — Initial seed of noise generator
2137
(default)  positive scalar
Initial seed of noise generator, specified as a positive scalar.
This block uses the Random Source block to generate noise. The block generates random numbers using the Ziggurat method (V5 RANDN algorithm). Every time you rerun the simulation, the block reuses the same initial seed. That way, the block outputs the same signal each time you run a simulation.
View Filter Response — Display magnitude response of filter
button
Display magnitude response of filter defined by the block.
Simulate using — Type of simulation to run
Interpreted execution
(default)  Code generation
Type of simulation to run, specified as Interpreted
execution
or Code generation
.
Interpreted execution
— Simulate the model by using the MATLAB^{®} interpreter. This option requires less startup time, but the speed of subsequent simulations is slower than with theCode generation
option. In this mode, you can debug the source code of the block.Code generation
— Simulate the model by using generated C code. The first time you run a simulation, Simulink generates C code for the block. The model reuses the C code for subsequent simulations unless the model changes. This option requires additional startup time, but the speed of the subsequent simulations is faster than with theInterpreted execution
option.
For more information, see Interpreted Execution vs. Code Generation (Simulink).
Block Characteristics
Data Types 

Multidimensional Signals 

VariableSize Signals 

Algorithms
The output signal, y_{k}, is related to input sequence x_{k} by y_{k}=x_{k}e^{jφk}, where φ_{k} is the phase noise. The phase noise is filtered Gaussian noise such that φ_{k}=f(n_{k}), where n_{k} is the noise sequence and f represent a filtering operation.
To model the phase noise, define the power spectrum density (PSD) mask characteristic by specifying scalar or vector values for the frequency offset and phase noise level.
For a scalar frequency offset and phase noise level specification, an IIR digital filter computes the spectrum mask. The spectrum mask has a 1 / f characteristic that passes through the specified point. For more information, see IIR Digital Filter.
For a vector frequency offset and phase noise level specification, an FIR filter computes the spectrum mask. The spectrum mask is interpolated across log10(f). For more information, see FIR Filter.
IIR Digital Filter
For the IIR digital filter, the numerator coefficient is
$$\lambda =\sqrt{2\pi {f}_{offset}{10}^{L/10}}\text{\hspace{0.17em}},$$
where f_{offset} is the frequency offset in Hz and L is the phase noise level in dBc/Hz. The denominator coefficients, γ_{i}, are recursively determined as
$${\gamma}_{i}=\left(i2.5\right)\frac{{\gamma}_{i1}}{i1}\text{\hspace{0.17em}},$$
where γ_{1} = 1, i = {1, 2,...,
N_{t}}, and N_{t} is the number of filter
coefficients. N_{t} is a power of 2 in the range
[2
^{7 },
2
^{19}]. The value of
N_{t} grows as the phase noise offset decreases
towards 0 Hz.
FIR Filter
For the FIR filter, the phase noise level is determined through log10(f) interpolation for frequency offsets over the range [df, f_{s} /
2], where df is the frequency resolution and
f_{s} is the sample rate. The phase noise is flat
over the range [0, df] in Hz, and from the largest frequency offset to f_{s} / 2. The phase noise has 1 / f^{3} characteristic from df to the smallest frequency
offset. The phase noise is linearly interpolated between the smallest and the largest
frequency offset. The frequency resolution is equal to (f_{s} / 2)(1 /
N_{t}), where N_{t} is the number of
coefficients, and is a power of 2 less than or equal to
2
^{16}.
Use a time domain FIR filter if the number of taps,
N_{t}, of the resulting filter is less than
2
^{8}. Use a frequency domain FIR filter if
2
^{8} <=
N_{t} <=
2
^{16}. Use a cascaded system of filters and
synthesizers if N_{t} >
2
^{16}. Divide the [0,
f_{s}/2] frequency range into two equal
halves. Design a filter to shape the phase noise in each sub band. Combine the two sub bands
using a synthesizer that results in the desired phase noise characteristics over the [0,
f_{s}/2] range. Repeat this process for each
sub band until the number of taps of each filter is less than or equal
to2
^{16}.
The single filter, or the cascaded filtersynthesizer system, is primed during initialization to remove filter latency.
References
[1] Kasdin, N. J. "Discrete Simulation of Colored Noise and Stochastic Processes and 1/(f^alpha); Power Law Noise Generation." The Proceedings of the IEEE^{®} 83, no. 5 (May, 1995): 802–27.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using Simulink® Coder™.
Version History
Introduced before R2006aR2024a: Model high frequency phase noise impairment
Use the Phase Noise block to accurately model phase noise at higher frequency signals. Use the View Filter Response button on Phase Noise block mask to verify the accuracy of the realized phase noise.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 United Kingdom (English)