DSPRelated.com
Forums

Accurate frequency measurement problem

Started by Unknown February 11, 2016
Hi all,

Recently I've been faced with a problem of very accurate sine wave frequency measurement. Let me give you some details:
I've got a sensor which outputs measurement result as a frequency of a sine wave. The frequency of the signal is within 149.4kHz - 150.6kHz range and is very stable, as sensed parameter changes very slowly. Say the frequency can change no more than tens of ppb (parts per billion) per second. Also the signal amplitude should be very stable - it may vary very slowly with temperature. The goal is to measure the frequency to 10-100ppb accuracy at least every second - it may be just a frequency change or if possible, absolute frequency value. Lets denote the frequency we want to measure as f.

I spent some time thinking about a solution and here is the idea I came up with. Lets assume that I undersample the signal using 5kHz sampling frequency. Then I use FFT to estimate roughly what the signal frequency is. Lets denote it as f_approx. Using automatic gain control I make sure that incoming signal has known and stable amplitude. Lets denote this signal as sig_in_agc. In digital domain I generate a sine wave of frequency f_approx and the same amplitude as sig_in_agc. Lets denote this signal as sig_approx. Next step is to multiply sig_in_agc by sig_approx. This is a standard mixing, which gives me a signal which is the sum of two cosines: one having frequency equal to f_approx+f, the other f_approx-f. Then I filter out the high frequency component with low pass filter and as a result I get only a signal which frequency is the difference between f_approx-f. Lets denote it f_diff. Actually this signal represents the instantaneous phase difference between sig_in_agc and sig_approx. I sample this phase difference periodically and then can calculate the f_diff as a derivative over time of the phase difference.

Do you think that above makes any sense? Are there other (better) methods that you can recommend to measure the frequency accurately?

