+ Post New Thread
Results 1 to 4 of 4

19th May 2019, 15:11 #1
 Join Date
 Dec 2016
 Posts
 23
 Helped
 0 / 0
 Points
 641
 Level
 5
Calculating SNR from for an ADC
i am trying to calculate the SNR for the Ideal ADC model in cadence ahdllib , i know that it should be equal to or around 6.02N+1.76
i have implemeted a code to calculate the FFT of the output of ADC using matlab and i will attach the code
my problem is that i dont know how to calculate the SNR from the FFT of the output signal
Code:Afs = 5; fs = 1e6; N = 2048; cycles = 5; fx = fs*cycles/N; t = linspace(0, (N1)/fs, N); %signal frequency y = table2array(bitsinfullscale); y = y'; s = (abs(fft(y)/N/Afs*2)); % drop redundant half s = s(1:N/2); f = (0:length(s)1) / N*fs; figure plot(t,y) hold on; figure plot(f,s)

Advertisement

19th May 2019, 15:46 #2
Awards:
 Join Date
 Apr 2014
 Posts
 17,064
 Helped
 3857 / 3857
 Points
 83,926
 Level
 70
Re: Calculating SNR from for an ADC
Hi,
i know that it should be equal to or around 6.02N+1.76N = 2048;
****
SNR = Signal to Noise Ratio = Signal / Noise.
SNR usually is given in "dB" and signal and noise are given in voltage_RMS.
Thus in most cases: SNR(dB) = 20 x log(Signal_RMS / Noise_RMS)
Signal_RMS
.. is usually a single sinusoidal signal. Thus signal(RMS) in LSB = 2^ADC_bit_resolution / (2 x sqrt(2))
Example: for a 16 bit ADC: 23170 LSB_RMS
Noise_RMS
...is the sum of all frequencies voltage_RMS. (except DC)
noise_RMS = sqrt( n1_RMS^2 + n2_RMS^2 +n3_RMS^2 ....)
KlausPlease don´t contact me via PM, because there is no time to respond to them. No friend requests. Thank you.

Advertisement

19th May 2019, 16:13 #3
 Join Date
 Dec 2016
 Posts
 23
 Helped
 0 / 0
 Points
 641
 Level
 5
Re: Calculating SNR from for an ADC
thanks KlausST but i want to calculate it from the data collected from the FFT i will attach the signal
it is a sine wave output for 4 bit Ideal ADC
Code:
Afs = 5;
fs = 1e6;
N = 2048;
cycles = 5;
fx = fs*cycles/N;
t = linspace(0, (N1)/fs, N);
%signal frequency
y = table2array(bitsinfullscale);
y = y';
s = 20*log10 (abs(fft(y)/N/Afs*2));
% drop redundant half
s = s(1:N/2);
f = (0:length(s)1) / N*fs;
figure
plot(t,y)
hold on;
figure
plot(f,s)
bx = N*fx/fs + 1;
As = 20*log10 (s(bx));
%set signal bin to 0
s(bx) = 0;
An = 10*log10 (sum(s.^2));
SNR = As  An

Advertisement

19th May 2019, 18:23 #4
Awards:
 Join Date
 Apr 2014
 Posts
 17,064
 Helped
 3857 / 3857
 Points
 83,926
 Level
 70
Re: Calculating SNR from for an ADC
Hi,
then just take bin5 as your "signal", and all the rest (without DC) as noise.
But your "sine" is distorted... and it seems it just has 4 bits of resolution, thus you get a lot of overtones.
These overtones play a big role in caclulation.. and thus you don´t get "noise only" > the result is more "THD+N" instead of "SNR".
> either use a THD free input signal, or don´t use an input signal at all.
KlausPlease don´t contact me via PM, because there is no time to respond to them. No friend requests. Thank you.
+ Post New Thread
Please login