# Ring Oscillator VCO

**Libraries:**

Mixed-Signal Blockset /
PLL /
Building Blocks

## Description

The Ring Oscillator VCO block models the output signal, frequency control, period jitter, and flicker noise of a VCO (voltage controlled oscillator) such as a bias controlled ring oscillator circuit. This block generates the phase noise using a mathematical description of the phase noise of ring oscillators. This allows faster computation of simulation results during both startup and the subsequent simulations. You can also control the phase noise profile by selecting the Gaussian noise level, corner frequency, and flicker exponent. The phase noise spectrum is limited to the spectra that can be produced by the physical model of a ring oscillator.

You can choose the coefficients for the mathematical description of the phase noise. You can provide a specific phase noise spectral density from a data sheet and compare that to the phase noise spectral density that the mathematical coefficients produce. You can then adjust the coefficients to fit the specified phase noise in a way that makes the most sense physically.

**Note**

If the flicker noise corner frequency is set to zero, the Ring Oscillator VCO block can also be used to model a tank-tuned VCO.

## Ports

### Input

**vctrl** — Voltage used to control VCO output frequency

scalar | vector

VCO control voltage used to control the output frequency of the ring oscillator
VCO. In a phase-locked loop (PLL) system, **vctrl** is the output of
the Loop Filter
that contains the phase error information.

**Data Types: **`double`

### Output

**vco out** — Output signal determined by `vctrl`

port

scalar

Output signal of the ring oscillator VCO. In a PLL system, **vco
out** is the output clock generated by the PLL. It is also fed back to the
PFD block
through a clock divider to complete the control loop.

**Data Types: **`double`

## Parameters

### Parameters

**Specify using** — Define how VCO output frequency is specified

`Voltage sensitivity`

(default) | `Output frequency vs. control voltage`

Define how the VCO output frequency is specified:

Select

`Voltage sensitivity`

to specify output frequency from the**Voltage sensitivity (Hz/V)**and**Free running frequency (Hz)**parameters.Select

`Output frequency vs. control voltage`

to interpolate output frequency from the**Control voltage (V)**vector versus**Output frequency (Hz)**vector.

#### Programmatic Use

Block parameter:
`SpecifyUsing` |

Type: character vector |

Values:
`Voltage sensitivity` | ```
Output frequency vs.
control voltage
``` |

Default:
`Voltage sensitivity` |

**Voltage sensitivity (Hz/V)** — Measure of change in output frequency of VCO

`100e6`

(default) | positive real scalar

Measure of change in output frequency for input voltage change, specified as a
positive real scalar with units in Hz/V. This parameter is also reported as
**VCO voltage sensitivity** in the **Loop Filter**
tab and is used to automatically calculate the filter component values of the loop
filter.

#### Dependencies

To enable this parameter, in the **Parameters** tab, set
**Specify using** to ```
Voltage
sensitivity
```

.

#### Programmatic Use

Block parameter:
`Kvco` |

Type: character vector |

Values: positive real scalar |

Default:
`100e6` |

**Data Types: **`double`

**Free running frequency (Hz)** — VCO output frequency without control voltage

`2.5e9`

(default) | positive real scalar

Frequency of the VCO without any control voltage input (`0`

V) or
the quiescent frequency, specified as a positive real scalar in hertz.

#### Dependencies

To enable this parameter, in the **Parameters** tab, set
**Specify using** to ```
Voltage
sensitivity
```

.

#### Programmatic Use

Block parameter:
`Fo` |

Type: character vector |

Values: positive real scalar |

Default:
`2.5e9` |

**Data Types: **`double`

**Control voltage (V)** — Control voltage values

`[-5 0 5]`

(default) | real valued vector

Control voltage values of the VCO, specified as a real valued vector in volts.

#### Dependencies

To enable this parameter, in the **Parameters** tab, set
**Specify using** to ```
Output frequency vs. control
voltage
```

.

#### Programmatic Use

Block parameter:
`ControlVoltage` |

Type: character vector |

Values: real valued vector |

Default:
`[-5 0 5]` |

**Data Types: **`double`

**Output frequency (Hz)** — VCO output frequency values

`[2e9 2.5e9 3e9]`

(default) | positive real valued vector

Output frequency of the VCO corresponding to the **Control voltage
(V)** vector, specified in hertz.

#### Dependencies

To enable this parameter, in the **Parameters** tab, set
**Specify using** to ```
Output frequency vs. control
voltage
```