Best regards,
Adam Turowski
On 11.02.2016 13:21, a.turowski@ymail.com wrote:
> Hi all, > > Recently I've been faced with a problem of very accurate sine wave frequency measurement. Let me give you some details: > I've got a sensor which outputs measurement result as a frequency of a sine wave. The frequency of the signal is within 149.4kHz - 150.6kHz range and is very stable, as sensed parameter changes very slowly. Say the frequency can change no more than tens of ppb (parts per billion) per second. Also the signal amplitude should be very stable - it may vary very slowly with temperature. The goal is to measure the frequency to 10-100ppb accuracy at least every second - it may be just a frequency change or if possible, absolute frequency value. Lets denote the frequency we want to measure as f. > > I spent some time thinking about a solution and here is the idea I came up with. Lets assume that I undersample the signal using 5kHz sampling frequency. Then I use FFT to estimate roughly what the signal frequency is. Lets denote it as f_approx. Using automatic gain control I make sure that incoming signal has known and stable amplitude. Lets denote this signal as sig_in_agc. In digital domain I generate a sine wave of frequency f_approx and the same amplitude as sig_in_agc. Lets denote this signal as sig_approx. Next step is to multiply sig_in_agc by sig_approx. This is a standard mixing, which gives me a signal which is the sum of two cosines: one having frequency equal to f_approx+f, the other f_approx-f. Then I filter out the high frequency component with low pass filter and as a result I get only a signal which frequency is the difference between f_approx-f. Lets denote it f_diff. Actually this signal represents the instantaneous phase difference between sig_in_agc and sig_a
pprox. I sample this phase difference periodically and then can calculate the f_diff as a derivative over time of the phase difference.
> > Do you think that above makes any sense? Are there other (better) methods that you can recommend to measure the frequency accurately? > > Best regards, > Adam Turowski >
Hi, Adam. A potential weakness of your approach lies in the operation of undersampling. Basically you are trying to measure the phase of the signal with 10^-3 rad accuracy. That requires a good signal-to-noise ratio. However, when you undersample the signal using fs = 5 kHz, you end up with a bandwidth of 0.5*fs = 2.5 kHz. Which means that you accumulate in the 0.5*fs bandwidth the entire noise power of your analog signal. That decreases the SNR and therefore the accuracy of your measurement. (Just a consideration that might be useful. I cannot say whether it's important or not for your case.) Regards, Evgeny. p.s. Of course I assume you are not trying to shoot yourself in a foot and the stability of your ADC / crystal oscillator is good enough.
On 11.2.16 12:21, a.turowski@ymail.com wrote:
> Hi all, > > Recently I've been faced with a problem of very accurate sine wave frequency measurement. Let me give you some details: > I've got a sensor which outputs measurement result as a frequency of a sine wave. The frequency of the signal is within 149.4kHz - 150.6kHz range and is very stable, as sensed parameter changes very slowly. Say the frequency can change no more than tens of ppb (parts per billion) per second. Also the signal amplitude should be very stable - it may vary very slowly with temperature. The goal is to measure the frequency to 10-100ppb accuracy at least every second - it may be just a frequency change or if possible, absolute frequency value. Lets denote the frequency we want to measure as f. > > I spent some time thinking about a solution and here is the idea I came up with. Lets assume that I undersample the signal using 5kHz sampling frequency. Then I use FFT to estimate roughly what the signal frequency is. Lets denote it as f_approx. Using automatic gain control I make sure that incoming signal has known and stable amplitude. Lets denote this signal as sig_in_agc. In digital domain I generate a sine wave of frequency f_approx and the same amplitude as sig_in_agc. Lets denote this signal as sig_approx. Next step is to multiply sig_in_agc by sig_approx. This is a standard mixing, which gives me a signal which is the sum of two cosines: one having frequency equal to f_approx+f, the other f_approx-f. Then I filter out the high frequency component with low pass filter and as a result I get only a signal which frequency is the difference between f_approx-f. Lets denote it f_diff. Actually this signal represents the instantaneous phase difference between sig_in_agc and sig_app
rox. I sample this phase difference periodically and then can calculate the f_diff as a derivative over time of the phase difference.
> > Do you think that above makes any sense? Are there other (better) methods that you can recommend to measure the frequency accurately? > > Best regards, > Adam Turowski
How about getting a reference-quality 150 kHz complex oscillator and doing I/Q mixing with it? You'll get an analytic signal (two channels) of -600 Hz to 600 Hz, which should then be sampled with good high-resolution A/D converters. You have to follow the phase of the signal to get ppb frequency changes every second. Your frequency reference will be critical at ppb accuracy levels. -- -Tauno Voipio
On Thursday, February 11, 2016 at 7:14:42 AM UTC-5, Tauno Voipio wrote:
> On 11.2.16 12:21, a.turowski@ymail.com wrote: > > Hi all, > > > > Recently I've been faced with a problem of very accurate sine wave frequency measurement. Let me give you some details: > > I've got a sensor which outputs measurement result as a frequency of a sine wave. The frequency of the signal is within 149.4kHz - 150.6kHz range and is very stable, as sensed parameter changes very slowly. Say the frequency can change no more than tens of ppb (parts per billion) per second. Also the signal amplitude should be very stable - it may vary very slowly with temperature. The goal is to measure the frequency to 10-100ppb accuracy at least every second - it may be just a frequency change or if possible, absolute frequency value. Lets denote the frequency we want to measure as f. > > > > I spent some time thinking about a solution and here is the idea I came up with. Lets assume that I undersample the signal using 5kHz sampling frequency. Then I use FFT to estimate roughly what the signal frequency is. Lets denote it as f_approx. Using automatic gain control I make sure that incoming signal has known and stable amplitude. Lets denote this signal as sig_in_agc. In digital domain I generate a sine wave of frequency f_approx and the same amplitude as sig_in_agc. Lets denote this signal as sig_approx. Next step is to multiply sig_in_agc by sig_approx. This is a standard mixing, which gives me a signal which is the sum of two cosines: one having frequency equal to f_approx+f, the other f_approx-f. Then I filter out the high frequency component with low pass filter and as a result I get only a signal which frequency is the difference between f_approx-f. Lets denote it f_diff. Actually this signal represents the instantaneous phase difference between sig_in_agc and sig_app > rox. I sample this phase difference periodically and then can calculate the f_diff as a derivative over time of the phase difference. > > > > Do you think that above makes any sense? Are there other (better) methods that you can recommend to measure the frequency accurately? > > > > Best regards, > > Adam Turowski > > > How about getting a reference-quality 150 kHz complex oscillator and > doing I/Q mixing with it? You'll get an analytic signal (two channels) > of -600 Hz to 600 Hz, which should then be sampled with good > high-resolution A/D converters. > > You have to follow the phase of the signal to get ppb frequency changes > every second. > > Your frequency reference will be critical at ppb accuracy levels. > > -- > > -Tauno Voipio
right.. OP...fundamentally, if you are measueing the absolute frq, you will need a reference with accuracy better than what you are trying to read.... or if you are measuring only changes, then you will still need a reference with STABILITY better than what you are trying to read. next, is filter the BW to as low as possible, if the changes are slow, some type of PLL or tracking filter where the loop BW is very narrow. no free lunch M
W dniu czwartek, 11 lutego 2016 13:42:02 UTC użytkownik mako...@yahoo.com napisał:
> On Thursday, February 11, 2016 at 7:14:42 AM UTC-5, Tauno Voipio wrote: > > On 11.2.16 12:21, a.turowski@ymail.com wrote: > > > Hi all, > > > > > > Recently I've been faced with a problem of very accurate sine wave frequency measurement. Let me give you some details: > > > I've got a sensor which outputs measurement result as a frequency of a sine wave. The frequency of the signal is within 149.4kHz - 150.6kHz range and is very stable, as sensed parameter changes very slowly. Say the frequency can change no more than tens of ppb (parts per billion) per second. Also the signal amplitude should be very stable - it may vary very slowly with temperature. The goal is to measure the frequency to 10-100ppb accuracy at least every second - it may be just a frequency change or if possible, absolute frequency value. Lets denote the frequency we want to measure as f. > > > > > > I spent some time thinking about a solution and here is the idea I came up with. Lets assume that I undersample the signal using 5kHz sampling frequency. Then I use FFT to estimate roughly what the signal frequency is. Lets denote it as f_approx. Using automatic gain control I make sure that incoming signal has known and stable amplitude. Lets denote this signal as sig_in_agc. In digital domain I generate a sine wave of frequency f_approx and the same amplitude as sig_in_agc. Lets denote this signal as sig_approx. Next step is to multiply sig_in_agc by sig_approx. This is a standard mixing, which gives me a signal which is the sum of two cosines: one having frequency equal to f_approx+f, the other f_approx-f. Then I filter out the high frequency component with low pass filter and as a result I get only a signal which frequency is the difference between f_approx-f. Lets denote it f_diff. Actually this signal represents the instantaneous phase difference between sig_in_agc and sig_app > > rox. I sample this phase difference periodically and then can calculate the f_diff as a derivative over time of the phase difference. > > > > > > Do you think that above makes any sense? Are there other (better) methods that you can recommend to measure the frequency accurately? > > > > > > Best regards, > > > Adam Turowski > > > > > > How about getting a reference-quality 150 kHz complex oscillator and > > doing I/Q mixing with it? You'll get an analytic signal (two channels) > > of -600 Hz to 600 Hz, which should then be sampled with good > > high-resolution A/D converters. > > > > You have to follow the phase of the signal to get ppb frequency changes > > every second. > > > > Your frequency reference will be critical at ppb accuracy levels. > > > > -- > > > > -Tauno Voipio > > right.. > > OP...fundamentally, if you are measueing the absolute frq, you will need a reference with accuracy better than what you are trying to read.... > > or > > if you are measuring only changes, then you will still need a reference with STABILITY better than what you are trying to read. > > next, is filter the BW to as low as possible, if the changes are slow, some type of PLL or tracking filter where the loop BW is very narrow. > > no free lunch > > M
Hi all, Thank you for the responses. Yes, I realize that the frequency reference is critical here (or at least its short term stability if I only measure frequency changes). Evgeny, Thank you for the hint about noise increase when doing undersampling. I think I will have to consider using say 1MHz sampling frequency and then down-converting, low pass filtering and decimating in the digital domain. Tauno, I think that using external analog I/Q mixer may not be a very good idea in my application. The reason is that I have to be measure the phase very precisely and I feel that having to have two mixers (one for I the other for Q) will introduce phase mismatches obscuring actual measurement. Anyway, thanks for the suggestion. Mako, I fail to see how PLL would help me in solving the problem. I understand that one could infer the phase difference between signals from the voltage/signal driving VCO/NCO, but it wouldn't be easy. I think that the solution I've proposed originally would give me the same answer without having to go through PLL behavior analysis (this is usually a very hard to crack problem). Any other ideas? Best regards, Adam Turowski
On 11.2.16 17:33, a.turowski@ymail.com wrote:

> Tauno, > I think that using external analog I/Q mixer may not be a very good idea in my application. The reason is that I have to be measure the phase very precisely and I feel that having to have two mixers (one for I the other for Q) will introduce phase mismatches obscuring actual measurement. Anyway, thanks for the suggestion.
You can also do a single-sided mixing, if the input signal is clean enough. Just choose an injection frequency out-of-band and mix the signal down, digitize it, split to I/Q in digital and off you go. For analog 1/f noise considerations, it may be a good idea to avoid very low frequencies after the mixing. It is much easier to do an accurate A/D conversion in audio frequencies than at the input rate directly. Your undersampling idea is actually a kind of downmixing, but with plenty of spurious responses. The injection signal and sample rate frequency accuracy requirements still apply. -- -Tauno
On 2/11/2016 10:33 AM, a.turowski@ymail.com wrote:
> W dniu czwartek, 11 lutego 2016 13:42:02 UTC użytkownik > mako...@yahoo.com napisał: >> On Thursday, February 11, 2016 at 7:14:42 AM UTC-5, Tauno Voipio >> wrote: >>> On 11.2.16 12:21, a.turowski@ymail.com wrote: >>>> Hi all, >>>> >>>> Recently I've been faced with a problem of very accurate sine >>>> wave frequency measurement. Let me give you some details: I've >>>> got a sensor which outputs measurement result as a frequency of >>>> a sine wave. The frequency of the signal is within 149.4kHz - >>>> 150.6kHz range and is very stable, as sensed parameter changes >>>> very slowly. Say the frequency can change no more than tens of >>>> ppb (parts per billion) per second. Also the signal amplitude >>>> should be very stable - it may vary very slowly with >>>> temperature. The goal is to measure the frequency to 10-100ppb >>>> accuracy at least every second - it may be just a frequency >>>> change or if possible, absolute frequency value. Lets denote >>>> the frequency we want to measure as f. >>>> >>>> I spent some time thinking about a solution and here is the >>>> idea I came up with. Lets assume that I undersample the signal >>>> using 5kHz sampling frequency. Then I use FFT to estimate >>>> roughly what the signal frequency is. Lets denote it as >>>> f_approx. Using automatic gain control I make sure that >>>> incoming signal has known and stable amplitude. Lets denote >>>> this signal as sig_in_agc. In digital domain I generate a sine >>>> wave of frequency f_approx and the same amplitude as >>>> sig_in_agc. Lets denote this signal as sig_approx. Next step is >>>> to multiply sig_in_agc by sig_approx. This is a standard >>>> mixing, which gives me a signal which is the sum of two >>>> cosines: one having frequency equal to f_approx+f, the other >>>> f_approx-f. Then I filter out the high frequency component with >>>> low pass filter and as a result I get only a signal which >>>> frequency is the difference between f_approx-f. Lets denote it >>>> f_diff. Actually this signal represents the instantaneous phase >>>> difference between sig_in_agc and sig_app >>> rox. I sample this phase difference periodically and then can >>> calculate the f_diff as a derivative over time of the phase >>> difference. >>>> >>>> Do you think that above makes any sense? Are there other >>>> (better) methods that you can recommend to measure the >>>> frequency accurately? >>>> >>>> Best regards, Adam Turowski > > Mako, I fail to see how PLL would help me in solving the problem. I > understand that one could infer the phase difference between signals > from the voltage/signal driving VCO/NCO, but it wouldn't be easy. I > think that the solution I've proposed originally would give me the > same answer without having to go through PLL behavior analysis (this > is usually a very hard to crack problem).
If you do the PLL in the digital domain you will have a phase step value controlling the NCO that gives you the frequency of the NCO and so an approximation of the input frequency. The phase step size can be made arbitrarily large and so accommodate your ppb requirement if the rest of the system can. I'm not clear about the mixing and how that helps with your frequency accuracy. At some point you have to make an actual measurement of something and that will have to be accurate to 100 ppb. How are you going to do that part? So how will you measure the phase difference to 100 ppb? -- Rick
On Thu, 11 Feb 2016 02:21:28 -0800, a.turowski wrote:

> Hi all, > > Recently I've been faced with a problem of very accurate sine wave > frequency measurement. Let me give you some details: > I've got a sensor which outputs measurement result as a frequency of a > sine wave. The frequency of the signal is within 149.4kHz - 150.6kHz > range and is very stable, as sensed parameter changes very slowly. Say > the frequency can change no more than tens of ppb (parts per billion) > per second. Also the signal amplitude should be very stable - it may > vary very slowly with temperature. The goal is to measure the frequency > to 10-100ppb accuracy at least every second - it may be just a frequency > change or if possible, absolute frequency value. Lets denote the > frequency we want to measure as f. > > I spent some time thinking about a solution and here is the idea I came > up with. Lets assume that I undersample the signal using 5kHz sampling > frequency. Then I use FFT to estimate roughly what the signal frequency > is. Lets denote it as f_approx. Using automatic gain control I make sure > that incoming signal has known and stable amplitude. Lets denote this > signal as sig_in_agc. In digital domain I generate a sine wave of > frequency f_approx and the same amplitude as sig_in_agc. Lets denote > this signal as sig_approx. Next step is to multiply sig_in_agc by > sig_approx. This is a standard mixing, which gives me a signal which is > the sum of two cosines: one having frequency equal to f_approx+f, the > other f_approx-f. Then I filter out the high frequency component with > low pass filter and as a result I get only a signal which frequency is > the difference between f_approx-f. Lets denote it f_diff. Actually this > signal represents the instantaneous phase difference between sig_in_agc > and sig_approx. I sample this phase difference periodically and then can > calculate the f_diff as a derivative over time of the phase difference. > > Do you think that above makes any sense? Are there other (better) > methods that you can recommend to measure the frequency accurately?
Assuming that you need to do this continuously this just screams for a digital phase locked loop. I'm surprised that no one else has suggested it yet. Even if you need to grab vectors of samples and do it in batch then some sort of a best-fit to a sinusoid is probably a Really Good Idea. For a PLL the essentials that you need are a really good time base, a processor that can keep up, and some sort of analog to digital conversion. Given the need for 10ppb accuracy and a one-second acquisition time you can't just square the thing up and phase-lock to the edges -- you need to use a real ADC. A 10ppb change in frequency translates to about a 0.01 radian change in phase over 10 second. This indicates to me that an 8-bit ADC should be enough -- you don't even have to sample over naive-Nyquist (_not_ real Nyquist -- see http://wescottdesign.com/articles/Sampling/sampling.pdf, pp11-16) if you don't want to -- you could sample at close to 2kHz and get enough information for the job. Assuming a fast enough processor I would sample at 400kHz or above -- 301.2kHz is naive-Nyquist here, sampling at 400kHz will make the math comfortable and easy. If you don't mind initial acquisition times that might take ages you can just do a plain old PLL. If you do mind long acquisition times you can get an initial estimate of phase using fancier means, and then PLL from there. Is the signal a nice sine wave, or a square wave, or what? If you need to just get a 1-second chunk of samples and process as a batch, and if the signal _isn't_ a nice sine wave then there may be issues with windowing to be dealt with, so that signal harmonics don't end close enough to your tone frequency and mess up the measurement. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
On Thu, 11 Feb 2016 07:33:24 -0800, a.turowski wrote:

> W dniu czwartek, 11 lutego 2016 13:42:02 UTC użytkownik > mako...@yahoo.com napisał: >> On Thursday, February 11, 2016 at 7:14:42 AM UTC-5, Tauno Voipio wrote: >> > On 11.2.16 12:21, a.turowski@ymail.com wrote: >> > > Hi all, >> > > >> > > Recently I've been faced with a problem of very accurate sine wave >> > > frequency measurement. Let me give you some details: >> > > I've got a sensor which outputs measurement result as a frequency >> > > of a sine wave. The frequency of the signal is within 149.4kHz - >> > > 150.6kHz range and is very stable, as sensed parameter changes very >> > > slowly. Say the frequency can change no more than tens of ppb >> > > (parts per billion) per second. Also the signal amplitude should be >> > > very stable - it may vary very slowly with temperature. The goal is >> > > to measure the frequency to 10-100ppb accuracy at least every >> > > second - it may be just a frequency change or if possible, absolute >> > > frequency value. Lets denote the frequency we want to measure as f. >> > > >> > > I spent some time thinking about a solution and here is the idea I >> > > came up with. Lets assume that I undersample the signal using 5kHz >> > > sampling frequency. Then I use FFT to estimate roughly what the >> > > signal frequency is. Lets denote it as f_approx. Using automatic >> > > gain control I make sure that incoming signal has known and stable >> > > amplitude. Lets denote this signal as sig_in_agc. In digital domain >> > > I generate a sine wave of frequency f_approx and the same amplitude >> > > as sig_in_agc. Lets denote this signal as sig_approx. Next step is >> > > to multiply sig_in_agc by sig_approx. This is a standard mixing, >> > > which gives me a signal which is the sum of two cosines: one having >> > > frequency equal to f_approx+f, the other f_approx-f. Then I filter >> > > out the high frequency component with low pass filter and as a >> > > result I get only a signal which frequency is the difference >> > > between f_approx-f. Lets denote it f_diff. Actually this signal >> > > represents the instantaneous phase difference between sig_in_agc >> > > and sig_app >> > rox. I sample this phase difference periodically and then can >> > calculate the f_diff as a derivative over time of the phase >> > difference. >> > > >> > > Do you think that above makes any sense? Are there other (better) >> > > methods that you can recommend to measure the frequency accurately? >> > > >> > > Best regards, >> > > Adam Turowski >> > >> > >> > How about getting a reference-quality 150 kHz complex oscillator and >> > doing I/Q mixing with it? You'll get an analytic signal (two >> > channels) >> > of -600 Hz to 600 Hz, which should then be sampled with good >> > high-resolution A/D converters. >> > >> > You have to follow the phase of the signal to get ppb frequency >> > changes every second. >> > >> > Your frequency reference will be critical at ppb accuracy levels. >> > >> > -- >> > >> > -Tauno Voipio >> >> right.. >> >> OP...fundamentally, if you are measueing the absolute frq, you will >> need a reference with accuracy better than what you are trying to >> read.... >> >> or >> >> if you are measuring only changes, then you will still need a reference >> with STABILITY better than what you are trying to read. >> >> next, is filter the BW to as low as possible, if the changes are slow, >> some type of PLL or tracking filter where the loop BW is very narrow. >> >> no free lunch >> >> M > > Hi all, > > Thank you for the responses. Yes, I realize that the frequency reference > is critical here (or at least its short term stability if I only measure > frequency changes). > > Evgeny, > > Thank you for the hint about noise increase when doing undersampling. I > think I will have to consider using say 1MHz sampling frequency and then > down-converting, low pass filtering and decimating in the digital > domain. > > Tauno, > I think that using external analog I/Q mixer may not be a very good idea > in my application. The reason is that I have to be measure the phase > very precisely and I feel that having to have two mixers (one for I the > other for Q) will introduce phase mismatches obscuring actual > measurement. Anyway, thanks for the suggestion.
I think you're best off to keep things in the digital domain as much as possible. If you need mixing, do it in digital-land.
> Mako, > I fail to see how PLL would help me in solving the problem. I understand > that one could infer the phase difference between signals from the > voltage/signal driving VCO/NCO, but it wouldn't be easy. I think that > the solution I've proposed originally would give me the same answer > without having to go through PLL behavior analysis (this is usually a > very hard to crack problem).
Phase-locked loop analysis is _easy_ if you have the chops. Lock to the signal, then "infer" the frequency by looking at the frequency of your reference. I don't think you need a super-fancy PLL here.
> Any other ideas?
Get a good book on PLL theory and read it. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com
On Thu, 11 Feb 2016 02:21:28 -0800 (PST), a.turowski@ymail.com wrote:

>Hi all, > >Recently I've been faced with a problem of very accurate sine wave frequenc= >y measurement. Let me give you some details: >I've got a sensor which outputs measurement result as a frequency of a sine= > wave. The frequency of the signal is within 149.4kHz - 150.6kHz range and = >is very stable, as sensed parameter changes very slowly. Say the frequency = >can change no more than tens of ppb (parts per billion) per second. Also th= >e signal amplitude should be very stable - it may vary very slowly with tem= >perature. The goal is to measure the frequency to 10-100ppb accuracy at lea= >st every second - it may be just a frequency change or if possible, absolut= >e frequency value. Lets denote the frequency we want to measure as f.
100ppb at 150kHz is 0.015 Hz. So you want to measure frequency to within 0.015 Hz over a period of one second. That could be done by measuring the phase of the signal (with respect to some stable referece) to within 2.7 degrees every second. Assuming this signal is very clean, with no noise, this could be done digitally, but it would be hard. If one cycle is 6.67 usec, 2.7 degrees would be 50nsec. So if you can measure a zero-crossing of the signal to within 50nsec at each one second interval, you would have it. That would require a 20GHz clock to sample for a zero-crossing. Of course you can always tradeoff precision with responsiveness. Instead of making each one-second sample independent of the others, you could take a series of overlapping sample periods. For example, if you sampled the phase at the beginning and at the end of a 10-second period, you could relax the precision of the phase measurement (using a 2GHz clock) and still get the same 100ppb frequency accuracy. You could still produce a new measurement every second, but that measurement would be reflective of the frequency during the previous 10 seconds. If the frequency is changing, the frequency reported by this method will lag the actual frequency by about 5 seconds. But it will be accurate. This is essentially what a PLL does. You may be able to measure the frequency of the oscillator with great precision, but that frequency will not necessarily be tracking the frequency of your sensor signal very closely, and will only be accurate if the sensor frequency stops changing for a long time. Overall, I would say that the specs you have laid out will be quite difficult to meet, especially if you want the reported frequency to be accurate with no lag. The only way I can see getting zero lag is with a 20GHz clock capturing the phase in one-second intervals. -Robert Scott Hopkins, MN