Hi all,
I have been trying to verify the variance (total power) of a random normal distributed noise source.
The noise source model has been modified from the noise_src in ahdlLib but with $rdist_normal() rather than $random()/`MAXINT
V(vout) <+ amp*$rdist_normal(seed,0,1);
where amp is exactly one sigma in normal distribution case.
In this example I give amp = 100u and the resulting output random signal is shown below:
I used to dump this signal to MATLAB and do the FFT & PSD calculations based on the script described in this website:
"Power Spectral Density Estimates Using FFT"
www.mathworks.com/.../power-spectral-density-estimates-using-fft.html
Take nfft = 65536, sampling time = 1/1GHz.
The resulting integral of the overall spectrum is EXACTLY equal to sigma^2 = (100u)^2.
The PSD setup in VIVA Calculator and the result are shown as follows:
Then I apply iinteg to the PSD and take square root, and the integrated value at the final data point (0.5*sampling frequency) is expected to be sigma=100u.
However, the outcome seems to be smaller than what is expected. ( (82u-100u)/100u ~ -18% error)
There is still a constant -18% error no matter what sigma value I give.
I also ran transient noise simulation with the resistor model given in analogLib to verify that 4kTR*NoiseFmax = sigma^2.
Again, there is a -18% gap between VIVA calculator PSD function and MATLAB PSD.
If I extract the PSD data from VIVA calculator and do integration in MATLAB, the result is identical to that done in VIVA calculator. (-18% sigma)
Based on the trials given above, I suspect the algorithm of PSD function in VIVA calculator is not what I expect to be.
Can someone help me clarify this problem?
Thanks a lot :)
Version Information
virtuoso 6.1.7-64b
spectre 16.1.0 32b