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:
Define and set up your phase noise object. See Construction.
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.
Note:
Starting in R2016b, instead of using the 
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(
creates
a phase noise object, Name
,Value
)H
, with each specified property
set to the specified value. You can specify additional namevalue
pair arguments in any order as (Name1
,Value1
,...,NameN
,ValueN
).
H = comm.PhaseNoise(LEVEL,OFFSET,
creates
a phase noise object, Name
,Value
)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 

Frequency offset Specify the frequency offset in Hertz as a nonnegative, real
scalar or increasing vector of data type 

Sample rate Specify the sample rate in Hertz as a positive, real scalar
or vector of data type double. The default is 
clone  Create phase noise object with same property values 
getNumInputs  Number of expected inputs to step method 
getNumOutputs  Number of outputs from step method 
isLocked  Locked status for input attributes and nontunable properties 
release  Allow property value and input characteristics changes 
step  Apply phase noise to a complex, baseband signal 
The output of the phase noise object, y_{k}, is related to input sequence x_{k} by $${y}_{k}={x}_{k}{e}^{j{\varphi}_{k}}$$, where ϕ_{k} is the phase noise. The phase noise is filtered Gaussian noise such that $${\varphi}_{k}=f({n}_{k})$$, where n_{k} is the noise sequence and f represents a filtering operation.
If FrequencyOffset
is a scalar, an IIR
digital filter is used in which 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 and i = {1, 2,..., 64}.
If FrequencyOffset
is a vector, an FIR
filter is used. The phase noise level is determined through log_{10} 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 frequency resolution is equal to $$\frac{{f}_{s}}{2}\left(\frac{1}{{N}_{t}}\right)$$, where N_{t} is
the number of taps. The object increases N_{t} until
either the frequency resolution is less than the minimum value of
the FrequencyOffset
vector or a maximum value
of 512 is reached. This value was selected to balance the conflicting
requirements of a small frequency resolution and fast filter performance.
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 output of the object 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.
reset(RandStream.getGlobalStream)
RandStream
.