Home
  • Products
  • Solutions
  • Support
  • Company

This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  • Products
  • Solutions
  • Support
  • Company
Community Custom IC Design SNR calculation wrong by 3 dB?

Stats

  • Locked Locked
  • Replies 11
  • Subscribers 126
  • Views 13565
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SNR calculation wrong by 3 dB?

Fede26
Fede26 over 2 years ago

Hi

I did the following experiment to check the accuracy of the Spectrum assistant.

Simple VSIN with 1V peak amplitude series-connected to a 100kOhm resistor and done fft of the output after activating the transient noise up to 100kHz to avoid aliasing. Strobeperiod=1/24MHz was added. Sine frequency was chosen as 3*24e6/8192 to obtain a perfect fit of the signal on fft samples. Number of points is 8192. Hanging window selected. Number of signal samples = 1 as per manual.

My calculation of SNR over a 100kHz bandwidth gives: rms of signal = 0.707V, and rms of noise = sqrt(4*kT*R*100k) = 12.87uV. Hence, SNR = 20*log10(0.707/12.87uV) = 94.7 dB

However, the Spectrum Assistant gives around 3 dB better, i.e. 97.2 dB. It also reports signal power 1e-5 dB so 0 dB. We obtain close to this number if we do 1/12.87e-6.

So it appears to me that SNR function takes signal amplitude instead of signal rms. Where is the flaw in my reasoning if any?

Thanks, best regards.  

  • Cancel
