Re: [casper] ROACH-2: Identifying Spurs in FFT of Noise Spectrum
Hi Benjamin, I haven't read the full thread, so not sure if you detailed sampling frequencies, etc., but in our testing of ROACH and ROACH2, we found the biggest culprit to be a bus signal that never leaves the PowerPC, and (if memory serves) causes the biggest spur at 133 MHz (and of course harmonics). Depending on where these fall in your band, you may get interplay between interleaving artefacts and real interferers. Regards, Francois On Fri, 9 Apr 2021 at 08:14, Clifford van Dyk wrote: > Hi Benjamin > > When presented with a pure tone input, INL usually exhibits as a few > low-order (2nd, 3rd harmonic) spurs in a spectrum, that can be reduced by > high dither levels (in the order of half you ADCs usable dynamic range). > DNL, on the other hand, typically exhibits as many high order spurs (many > higher harmonics that alias back) that can be reduced by dither in the > order of your quantisation step size. Its easy to appreciate this by > considering a polynomial expansion of the ADCs transfer function - the ADCs > staircase requires many terms (=high order harmonics) to represent > accurately by polynomial expansion, whereas INL can be represented by just > a few terms. It is therefore not surprising to me that you could not solve > the many spurs by injecting a large scale sinusoidal dither - they are not > typically caused by INL. > > Certain combinations of signal frequency to sample clock frequency or > signal amplitude to quantisation level can result in apparent periodicity > in the resultant digitized signal rather than noise that is evenly > distributed in the spectrum. > > It is possible to produce clean spectra to well below -110 dBFS using > lower sample rate, higher linearity ADCs and low input signal level (50 ohm > terminated inputs), but when presented with a near Fs signals, linearity > inevitably becomes the limit on dynamic range/sensitivity due to DNL and > quantisation effects. I can send you some plots of what we have achieved > with 16-bit ADCs (at far lower sample rates) if you are interested. > > Kind regards, > Clifford > > On Fri, 09 Apr 2021, 03:17 'Benjamin Godfrey' via > casper@lists.berkeley.edu, wrote: > >> Thank you everyone for all the great input. I haven't been able to try >> anything substantive yet but I definitely have a laundry list of things to >> try. >> >> Clifford: I've done signal injection tests with sinusoids and seen >> similar spurs but haven't done a careful check to ensure that the injected >> signal doesn't have harmonics and things on it. Same goes with >> investigating the clock. I have a commercial spectrum analyzer that I use >> to check both of those. You're also right that the ADC isn't shielded from >> the ROACH (at least with a Faraday shield). >> >> On the dither front, I tried measuring the INL of the ADC using the known >> pdf of a sine wave. This was then used to create a lookup table that I >> applied to the time-series data before taking the FFT. Unfortunately, it >> didn't do a whole lot to the spurs. My setup for looking at these spurs >> (and my result) is likely sub-optimal though (my thinking is explained in >> the following paragraph) so this is something I should continue thinking >> about. >> >> Dan: A little bit more detail about the ultimate goal: The challenge is >> to detect a 1 ppm spectrally pure signal (varying only on 12-hour >> timescales) at femto-volt levels. Since the frequency is unknown we want to >> maximize the spectral range but to ensure maximum sensitivity we also want >> to ensure that we're as efficient as possible scanning over that spectral >> range (aka do it in real time). That's currently what is setting the FFT >> size. It also means that the data we're feeding into the ADC is basically >> thermal noise, which we then average many, many times over to be as >> sensitive as positive. That was my underlying motivation for doing all this >> spur testing by terminating the ADC input. I'm absolutely not beholden to >> this method though, and I think some more reading is in order on my end in >> light of your suggestions. >> >> Matt: Good segue from what Dan was suggesting. Thanks for the reading >> material. This is all new to me so the more resources the better. >> >> Atul: That's very good to know. These spurs are showing up every ~15,500 >> bins. But I'll go through the code and make sure I'm casting the ADC data >> before sending it to the GPU. >> >> Once again, thanks everyone for all the great insight. >> Looking forward to trying things out, >> Ben >> >> >> >> >> On Thu, Apr 8, 2021 at 4:42 PM Atul Ghalame >> wrote: >> >>> Hi Ben, >>> >>> I had experienced a similar problem once with the 64 channel ADC+ROACH. >>> F-engine was running on ROACH and all fixed-point data, mismatch of data >>> type+bits created dips in the broadband noise test at regular intervals. >>> Casting ADC data into expected format before the FFT resolved it. >>> >>> While katADC is sending fixed-point data and GPU running on
Re: [casper] ROACH-2: Identifying Spurs in FFT of Noise Spectrum
Well put Dan. fyi. IEEE 1241-2010 describes a few ways to test ADCs. https://ieeexplore.ieee.org/document/5692956 Online searches find the -2010 version at http://class.ece.iastate.edu/djchen/ee509/2018/IEEE1241-2011.pdf The older version, IEEE 1241-2000, is also easy to find on the WWW. CASPER is definitely not the only group that use high speed ADCs. https://ohwr.org/projects/adc-testing/wiki/adc-characterization-project Matt On Thu, 8 Apr 2021, Dan Werthimer wrote: Date: Thu, 8 Apr 2021 15:22:11 -0700 From: Dan Werthimer Reply-To: casper@lists.berkeley.edu To: CASPER Mailing List Subject: Re: [casper] ROACH-2: Identifying Spurs in FFT of Noise Spectrum hi ben, to test for ADC spurs, it's best to use a noise source, and inject wide band noise into your ADC, setting the noise to a similar power level that that which you will use in your experiment. you'll probably want to run your experiment with a power level (and noise source) that feeds the adc with an RMS of around 40 ADC units.. (assuming an ADC range from -128 to +127, and assuming you have no strong RFI getting into your experiment) (eg: assuming you are processing a gaussian noise like signal). you can not test for ADC spurs by terminating the ADC input, because the ADC will chatter between two levels. (eg: it will usually chatter between 0 and -1, or 0 and +1, depending on the DC offset of the particular ADC chip, which depends on temperature...). if the ADC's DC offset is right in between two steps on the ADC staircase, only a few microvolts of RFI will cause gigantic spurs. if the DC offset is exactly between two ADC staircase steps, then the RFI will need to be larger to get really big spurs. in any case, the spurs you see from a terminated ADC won't tell you very much about the spurs you'll see when you send a noise source or send the signal from your noise dominated experimental source. i think what you care about is spur to noise ratio, and that is best tested by injecting wide band noise. best wishes, dan Dan Werthimer Marilyn and Watson Alberts Chair Astronomy Dept and Space Sciences Lab University of California, Berkeley On Thu, Apr 8, 2021 at 1:42 PM 'Benjamin' via casper@lists.berkeley.edu wrote: Hi everyone, This question is a little out of left field, but I know there's lots of experience in this regime. I'm working on an experiment looking for a Q~10^6 signal embedded in broad-spectrum noise. To this end, we are using a ROACH-2 board with a katADC, to sample the incoming signal, and then offloading the data to a PC where a GPU performs a (large) FFT. Any candidate signal will look like excess power in just a single bin. (In part) Because of this, we're very concerned with identifying the source of any spurs that we see in our FFT spectra. For the past little bit I've been doing some very simple tests where I terminate the input to the ADC, take data, do an FFT, and look at the resulting spectrum. An example is shown below: AttenTest_0_EnableOff_ClosedTop_2GHz_FFT_Zoom_4-4-21.png 2^26-point FFT sampling at 2 GHz (interleaved mode) zoomed in between 490-510 MHz. For this test, ADC input was terminated and enable register was set to 0. When I do this, I get results like the above, where I notice a couple of things: Firstly, there is a large clock spur at 500.0 MHz. Ultimately, this will have to be dealt with, but the source of it is known. Secondly, there are a bunch of much smaller spurs. These are all separated by ~923 kHz from each other, and they are seen across the entire spectral range (from 0 all the way to 1 GHz). Actually, at lower frequencies you see spurs every 462-463 kHz. One further thing I've noticed is that if I set the programmable attenuator to it's maximum (31 dB), the spurs disappear but the main clock spur remains at its original amplitude. With all that in mind, this leads me to a few questions: * Has anyone dealt with these spurs before? * Do you have any hypotheses what their origin may be? I've been concerned about switching power supplies (namely the ATX and the DC-to-DC converters) but those are on the ROACH not on the katADC. Plus, from the schematics, it looks like there's a lot of filtering happening both on the ROACH and the katADC. * Do you have any suggestions for getting rid of these spurs? Any insight is greatly appreciated. Many thanks, Ben -- You received this message because you are subscribed to the Google Groups "casper@lists.berkeley.edu" group. To unsubscribe from this group and stop receiving emails from it, send an email to casper+unsubscr...@lists.berkeley.edu. To view this discussion on the web visithttps://groups.google.com/a/lists.berkeley.edu/d/msgid/casper/fd9296d0-a9b6-4aa8-91f4-0ae64115f639n%40lists.berkeley .edu. -- You received this message because you are subscribed to the Google Groups "casper@lists.berkeley.edu" group. To unsubscribe from this group and stop r