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:
... 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.


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:
  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....


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:
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.

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.