Parents
  • bernd2700
    bernd2700 over 2 years ago

    Dear Fede26,

     

    I do not know this “Spectrum Assistant”, and therefore cannot tell you the root cause what is going wrong in your case, but I can at least help and contribute to show, what MUST BE correct from theory, as a quick reference:

    First of all, your hand calculation is correct. You must obtain the 94 dB SNR. As a consequence, the simulator or function or whatever you use, also MUST give you THIS result.

    Next, you or someone has to find out, what goes wrong with the Spectrum Assistant: The SNR is just the relation of the 2 calculations: So, does the signal gets calculated wrong with this assistant, or the noise? Although you already have a speculation about that it is the signal, you must see evidence.

    Therefore, I filled your exact data into my Matlab script (which is verified a lot of times against professional real measurement devices) and this is the output:

    I have plotted for you 2 windows as a reference: The first one is the spectrum, as it should be outputted from your used DFT function, window uncorrected in units “dBVrms”: This means, a sinusoid signal with 1Vpk basically gives -3dBVrms. So far, so clear. Now the Hann window comes into the game. It produces 3 signal bins instead out of 1, whereas the main lobe is by definition 6 dB lower and its side lobes are 12 dB lower (not for DC!). Integrating all 3 bins together gives again the -3dBVrms, q.e.d. Thus the cursor positioned on the main lobe of the signal shows -9dBVrms, as it should be. First, check this reference against “your” DFT assistant.

    Next is the noise: As noise does not have the unit “Volt” but “Volt per something bandwidth”, I re-calculated the whole plot in a single-sided Root-Spectral-DENSITY (RSD), PLUS accounting for the 6 dB of your used window function “von Hann”. As you see, the averaged green curve with the correct window accounting gives a noise density of your 100k resistor with -147dBVrms/sqrt(Hz), as it also can be easily calculated manually with “20*log10(sqrt(4*k*T*R)) = -147”, q.e.d.

    I hope I could help contributing a bit in finding out what is the root cause error in your case.

    Nice greetings,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • bernd2700
    bernd2700 over 2 years ago

    Dear Fede26,

     

    I do not know this “Spectrum Assistant”, and therefore cannot tell you the root cause what is going wrong in your case, but I can at least help and contribute to show, what MUST BE correct from theory, as a quick reference:

    First of all, your hand calculation is correct. You must obtain the 94 dB SNR. As a consequence, the simulator or function or whatever you use, also MUST give you THIS result.

    Next, you or someone has to find out, what goes wrong with the Spectrum Assistant: The SNR is just the relation of the 2 calculations: So, does the signal gets calculated wrong with this assistant, or the noise? Although you already have a speculation about that it is the signal, you must see evidence.

    Therefore, I filled your exact data into my Matlab script (which is verified a lot of times against professional real measurement devices) and this is the output:

    I have plotted for you 2 windows as a reference: The first one is the spectrum, as it should be outputted from your used DFT function, window uncorrected in units “dBVrms”: This means, a sinusoid signal with 1Vpk basically gives -3dBVrms. So far, so clear. Now the Hann window comes into the game. It produces 3 signal bins instead out of 1, whereas the main lobe is by definition 6 dB lower and its side lobes are 12 dB lower (not for DC!). Integrating all 3 bins together gives again the -3dBVrms, q.e.d. Thus the cursor positioned on the main lobe of the signal shows -9dBVrms, as it should be. First, check this reference against “your” DFT assistant.

    Next is the noise: As noise does not have the unit “Volt” but “Volt per something bandwidth”, I re-calculated the whole plot in a single-sided Root-Spectral-DENSITY (RSD), PLUS accounting for the 6 dB of your used window function “von Hann”. As you see, the averaged green curve with the correct window accounting gives a noise density of your 100k resistor with -147dBVrms/sqrt(Hz), as it also can be easily calculated manually with “20*log10(sqrt(4*k*T*R)) = -147”, q.e.d.

    I hope I could help contributing a bit in finding out what is the root cause error in your case.

    Nice greetings,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • ShawnLogan
    ShawnLogan over 2 years ago in reply to bernd2700

    Dear Fede26 and bernd2700,

    You piqued my interest with your initial question Fede26 (as it did with you bernd2700 I guess too!) and provided some motivation to better understand the difference you observed in Cadence Spectrum Assistant and your expected results. I am pretty sure I can explain the difference and have put together a test case, run a series of simulations and done some post-processing using both Cadence tools as well as my own tools. I am just documenting the results and will post them in the next day for your consideration.

    I believe part of the issue, although not the entire issue, is the application that I believe the Spectrum Assistant was designed for - ADCs and its terminology and requirements. I'm including a few words about that too in the notes. 

    I beg your patience as I assemble the document!

    Shawn

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • ShawnLogan
    ShawnLogan over 2 years ago in reply to ShawnLogan

    Dear Fede26 and bernd2700,

    I have completed the study of Cadence's Spectrum Assistant with regard to its reported signal power and what appears to be the root cause of the difference between its reported Fourier analysis amplitudes (as well as the ViVA ft(0 function and the expected results. The summary of the effort is shown as Figure 1 and a link to the full report is at URL:

    www.dropbox.com/.../test_sinusoid_rnoise_snr_study_052722v1p0.pdf

    I hope this helps provide some insight!

    Shawn

    Figure 1

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 2 years ago in reply to ShawnLogan

    Dear ShawnLogan,

    Thank you for your detailled report! It took me a while to be able to download it from Dropbox and I quickly skimmed through it. Since I do not use this Viva Assistance or similar, I also did not have a detailled look at it, but I downloaded it, if I once will use it.

    Anyway, I hope, you did not find any contradictions to any of my statements made above, what shall be and what shouldn't be?!

    Thanks,

    bernd2700

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • ShawnLogan
    ShawnLogan over 2 years ago in reply to bernd2700

    Dear bernd2700,

    I thank you for even trying to wade through the note - and apologize that you experienced issues downloading the file! The link should allow you (or anyone) to download the file. I know some companies do not allow access to DropBox files due to security concerns - and perhaps this was an issue in your case. In any case, thank you for trying bernd2700!

    bernd2700 said:
    Since I do not use this Viva Assistance or similar, I also did not have a detailled look at it, but I downloaded it, if I once will use it.

    The effort details data and documentation that shows the ViVA dft() function, on which the the Spectrum Assistant is based, is responsible for the discrepancy in signal levels from the values expected by you and Fede26. The study includes a reasonable amount of simulation results and uses Parseval's Theorem to validate the hypothesis I present. Hence, even if you do not use the Spectrum Assistant, if you use the dft() Calculator function, you will also be subject to this error unless you understand exactly what the dft() Calculator function provides.

    Secondly, I think that Fede26 may not have fully appreciated the "Peak Sat. Level" term in the Spectrum Assistant GUI. I also try to provide a clear explanation of the term and its appropriate value to provide the desired reference value for parameters expressed in dB.

    Finally, the noise reported by the Spectrum Assistant does not differentiate between actual random noise due to Johnson or thermal noise attributed to components in one's circuit and spectral components due to the dft() operation. Both are contributors to the noise component. Hence, it is very possible that the reported Signal to Noise ratio will not be what is expected. I have some interesting evidence of this latter effect.

    Shawn

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • ShawnLogan
    ShawnLogan over 2 years ago in reply to ShawnLogan

    Dear bernd2700 and Fede26,

    Just in case you still have an interest ViVA's Spectrum Assistant and its subtleties, wich was the subject of your initial Forum pst Fede26, I have updated the study I performed to include a root cause of analysis of the apparent difference between the signal to noise ratio (SNR) reported by the Spectrum Assistant and the expected theoretical value for the test case which I used to examine the difference between its reported signal power and the expected power for you. Version 1.1 may be accessed at URL:

    www.dropbox.com/.../test_sinusoid_rnoise_snr_study_052722v1p0.pdf

    This is the same URL as its initial 1.0 version. If you happen to be interested and have any access issues with the link I provided, please let me know!

    The version history, Table of Contents, and Summary and Conclusions pages are attached if you are interested but don't have time to review the document itself.

    Shawnver_hist_toc_summary_conclusions_v1p1.pdf

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Fede26
    Fede26 over 2 years ago in reply to ShawnLogan

    Hi Shawn, thanks for the analysis.

    In the end, the problem is related to the choice of fmax in Cadence transient noise analysis. Due to the noise generation algorithm, noise is attenuated by 3dB at fmax. Therefore, if I choose a Lower upper integration limit, SNR calculation will respect theory and also if I choose a larger fmax, keeping integration limit constant.

    This was confirmed by support. 

    Best regards

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • ShawnLogan
    ShawnLogan over 2 years ago in reply to Fede26

    DearFede26,

    Fede26 said:
    In the end, the problem is related to the choice of fmax in Cadence transient noise analysis. Due to the noise generation algorithm, noise is attenuated by 3dB at fmax.

    Yes -This is indeed the case. Thank you for letting me know of your findings! In fact, I just posted a note where this factor is quite obvious. The note is at URL:

    https://www.dropbox.com/s/7vxzliml4uz6518/psd_study_sml_090622v1p0.pdf?dl=0

    In case you are interested, and to save you some time, the PSD of a resistor is shown in Figure 1 computed ffom a transient noise simulation where the sample size is varied. For a large enough sample size (higher sample rate), the noisefmax chosen of 100 GHz results in the thermal noise being attenuated. The relevant figure from page 14 of the note is shown below.

    Thank you again for your update Fede26!

    Shawn

    Figure 1

    from page 14 of URL:https://www.dropbox.com/s/7vxzliml4uz6518/psd_study_sml_090622v1p0.pdf?dl=0

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

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.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information