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
_______________________________________________
time-nuts mailing list -- time-nuts@lists.febo.com -- To unsubscribe send an
email to time-nuts-le...@lists.febo.com
To unsubscribe, go to and follow the instructions there.