Re: [casper] ROACH-2: Identifying Spurs in FFT of Noise Spectrum

2021-04-09 Thread Francois Kapp
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

2021-04-08 Thread Matt Dexter

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