The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl Design >> Mixed-Signal Design >> Actual SNR value using FFT in Matlab/Cadence https://designers-guide.org/forum/YaBB.pl?num=1423465883 Message started by jdp on Feb 8th, 2015, 11:11pm |
Title: Actual SNR value using FFT in Matlab/Cadence Post by jdp on Feb 8th, 2015, 11:11pm Hello friends. We know that SNR can be found using FFT on transient analysis data from Cadence (using calculator or Spectrum in plot), as well as Matlab (after importing data into it). I am doing this for a delta-sigma modulator, and have taken all precautions like f_in = (D/N)*f_s : D = prime integer and N = no of points of FFT... Now comes the question (rather, confusion): In some references (http://www.analog.com/static/imported-files/tutorials/MT-003.pdf, https://inst.eecs.berkeley.edu/~ee247/fa10/files07/lectures/L13_2_f10.pdf etc.), it is stated that: "FFT acts as a narrowband spectrum analyzer with a bandwidth of fs/N that sweeps over the spectrum. This has the effect of pushing the noise down by an amount equal to the process gain..." "...For correct frequency domain measurements it is also necessary to apply corrections for FFT processing gain...theoretical noise floor for N-point FFT is 10log(N/2) dB below the quantization noise due to processing gain of the FFT" So my question, do we really need to subtract 10log(N/2) dB from the SNR computed using FFT? But, none of the Matlab codes found from internet does so while finding SNR! :( Is there anything that I am missing in this regard, which nullifies the need of subtracting 10log(N/2) ? Any help/idea is highly anticipated... ::) |
Title: Re: Actual SNR value using FFT in Matlab/Cadence Post by sheldon on Feb 9th, 2015, 12:50am JDP, If you use the ADE spectrum function SNR function, the SNR result will be correct. The functions you require are available: SINAD, ENOB, THD, SFDR. Another way to look at the problem is that the noise is output as V/rtHz, so the total noise is spectral density * bandwidth, bandwidth is 1/FFT fundamental frequency. As a result, as the number of points increase the bandwidth decreases. an the noise floor decreases. Since the total noise is dependent on the bandwidth and the bandwidth is a function of square root of frequency, the dependence is 10dB(..). For example, if the quantization noise floor of a 10 bit ADC 61.96dB, then for a 256 point FFT, the noise floor of the FFT is 83dB, for a 1024 point FFT the FFT noise floor is 89dB. As a result as the number of FFT points increase, it is easier to discern the distortion tones. However, the SNR and total noise do not change, the noise floor does decrease. Sheldon |
Title: Re: Actual SNR value using FFT in Matlab/Cadence Post by jdp on Feb 9th, 2015, 6:00am Thank you Sheldon for that helpful reply... :) Just to confirm a few things if I understood properly from what you said: sheldon wrote on Feb 9th, 2015, 12:50am:
Is it like, with increase in N, the # of bins increases while the magnitude of the noise per bin reduces - keeping the total noise power constant irrespective of N used? sheldon wrote on Feb 9th, 2015, 12:50am:
What is the "FFT fundamental frequency" ? Is it =(1/record-length in sec) = f_s/N ? Can you please tell why the bandwidth to be used is reciprocal of that? Grateful regards!... |
Title: Re: Actual SNR value using FFT in Matlab/Cadence Post by sheldon on Feb 9th, 2015, 7:02am JDP, My bad, the fundamental frequency is the reciprocal of the record length. The fundamental frequency is the bandwidth of the bin. Yes, as the number of bins increases the level of each bin decreases. The level of a bin spectral density * bandwidth, where the fundamental frequency = bandwidth. Yes the total noise should be constant. Sorry for causing confusion. Sheldon |
Title: Re: Actual SNR value using FFT in Matlab/Cadence Post by jdp on Feb 9th, 2015, 8:29am Once again thank you Sheldon, that is so kind of you...really helped to clear the doubt! Regards! |
Title: Re: Actual SNR value using FFT in Matlab/Cadence Post by RobG on Feb 9th, 2015, 9:38am sheldon wrote on Feb 9th, 2015, 12:50am:
Sheldon - how do you find these functions? The only one that I find in my calculator is THD. |
Title: Re: Actual SNR value using FFT in Matlab/Cadence Post by sheldon on Feb 9th, 2015, 3:20pm Rob, If you are using IC616, in the ViVA Results Browser there is a pull-down labeled Measurements. If you expand it, Spectrum is the second measurement on the list. It will open the Spectrum assistant. Please try it and let me know if there are any questions. If you in IC615, then you can use there is a calculator function that can help but you need to be a little "patient" with it. The IC616 implementation is much improved. Sheldon |
Title: Re: Actual SNR value using FFT in Matlab/Cadence Post by RobG on Feb 10th, 2015, 8:09am Thanks Sheldon. I'm using IC6.1.5. I quickly tried SpectrumMeas and got 5dB for SINAD so my patience has already expired ;D. Seriously, THD does what I need, but I will look for the new spectrum function in IC6.1.6, Thanks again! rg |
The Designer's Guide Community Forum » Powered by YaBB 2.2.2! YaBB © 2000-2008. All Rights Reserved. |