will be under maintenance from Friday, Oct. 3rd at 6pm (PST) thru Sunday, Oct 5th at 11pm (PST). login, registration, community posting and commenting functionalities will be disabled.
Home > Community > Blogs > RF Design > modeling oscillators with arbitrary phase noise profiles
Login with a Cadence account.
Not a member yet?
Create a permanent login account to make interactions with Cadence more convenient.

Register | Membership benefits
Get email delivery of the RF Design blog (individual posts).


* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

Modeling Oscillators with Arbitrary Phase Noise Profiles

Comments(2)Filed under: RF design, Virtuoso Spectre, Virtuoso Spectre Simulator GXL, Spectre, Spectre RF, Harmonic Balance, RFIC, VCO, MMSIM, Circuit simulation, RF Simulation, Analog Simulation, ADE, RF, APS, simulation, Oscillator, phase noise, analog, HB, analog/RF, PNoise, HBnoise, noise profiles

When you need to include noisy oscillators in SpectreRF transceiver simulations, you have at least 3 options:

1) Semi-autonomous simulation is the most accurate approach, recommended whenever the transistor-level model of the oscillator is available.

2) rfLib/osc model is less accurate but it’s well-suited for "what-if" design exploration. Since rfLib/osc uses Leeson’s noise formula, it doesn’t allow for arbitrary specification of phase noise profiles as a function of frequency.

3) Use PORTs and other sources with noisefiles. This approach lets users specify arbitrary noise profiles, but it omits sideband correlation data. In practice, this means that AM and PM components of the noise are modeled incorrectly. For oscillators in particular, the AM component is grossly exaggerated and the PM component of the noise is underestimated. As a result, this approach isn’t recommend for oscillator noise modeling.

Our Goal: Develop a Behavioral Oscillator Model w/ an Arbitrary Phase Noise Profile for Use in Virtuoso/SpectreRF

One strategy is:

Use a frequency-dependent noise source which directly phase-modulates an otherwise ideal oscillator.

The noise source is modeled using a voltage source + noisefile.

This gives us two main benefits:

1.  By virtue of direct phase modulation the oscillator’s noise is now all PM, which a good model of near-carrier oscillator noise.

2.  By virtue of using noisefiles, we can now specify arbitrary noise profiles as a function of frequency.

A Simple Mathematical Model of the Oscillator

Below is a simple mathematical model of the oscillator.

Let v(t) be the open-circuit voltage of our oscillator and
φ(t) the random phase:


Using the small noise assumption, and remembering that sin(x+y)=cos(x)sin(y)+sin(x)cos(y),


An equivalent system model of the above equation (1) is shown below:



Below is the Verilog-A Implementation


             `include "constants.vams"

`include "disciplines.vams"

// power: available power (dBm) default: 10 dBm

// freq: output frequency (Hz) default: 1 GHz

// rout: output impedance (Ohm) default: 50 Ohm

`define db10_real(x) pow(10, (x)/10)

`define dbm2pow(x) `db10_real( ((x)-30) )

`define pow2v(x,r) sqrt(8*(r)*(x))

module oscwphnoise(out, ph);

inout out;

input ph;

electrical out;

electrical ph;

electrical gnd;

ground gnd;

electrical int;

parameter real power = 10 ;

parameter real rout = 50 ;

parameter real freq = 1e+09 ;

isource #(.type("sine"), .ampl(`pow2v(`dbm2pow(power),rout)/rout), .freq(freq) ) is1(gnd,out);

vsource #(.type("sine"), .ampl(`pow2v(`dbm2pow(power),rout)/rout), .sinephase(-90), .freq(freq) ) vs1(gnd,int);

analog begin

I(out) <+ -V(int)*V(ph);

I(out) <+ V(out)/rout;





What Do We Apply to the Terminal φ to Model Noise?

Assume that the single sideband noise to carrier ratio (a.k.a. ‘phase noise’) is known and expressed in dBc.

Use the well-known relationship between the single sideband noise to carrier ratio and the spectral density of φ(t), which is valid for small offsets f:

L(f) = 0.5*Sφ(f)


So the phase φ(t) is a signal whose noise spectrum is given by:

2*pow(10, LdBc(f)/10)

To model this in Spectre, use a DC voltage source and specify the noise spectrum in a noisefile. You calculate the noisefile using Excel.


Calculating the Noisefile Contents in Excel




A Complete Model

The complete model is shown below:




Example Results

Below are results showing hb and hbnoise (phase noise) results:




To explore this further, login into Cadence Online Support and see Solution 11775686.

Have fun simulating!

best regards,



By Oywello George on February 16, 2013
I need Cadence to help me be designing rf power amplifier circuit for my our use.

By Alvin on March 13, 2014
Hi, thanks for positing this. I tried to follow using the verilog-A and noise file with the same PM spectral density values at the same offsets (1 to 1e8 Hz) but when I run pss and pnoise, the pnoise spectrum shows up as a flat line at -170.8dBc/Hz  across the entire offset range instead of the roll off you got. It seems the -170.8dBc PN level corresponds to the highest offset/noise pair listed in the noise file or typed into the vdc form. Would you happen to know where I went wrong? Thanks!

Leave a Comment

E-mail (will not be published)
 I have read and agree to the Terms of use and Community Guidelines.
Community Guidelines
The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.