# Jitter model does not behave as expected after FFT

So I'm currently trying to understand the relationship between jitter and phase noise. To help my understanding I did write a little simulation in matlab.

I used this model in the time domain, relying on the definition by IEEE:

$$s(t)=\sin(2\pi f_0 t + \phi(t))$$

where $$\phi(t)$$ is the phase deviation should represent the jitter.

So my idea was to use a white noise signal with a specific standard deviation for $$\phi(t)$$ (I used a standard deviation of 0.1).

When I plot this signal in the time domain I actually get a "distorted-looking" signal. But when I take the FFT of this signal I would expect to see the the signals jitter as a stretched peak at the signals frequency (So basically how a signal with phase noise would look like). But the only difference I see is a higher noise floor over the whole spectrum.

Here the spectrum without noise:

Here with noise:

Thank you!

• How many data points do you have?
– Ben
Apr 13 at 21:15

By adding small angle white noise to the phase term, the OP is correctly modeling "White Phase Noise" which would result in the flat spectrum shown. As a general note, phase noise is typically not white but colored with an increasing power spectral density as you approach lower offsets from the carrier (and is ultimately a non-stationary process). So to model it, the noise would typically be further shaped to be consistent with the power spectral density for a given oscillator. A simple step toward a more realistic model with phase noise rolling off at -20 dB/decade from the carrier would be "White FM" instead of "White PM" as the OP has done. Phase vs time (as phase noise) is the integral of frequency vs time, and integration is a low pass process with the -20 dB/decade slope mentioned. We can therefore implement this easily by using the OP's white noise to model white frequency noise, and then accumulating (integrating) that to be the phase noise. Here is an example implementation in Python, where I also used a window for modelling carrier frequencies that may not be an integer sub-multiple of the sampling clock.

nsamps = 2**16
fs = 100
f = 10
n = np.arange(nsamps)
t = n/fs
freq_noise = 0.1* rand.randn(nsamps)
phase_noise = np.cumsum(freq_noise)
sigout = np.sin(2*np.pi*f*t + phase_noise)
win = sig.kaiser(nsamps, 12)
fout = fft.fft(sigout*win)


For simulating arbitrary phase noise profiles for realistic oscillator models, I like the approach Alex Bar-Guy has worked out in Matlab here:

https://www.mathworks.com/matlabcentral/fileexchange/8844-phase-noise

As for the relationship between Jitter and Phase Noise, we must consider the filtering effect of the jitter measurement process which serves to reduce close-in phase noise. For example, with "cycle to cycle jitter", an rms time measurement established by triggering each measurement of one period of the clock on one rising edge, and measuring the period to the next rising edge, and repeating multiple times to get a sufficient statistic for an rms result. In the process of measuring the period, the jitter on the first rising edge is subtracted from the jitter on the next rising edge. For the very slow changing components of the jitter (due to close-in phase noise), these will be similar on both edges and thus cancel. However, the faster changing components (due to far-out phase noise), will be decorrelated from edge to edge and result in the equivalent of a power addition. This high pass effect can be seen from the frequency response of a delay and subtract network (comb filter), depicted below, where in this case $$\tau$$ would be the period for one cycle of the oscillator:

That said, the process to equate phase noise to jitter (cycle to cycle jitter specifically) would be to high pass the phase noise with what is equivalent to a first order high-pass (or more accurately the comb filter as depicted above, but for distributed noise processes such as phase noise, the simple high-pass will result in a reasonable estimate), and then integrate the resulting spectrum to get a total noise due to phase fluctuations (as radians squared). If the phase noise spectrum was one-sided (as $$\mathscr{L}_\phi(f)$$), then this would be doubled to account for both sidebands (and then denoted as $$S_\phi(f)$$, but then this result would be halved (cancelling the doubling) to account for the net +3 dB in power from the equivalent high pass function of the cycle to cycle jitter measurement. The square root of this would be rms phase, and then converted to time (multiply by the period and divide by $$2\pi$$) to get rms jitter.

• Actual real live phase noise as observed in oscillators has a spectrum as you describe. Some arbitrary mathematicians conception of phase noise can have whatever spectrum you want. So if the op is using white phase noise, what they are doing is sort of valid, as long as they expect to get white noise out. Which is what they are seeing. Apr 14 at 1:01
• Yes agree @TimWescott. Also I was reading the post from my phone and missed the detail that the OP is modulating the phase directly, rather than adding it as I had misread. I updated my answer re that. Apr 14 at 1:37

Alright, pass two. I'm changing all of the notation from continuous time ($$s(t)$$, $$\phi(t)$$) to discrete time. After all, this is a sampled signal going into an FFT.

If $$\phi[n]$$ is small in magnitude and DC free, then

$$s[n] = \sin(\omega_0 n + \phi[n])$$

can be approximated as

\begin{align} s[n] &= \sin(\omega_0 n + \phi[n]) \\ \\ &= \sin(\phi[n]) \cos(\omega_0 n) + \cos(\phi[n]) \sin(\omega_0 n) \\ \\ & \approx \phi[n] \cos(\omega_0 n) + \sin(\omega_0 n) \\ \\ &= e[n] + \sin(\omega_0 n) \\ \end{align}

Where

\begin{align} e[n] &= \phi[n] \cos(\omega_0 n) \\ \\ &= \phi[n] \tfrac12 (e^{j \omega_0 n} + e^{-j \omega_0 n}) \\ \end{align}

and, if $$\phi[n]$$ and $$\cos(\omega_0 n)$$ are independent of each other, then

\begin{align} \overline{|e[n]|^2} &= \overline{|\phi[n]|^2} \cdot \overline{|\cos(\omega_0 n)|^2} \\ \\ &= \overline{|\phi[n]|^2} \cdot \tfrac12 \\ \end{align}

So small jitter (scaled in radians) should come out as something like additive noise about 3 dB less.

I'm just spitballing.

Now if $$\phi[n]$$ is bandlimited white noise (it has to be bandlimited in order to have finite power or variance) and is two-sided bandlimited to Nyquist, (that is from $$-\pi$$ to $$+\pi$$) then modulating with $$\cos(\omega_0 n)$$ only rotates the spectrum of $$\phi[n]$$ by the offsets of $$-\omega_0$$ and $$+\omega_0$$. But that rotated spectrum wraps around. If it were flat before, it would remain flat after rotation.

So there is no reason for this jitter noise, $$\phi[n]$$, if it were white (and bandlimited to Nyquist) to begin with, to come out different from white, even after being modulated by $$e^{j \omega_0 n}$$ and $$e^{-j \omega_0 n}$$.

• Actually, I think your condition that $\phi[n]$ be bandlimited to Nyquist is unecessary. In sampled time, there are no unique frequencies outside of any interval that's exactly $2 \pi$ radians long, because of the identity $e^{j \left(2 pi + \theta \right) } = e^{j \theta}$. So in sampled time, there isn't really a "Nyquist frequency" unless you're reconstructing to analog or resampling to a lower sampling rate. Apr 14 at 18:36
• Tim, what comes out of a good pseudo-random number generator are a stream of numbers that are usually uniform p.d.f. and independent of each other. Now you can add several of those uniform and independent random numbers and get a stream of Gaussian p.d.f. and independent random numbers. The variances and means add to give you the variance and mean of the sum. The mean can be subtracted out. Then that stream of gaussian random numbers is functionally equivalent to sampling white noise that is brickwall bandlimited to $\pm$ Nyquist, which is $\pm \pi$ for sampled time. Apr 14 at 19:51