.

#### Programmatic Use

Block parameter:
`OutputFrequency` |

Type: character vector |

Values: positive real valued
vector |

Default:
`[2e9 2.5e9 3e9]` |

**Data Types: **`double`

**Output amplitude (V)** — Maximum amplitude of VCO output voltage

`1`

(default) | positive real scalar

Maximum amplitude of the VCO output voltage, specified as a positive real scalar.

#### Programmatic Use

Block parameter:
`Amplitude` |

Type: character vector |

Values: positive real scalar |

Default:
`1` |

**Data Types: **`double`

**Enable increased buffer size** — Enable increased buffer size

off (default) | on

Select to enable increased buffer size during simulation. This increases the buffer size of the Variable Pulse Delay block inside the Ring Oscillator VCO block. By default, this option is deselected.

**Buffer size** — Number of samples of input buffering available during simulation

`10`

(default) | positive integer scalar

Number of samples of input buffering available during simulation, specified as a positive integer scalar. This sets the buffer size of the Variable Pulse Delay block inside the Ring Oscillator VCO block.

Selecting a different simulation solver or sampling strategies can change the
number of input samples needed to produce an accurate output sample. Set the
**Buffer size** to a large enough value so that the input buffer
contains all the input samples required.

#### Dependencies

To enable this parameter, select **Enable increased buffer
size**.

#### Programmatic Use

Block parameter:
`NBuffer` |

Type: character vector |

Values: positive integer scalar |

Default:
`10` |

**Data Types: **`double`

### Impairments

**Add phase noise** — Add phase noise as a function of frequency

on (default) | off

Select to introduce phase noise as a function of frequency to the VCO. By default, this option is selected.

**Model single sided phase noise instead of double sided** — Model single-sided phase noise instead of double-sided

off (default) | on

Select to model single-sided phase noise instead of double-sided. By default, the block assumes the specified phase noise is double-sided.

**Phase noise frequency offset (Hz)** — Frequency offsets of specified phase noise from carrier frequency

`[30e3 100e3 1e6 3e6 10e6]`

(default) | positive real valued vector

The frequency offsets of the specified phase noise from the carrier frequency, specified as a positive real valued vector in hertz.

#### Dependencies

To enable this parameter, select **Add phase noise** in the
**Impairments** tab.

#### Programmatic Use

Block parameter:
`Foffset` |

Type: character vector |

Values: positive real valued
vector |

Default:
`[30e3 100e3 1e6 3e6 10e6]` |

**Data Types: **`double`

**Phase noise level (dBc/Hz)** — Specified phase noise power at phase noise frequency offsets relative to the carrier

`[-56 -106 -132 -143 -152]`

(default) | negative real valued vector

The specified phase noise power in a 1 Hz bandwidth centered at the phase noise
frequency offsets relative to the carrier, specified as a negative real valued vector
in dBc/Hz. The elements of **Phase noise level** correspond to
relative elements in the **Phase noise frequency offset (Hz)**
parameter.

#### Dependencies

To enable this parameter, select **Add phase noise** in the
**Impairments** tab.

#### Programmatic Use

Block parameter:
`PhaseNoise` |

Type: character vector |

Values: negative real valued
vector |

Default:
`[-56 -106 -132 -143 -152]` |

**Data Types: **`double`

**Estimate phase noise parameters** — Set noise parameters intended to match specified noise spectrum

button

Click to set the noise parameters to an initial estimate intended to match the specified noise spectrum.

**Period jitter (S)** — Standard deviation of period jitter

`1.7e-15`

(default) | positive real scalar

Standard deviation of the period jitter, specified as a positive real scalar in seconds. Period jitter is the deviation in cycle time of a clock signal with respect to the ideal period.

#### Programmatic Use

Block parameter:
`PeriodJitter` |

Type: character vector |

Values: positive real scalar |

Default:
`1.7e-15` |

**Flicker corner frequency (Hz)** — Corner frequency of flicker noise

`5e5`

(default) | scalar

