Electronics > Projects, Designs, and Technical Stuff
Signal processing - getting exact frequency from short ADC sample
mark03:
Whether this is possible or not is going to depend on the signal to noise ratio. You haven't told us much about the signal except that it is sinusoidal and pulsed. As was already mentioned, if the SNR were infinite (the "just math" case) you could have infinite frequency resolution. In reality, noise will limit you, even if it is just the quantization noise inherent in your 12-bit ADC.
If you can model your signal as a sinusoid in noise, i.e. you know for certain that the sinusoid is always there (it does not turn on and off during your data capture) and there are no other signals present, just noise, then you can use methods like MUSIC or ESPRIT. These achieve much better frequency resolution than an FFT followed by peak interpolation.
In any case, your next step is definitely to build some simulations in Matlab or python to find out if this will work, and how to optimize it for your situation.
nctnico:
--- Quote from: daqq on December 13, 2019, 09:48:55 am ---Hi guys,
I'm playing around with signals, I wanted to ask whether it's possible to measure a small frequency shift on a short pulse of a signal.
Assuming that I have data sampled at 100ksps @ 12bit, ignoring timing jitter, the sample size is 2ms (200 samples), is there any method that would enable me to determine the shift of a frequency of sine sampled using this with a large, 0.1Hz resolution? Basically doppler stuff, with the base signal being a pulsed sine at 10kHz. The expected shift is pretty small, 1 to 2 Hz max. I've tried playing with the raw data, using my naive applications of some methods (fft, as well as brute force correlation with a bunch of sines at different phases and different frequencies) it seems the best I can do is a difference of 3Hz-ish so far.
My question is, is it even possible? If so, could you tell me the name of the methods I should look at?
Thanks,
David
--- End quote ---
The simplest way would be to interpolate (upsample) the signal so you get to the required resolution and then determine the frequency by looking at the zero crossings. Jitter and noise will be your biggest enemy though but if you can average the frequency of several cycles you should be able to filter out the noise. Using a narrow filter to make sure you only get the relevant frequencies of the signal will help to reduce noise. Basically a frequency meter in software.
FFT and correlation (which basically comes down to FFT) don't seem like suitable methods to me because in the end the frequency resolution will be limited to the bin size.
David Hess:
--- Quote from: daqq on December 13, 2019, 10:39:45 am ---
--- Quote ---Sure you can, with a reciprocal counter (with TIC for higher resolution).
--- End quote ---
Thanks, unfortunately I'm stuck with the data sampled by the ADC. I know that it can be done using some other methods (high resolution Time to Digital converters and such or even simple timers clocked fast).
--- End quote ---
Centroid timing and transition midpoint timing time to digital converters use curve fitting to make a more precise measurement of a waveform with known characteristics. If your signal is bandwidth limited, then sin(x)/x interpolation will also allow this.
coppice:
--- Quote from: daqq on December 13, 2019, 10:39:45 am ---
--- Quote ---Sure you can, with a reciprocal counter (with TIC for higher resolution).
--- End quote ---
Thanks, unfortunately I'm stuck with the data sampled by the ADC. I know that it can be done using some other methods (high resolution Time to Digital converters and such or even simple timers clocked fast).
--- Quote ---For sampled signals, the resolution frequency is given by the formula Fres = Fs/N where Fs is the sampling frequency and N is the number of samples. You can calculate this directly as per your signals.
essentially for a 1Msps ADC, you need to capture 1Million samples to get 1Hz resolution.
--- End quote ---
Are you sure about this? Assuming 100Hz, sampled at 1Msps, with 1M samples, the signal will look pretty differently if it's shifted by 0.1Hz. I have a gut feeling that using some kind of sine fitting you should be able to get the 0.1Hz out of there.
--- End quote ---
You can get the exact frequency of any pure sine wave using 3 perfect samples - i.e. no amplitude noise, no timing noise (i.e. timing jitter), and masses of resolution. The snag comes when you realise how incredibly sensitive to noise the three sample approach really is.
David Hess:
--- Quote from: coppice on December 14, 2019, 03:04:26 am ---You can get the exact frequency of any pure sine wave using 3 perfect samples - i.e. no amplitude noise, no timing noise (i.e. timing jitter), and masses of resolution. The snag comes when you realise how incredibly sensitive to noise the three sample approach really is.
--- End quote ---
Sampling noise is not bandwidth limited so it causes aliasing making the solution indeterminate. If you use all of the samples, then the noise is integrated out increasing accuracy.
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version