[time-nuts] Re: Simple simulation model for an OCXO?

Carsten Andrich carsten.andrich at tu-ilmenau.de
Tue May 10 06:20:35 UTC 2022


First, thanks to everyone who chimed in on this highly interesting topic.

On 04.05.22 18:49, Attila Kinali wrote:
> FFT based systems take a white, normal distributed noise source,
> Fourier transform it, filter it in frequency domain and transform
> it back. Runtime is dominated by the FFT and thus O(n*log(n)).
> There was a nice paper by either Barnes or Greenhall (or both?)
> on this, which I seem currently unable to find. This is also the
> method employed by the bruiteur tool from sigma-theta.
>
> Biggest disadvantage of this method is, that it operates on the
> whole sample length multiple times. I.e it becomes slow very
> quickly, especially when the whole sample length is larger
> than main memory. But they deliver exact results with exactly
> the spectrum / time-correlation you want.

If you happen to find the paper, please share a reference. I'm curious 
about implementation details and side-effects, e.g., whether 
implementing the filter via circular convolution (straightforward 
multiplication in frequency-domain) carries any penalties regarding 
stochastic properties due to periodicity of the generated noise.

Also, any reason to do this via forward and inverse FFT? AFAIK the 
Fourier transform of white noise is white noise, because the underlying 
Gaussian is an Eigenfuntion of the transform. Generating in time-domain 
as follows (Python code using NumPy)

N = int(1e6) # number of samples
A = 1e-9     # Allan deviation for tau = 1 sec
# generate white noise in time-domain
X = np.fft.rfft(np.random.normal(0, A * 3**-0.5, N))
# multiply with frequency response of desired power-law noise and apply inverse Fourier transform
# NOTE: implements circular convolution
x = np.fft.irfft(X * H)

should yield the same properties as generating the white noise directly 
in frequency-domain (there may be an off-by-one-or-two in there 
regarding variance scaling), but the latter will halve the computational 
cost:

# generate white noise directly in frequency-domain
# NOTE: imaginary components at DC and Nyquist are discarded by irfft()
X = np.random.normal(0, A * 6**-0.5 * N**0.5, N+2).view(np.complex128())
# multiply with frequency response of desired power-law noise and apply inverse Fourier transform
# NOTE: implements circular convolution
x = np.fft.irfft(X * H)


On 05.05.22 18:34, Magnus Danielson via time-nuts wrote:
> Both is being revisioned and 1139 just went out for re-balloting 
> process after receiving ballotting comments and 1193 is just to get 
> approved to be sent to balloting.
Any details you can share regarding the changes over the current 
version? Are drafts publicly available?


Best regards,
Carsten




More information about the Time-nuts_lists.febo.com mailing list