FPGARelated.com
Forums

ADC SNR and Processing Gain

Started by rathnakarreddy 5 years ago3 replieslatest reply 5 years ago702 views
Hi,
with reference to the following article,
https://www.dsprelated.com/showthread/comp.dsp/727...

I have understood that decimating doesn't destroy the processing gain achieved in ADC after suitable placing a Digital  FIR filter after ADC.

I'm using a FPGA. My ADC is 12bit. In my case, a signal of Bandwidth 25KHz is sampled @60MSPS(due to certain constraints). As, it is difficult to design a filter of BW 25KHz at 60MSPS, I have used a CIC decimator. The 12 bit ADC sampled signal(Sampling rate 60MSPS) is decimated by 60 to get 1MSPS. Now, the decimated 1MSPS signal is passed through a FIR filter(25KHz BW).

As per my understanding,
      the processing gain=10log(60MSPS/(2*25KHz))
                         =30dB
                        
For every 6 dB of SNR one bit is required.  So, a total of 5 extra Bits(30dB/6dB) are required.

Q1) Am I right in saying that my output variable(after decimating and FIR filtering) need to be only 12 bits (ADC bits) plus 5bits(from processing gain) i.e 17 bits?

Q2)Now, coming to my doubt in implementation point of view.
 12 bit ADC  signal(BW =25KHz)  sampled @ 60MSPS, is passed through a CIC decimator of decimation value 60. The  output of CIC decimator is giving 30 bits(maintaining Full Precision).
 Here, do I need to retain entire 30 bits or just the  17 bits(12 ADC bits plus 5 bits from Processing gain). Will I be able to retain the processing gain achieved in both cases?

Q3)Lets assume, all the 30 bits from CIC decimator are retained. Now, the output of CIC is passed through a FIR filter(BW=25KZ). The filter(Xilinx FIR IP core) in-turn gives an output filtered variable of bit width 49. How many bits can I sacrifice at this stage, in order not to loose the processing gain and also not to over design the system?
Thanks.
[ - ]
Reply by kazMay 29, 2020

I will suggest this:

Pass 12 bits data through cic and target 12 bits final output with input/output power unity as a starting point. In the same way treat fir as 12 bits in/out with full internal bit growth and power unity across input/output.

12 bits should get you about 72 dB snr. is that enough. If not get more than 12 bits from cic e.g. 16 bits and maintain 16 bits through. that will get you 16*6 db SNR. From where?

since you are decimating by 60 you have room for about 2^5 to 2^6 to extract from adc rate but no more. so 16 bits will do well. I think that is what is called processing gain or is it?

[ - ]
Reply by rathnakarreddyMay 29, 2020

Hi,

Q1)Pass 12 bits data through cic and target 12 bits final output with input/output power unity as a starting point. In the same way treat fir as 12 bits in/out with full internal bit growth and power unity across input/output.

>I just wanted to know, how the processing gain is realized in terms of bits. The processing gain, will it be within the 12 bits of ADC or do I need to add extra bits(5 bits) equivalent of processing gain(30dB/6dB=5bits).

Let, me clarify my problem once again.

Let N be no:of bits of ADC,

            SNR =6.02*N +1.76dB + Processing Gain

            processing gain=10log(fs/(2*BW))  ; { fs=60MSPS, BW=25KHz}

                   =10log(60MSPS/(2*25KHz))

                   =30dB

For this 30dB, do I need to add only extra 5 bits(30dB/6dB) for my output variable (after CIC and filtering), so that it becomes 12+5=17 bits.

As you mentioned, if unity gain filter's are designed, then output bit width is at 12 bits only, then what is happening to the Processing Gain bits(5 bits)?

Please clarify.


Q2)If not get more than 12 bits from cic e.g. 16 bits and maintain 16 bits through. that will get you 16*6 db SNR. From where?

>I thinks, its answered in the following link.

https://www.dsprelated.com/showthread/comp.dsp/727...


Thanks.



[ - ]
Reply by kazMay 29, 2020

If you want full use of processing gain then do that at CIC stage. In this case you need to get 17 bits out of CIC and maintain that to FIR and after.

To get 17 bits dynamic range out, your CIC power gain must be square(2^5) instead of unity. As such all 17 bits will be occupied by information from CIC internal computations.

Anything more than 17 bits is waste as it becomes just scaling with no information in LSBs.

I still say that if 72dB is enough you can give up on processing gain. just get 12 bits out of CIC based on power gain of 1 instead of square(2^5).

In any case you can model your design in software(matlab/Octave) then see what is happening to dynamic range before going to implementation stage on FPGA. Your main guide for scaling would be input to output power.