# How to add a particular noise on a signal?

I have a simple ADC model (an input signal == sampled signal ). The adc should be modelled as with following values:

1. 1.5 V (peak to peak).. meaning --> +1.5 V --> 0 dBFS ... how to do this ?
2. The noise on the signal should be -120 dBFS/Hz in bandwidth of 2 MHz.. .how to add this exact noise ?
3. The NFFT= 2^11 and fs= 200 MHz.
4. The input will be 10 MHz single tone, and then the FFT will be perfomed.
fs = 200e6;

n_en=1; % Noise On/Off (1/0)
BW= 2e6;
noise= -120; %dBFS/Hz
SNR=abs(noise + 10*log10(BW));

N= 2^11;
Df_fft = fs/N;
t = (0:N-1)/fs; t = t(:);

f=10e6;

f = Df_fft*round(f/Df_fft);

y = cos(2*pi*f*t);  % I think i need some scaling factor here for  +1.5 V --> 0 dBFS

if n_en==1
y_noise = awgn(y,SNR,'measured');
else
y_noise= y;
end

S = 2*fft(y_noise,N)/N;
S = 20*log10(abs(S));
f = (fs/1e6)*linspace(0,1,N);
plot(f,S)


So my questions are what NFFT points to take.? as that would also determine the noise floor.. .. what exactly would the noise floor be. ?. how exactly i can see the -120 dBFS/Hz in the graph or what does it means in terms of the graph...

is this the correct way to add noise ?

Thanks

All help would be appreciated.

• Looking for context- Where did all these values come from? Is this a homework assignment? Feb 18 '20 at 16:26
• No not homework,, i am just trying to understand this fft noise floor thing and how to add noisy signal effect . You can take any values you want. Feb 18 '20 at 16:37
• Each bin if you don’t window has an equivalent noise bandwidth that is 1 bin wide. So the bandwidth of each bin is the sampling rate divided by the number of bins. There are some other posts on this that i can link to later for you Feb 18 '20 at 16:39
• And typically the way I model the ADC quantization noise is through rounding or truncation (use integer math), not actually adding noise as an external source Feb 18 '20 at 16:52

Please see this post that details most of the noise considerations for an ADC

What are advantages of having higher sampling rate of a signal?

In particular the relationship for the noise floor given a full scale sine wave:

$$SNR = 6.02 \text{ dB/bit} + 1.76 \text{ dB}$$

1.5Vpp sinewave. If we assume this sinewave is full scale (any higher voltage would start to add clipping noise), then this is the level of 0 dBFS. In particular the variance of this or the standard deviation is used in the dB ratio computation according to:

$$SNR = 20Log_{10}(\sigma_s/\sigma_n)$$

or

$$SNR = 10Log_{10}(\sigma_s^2/\sigma_n^2)$$

Since the noise itself is given in units of dBFS, there is nothing to do further with the 1.5V level. This level is important to determine if the signal is indeed at full scale, and if we wanted to determine the noise level in units of volts.

120 dBFs/Hz with a 200 MHz Sampling Rate:

The quantization noise can be reasonably assumed to be a uniformly distributed white noise (see link above). So the total noise in 200 MHz of bandwidth would be:

$$-120 \text{ dBFS} + 10Log_{10}(200e6) = -37.0 \text{ dB}$$

(Note that this is the double-sided noise in the spectrum extending from $$-f_s/2$$ to $$+f_s/2$$)

From the formula above we see that this would be 6.16 bits of precision. A 6 bit converter with the sinewave right at full scale would be very close the the added noise that was given in the example.

To "add" such noise to the signal, scale the signal to fit peak-peak with a 6 bit system and round to closest integer to create the resulting quantization noise.

So the +/-1.5V peak to peak sine wave would then be scaled to $$0$$ to $$2^6$$, or $$-2^5$$ to $$+2^5-1$$ if you want to represent a signed signal. The noise will occur from either rounding or truncating to integer values. (There is no noise difference in rounding or truncation; truncation simply introduces an offset).

As far as the FFT, each bin in the FFT if not windowed has a bandwidth 1 bin wide. So the FFT noise floor will go down according to the number of bins. This is explained further in this post:

How large FFTs can pull signals out of the noise floor?

• Thankyou for the answer Dan. Feb 20 '20 at 13:35
• Thankyou for the answer Dan. Just some queries more . Lets just first not think about the 120 dBFS/Hz noise, lets just say the fft noise floor: So upon reading i thnk the noise floor should be at : SNR_dB_with_fft = 6.02*N+1.76+ 10*log10(nfft/2) .. for 6 bits t and nfft 2^11 its 68 dB. , but the fft floor I see in the fft plot is way below.. so essentially i want to see the fft noise floor at 68 dB (representing a purely quantization noise floor) . what to do ? Then on top of this we could add that −120 dBFS+10Log10(200e6) (should the BW not be 2 MHz instead of the 200 MHZ ?) Feb 20 '20 at 13:48
• Furthermore,, i would say due to oversampling if : BW= 2MHz , and fs= 200 MHz, then OSR= fs/(2*BW)= 50 osr_gain_dB=10*log10(OSR)=17 db SNR_dB_OSR_and_fft=SNR_dB_ideal+fft_gain_dB+osr_gain_dB= 37.8+30+17 = 85 dB ... This is where the final noise floor should be in real measuremnt .. right ? Feb 20 '20 at 14:01
• The FFT noise floor you see is proportional to the amount of noise in band so would be 10 Log10(1/N) below the total noise given by the quantization noise expression since each bin is equivalent to a brick wall filter 1 bin wide (as far as white noise goes).Does that clear it up for you? Feb 20 '20 at 14:02
• The OSR factor comes out in all that since we already said the noise is white out to the sampling rate. The noise per bin is simply the total noise power divided by number of bins Feb 20 '20 at 14:03