Corner frequency of the flicker noise, specified as a scalar in hertz.
**Flicker corner frequency (Hz)** is defined as the frequency at
which the phase noise transitions from 1/*f*^{2} to 1/*f*^{3} due to flicker noise. At this frequency, the spectral densities of
period jitter and flicker noise are equal.

#### Programmatic Use

Block parameter:
`CornerFrequency` |

Type: character vector |

Values: scalar |

Default:
`5e5` |

**Customize flicker exponent (Advanced feature)** — Customize flicker noise power spectral distribution

off (default) | on

Select this parameter to customize the power spectral distribution of the flicker
noise. Traditionally, flicker noise is defined as the 1/*f* noise, but it can vary as 1/*f ^{V}*, where 0.8<

*V*<1.5.

**Flicker exponent** — Flicker noise power exponent

`1.0`

(default) | `0.8`

| `0.9`

| `1.1`

| `1.2`

| `1.3`

| `1.4`

| `1.5`

Flicker noise power exponent, specified between `0.8`

to
`1.5`

.

#### Programmatic Use

Block parameter:
`FlickerExponent` |

Type: character vector |

Values:
`1.0` | `0.8` |
`0.9` | `1.1` |
`1.2` | `1.3` |
`1.4` | `1.5` |

Default:
`1.0` |

**Plot fit** — Plot specified and expected output phase noise density

button

Click to plot the specified phase noise density and realizable expected output phase noise density.

## More About

### Phase Noise in Ring Oscillator VCO

The Ring Oscillator VCO block generates the phase noise with the help of a Gaussian noise source and a flicker filter.

When enable the phase noise, the phase noise is calculated from the variance of the
period offset stochastic process from the spectral density at a single frequency. Given the
oscillation frequency *f*_{0}, offset frequency
*f* , and single sideband spectral density ℒ(*f*) , the
variance of the period offset is:

$${\sigma}_{T}{}^{2}=\mathcal{L}\left(f\right)\frac{{f}^{2}}{{f}_{0}{}^{3}}$$

Thus, except for flicker noise, you need a period offset derived from an uncorrelated random process with a constant variance. This period offset is generated by the block’s Gaussian noise source.

To model flicker noise, the flicker filter introduces additional gain at low
frequencies, down to four orders of magnitude below the flicker corner frequency. To
increase the energy spectral density from 1/*f*^{2} to 1/*f*^{3}, the flicker filter must introduce a voltage gain of 1/√*f* below the corner frequency while maintaining unity gain above the corner
frequency. To achieve this, the flicker filter is a recursive digital filter with an
alternating sequence of four poles and four zeros. The lowest frequency zero is a constant
factor higher than the lowest frequency pole, the next higher frequency pole is the same
constant factor higher than the lowest frequency zero, and that pattern of alternating poles
and zeros is maintained through the remainder of the sequence. The constant factor is a
function of the flicker filter exponent, with a factor of the square root of ten for the
nominal case of 1/*f* flicker noise.

To minimize numerical noise in the flicker filter, the sample rate of the Gaussian noise source and flicker filter is limited to 20 times the highest phase noise specification offset frequency, unless that sample rate is comparable to or greater than twice the frequency of oscillation. For higher phase specification noise offset frequencies, the sample rate is limited to twice the frequency of oscillation.

The variance of the Gaussian noise source is adjusted to compensate for the difference in sample rate between the noise source and the oscillator’s frequency of oscillation.

When the phase noise is disabled, the variance of the Gaussian noise is set to zero.

### Matching Measured Phase Noise to Physical Model

Specified phase noise spectra often include measurement artifacts that should not be
included in the model of the VCO itself. While the parameter values produced by the
**Estimate phase noise parameters** button will often come close to
creating an appropriate physical model, there will be cases that require your judgement. Two
common problems are noise floor and resolution bandwidth.

Sometimes, the measured phase noise appears to match a physical model up to frequencies for which the phase noise may be below the noise floor of the measurement.

It appears that there is a measurement noise floor at –140 dBc/Hz for the specification dataset, and the phase noise for the device under test is probably below that noise floor for offset frequencies above 100 MHz. In this case, a set of parameter values that fit best to the data at lower frequency offsets is likely to produce a more accurate model.

Sometimes, the measured phase noise appears to match a physical model at all levels except the lowest frequency offset.

The most likely cause for a result such as this is that the resolution bandwidth used to make the measurement was too large to produce an accurate measurement at the lowest frequency offset, 30 kHz in this case. Even if the carrier was outside the passband of the measurement filter, the carrier energy passed through the limited stopband rejection of the measurement filter was much larger than the energy in the passband. In this case, a set of parameter values that fit best to the data at higher frequency offsets is likely to produce a more accurate model.

## Version History

**Introduced in R2021a**

### R2023b: Model Single-Sided Phase Noise

You can specify whether the VCO phase noise is single-sided or double-sided.

## 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)