• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. SNR calculation wrong by 3 dB?

Stats

  • Locked Locked
  • Replies 11
  • Subscribers 126
  • Views 14701
  • 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 3 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
  • ShawnLogan
    ShawnLogan over 3 years ago

    Dear Fede26,

    Fede26 said:

    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.

    1. Might you clarify the windowing function you are using? You stated "Hanging window", but I don't believe that is a valid endowing function (and I've also never heard of it!). Did you mean Hanning?

    2. If you did intend to write "Hanning" window, did you include the amplitude distortion the Hanning window will produce on your data sample? Its amplitude distortion will definitely change your measured overall signal to noise ratio. Specifically, likely the peak of the sinusoid i may not be changed much, but the integrated thermal noise will undergo significant attenuation. Aa result, I would expect the spectrum assistance to return a higher SNR than your hand computed value if you did not include the distortion it induces in your SNR calculation (and from your description, you did not). For your reference, the Hanning window imposes the amplitude distortion shown in Figure 1.

    In your case, since you are making sure your sinusoid data sample is an integer number of periods, I would expect spectral leakage should be small and would recommend you consider a Rectangular window. This type of window does not induce any amplitude distortion.

    I hope I understood your question correctly and my response makes some sense to you Fede26!

    Shawn

    Figure 1
    (from URL: community.sw.siemens.com/.../window-correction-factors)

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

    Hi

    thanks for your answer.

    yes I mean Hanning, auto-corrector did the trick.

    About windowing, I am not including any correction in my hand calculations and I was not aware that noise might be attenuated by windowing. What seems not correct to me is that spectrum assistant reports "Signal Power" as the amplitude of the input signal, whereas I was expecting rms value. 

    Btw, I tried rectangular, hamming and results are always the same so I would like to have a clarification from someone from Cadence on how the SNR is calculated, as it seems to me that it uses the amplitude peak...

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to Fede26

    Fede26 I would suggest that you create a case with customer support. I'd love to dig into this, but the day job is consuming all of my time at the moment and my ability to respond to anything other than quick questions on the forums is likely to be limited for the next couple of weeks.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bernd2700
    bernd2700 over 3 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
  • ShawnLogan
    ShawnLogan over 3 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 3 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 3 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 3 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 3 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
>

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