Reply by Clay S. Turner February 18, 20062006-02-18
"Al Clark" <dsp@danvillesignal.com> wrote in message 
news:Xns976C7CD1C915Caclarkdanvillesignal@66.133.129.71...
>I have a customer that needs to measure the phase difference between two > signals. > > Here are some of the parameters: > > 1. The waveform is very oversampled. > 2. Each signal may have a different amplitude > 3. Averaging the result is allowable. > 4. The signal is relatively noise free.
Hello Al, If the signal is highly sinusoidal (dominated by a single harmonic), then a simple dot product is all you need. If the above case is true, then theta = acos ( (A dot B)/sqrt( (A dot A)*(B dot B) ) The shift in samples is just theta*period/2pi And the angular shift relative to the period is theta/2pi If your signal contains harmonics, then this method will measure them as well but with an incorrect frequency, so the result will be affected. On the other hand, if your signal is harmonic rich, then find an FFT of each signal, form a vector of Hermitian products between the two FFTs, find the argument of each of the inner product terms. Find the slope of this argument function verses frequency and this is the exact relative delay between the two signals. If you know your period, then you have the phase shift. Alteratively after finding the Hermitian inner products, then form I(omega) = real(inner product) and Q(omega) = imag(inner product), and then find (I dQ - Q dI) / (I^2 + Q^2). Finally average together all of these terms to get the delay. You may even use a weighted average for this last step where the weights come from the power density of the waveform. IHTH, Clay S. Turner
> > I know that there are FFT methods, but I think this may be more work than > necessary. >
This depends on the harmonic content of the waveform and the needed accuracy.
Reply by Michael Soyka February 18, 20062006-02-18
Al Clark wrote:
> I have a customer that needs to measure the phase difference between two > signals. > > Here are some of the parameters: > > 1. The waveform is very oversampled. > 2. Each signal may have a different amplitude > 3. Averaging the result is allowable. > 4. The signal is relatively noise free. > > I know that there are FFT methods, but I think this may be more work than > necessary. > > One thought is just looking at the samples at both sides of the zero > crossings and interpolating the zero crossings from this data. The > measurements could be averaged over multiple zero crossings to improve the > accuracy. > > This seems a little crude. Does anyone have a simple more elegant solution? > Calculations are being performed in a SHARC so accuracy, MIPs, floating > point or fixed point issues are not of too much concern. > > > >
If the signal is a sine wave, the SNR is high, and you know the frequency, you can estimate the amplitude and phase by fitting it to a sine wave. For example, let x[n] be samples of your signal and let "omega" be the known radian frequency. Assume the signal can be modeled by A * sin(omega*n/Fs + phi) where A is the unknown amplitude, Fs is the sample rate, and phi is the unknown phase. Setup a system of equations: x[0] = A*sin(0+phi) x[1] = A*sin(omega*1/Fs+phi) : : Now express the model as A*sin(omega*n/Fs)cos(phi) + Acos(omega*n/Fs)sin(phi) The system can now be expressed as a matrix equation: | x[0] | | sin(omega*0/Fs) cos(omega*0/Fs) | | x[1] | | sin(omega*1/Fs) cos(omega*1/Fs) | | Acos(phi) | | : | = | : : | | Asin(phi) | | : | | : : | where the 2x1 vector on the right is unknown and the matrix and vector on the left are known. Invert the matrix to estimate the unknown vector and phi = arctan(sin(phi)/cos(phi)) Do this for both signals. Mike
Reply by Ikaro February 16, 20062006-02-16
Hi,

You can also estimate the delay by looking at the index of the maximum
value of the cross-correlation between the signals.
This might not be as efficient as solutions mentioned above
though...but will give you an accuracy of Ts and requires no
assumptions on
the frequency and/or the amplitude of the signals (if your data is
several periods long).

Reply by Al Clark February 16, 20062006-02-16
Tim Wescott <tim@seemywebsite.com> wrote in
news:CvmdnR7U0vSOXmneRVn-tw@web-ster.com: 

> Al Clark wrote: > >> I have a customer that needs to measure the phase difference between >> two signals. >> >> Here are some of the parameters: >> >> 1. The waveform is very oversampled. >> 2. Each signal may have a different amplitude >> 3. Averaging the result is allowable. >> 4. The signal is relatively noise free. >> >> I know that there are FFT methods, but I think this may be more work >> than necessary. >> >> One thought is just looking at the samples at both sides of the zero >> crossings and interpolating the zero crossings from this data. The >> measurements could be averaged over multiple zero crossings to >> improve the accuracy. >> >> This seems a little crude. Does anyone have a simple more elegant >> solution? Calculations are being performed in a SHARC so accuracy, >> MIPs, floating point or fixed point issues are not of too much >> concern. >> >> >> >> > If the frequency is known exactly you can modulate each signal with > quadrature sine waves at the frequency, average, & take the arc > tangent. > I use this sort of thing quite a lot for various tasks. Come to > think > of it, this may work even with some frequency variation -- finding the > frequency variation vs. phase accuracy is left as an exercise to the > reader (or call me off line and we'll arrange a contract). > > You may be able to do this just by delaying one signal (call it a > 'narrow-band Hilbert transform') and using the undelayed + delayed > signals for the I and Q, then just do two MAC operations instead of > four. If the frequency _isn't_ exactly known you could extend the > bandwidth of your 90 degree phase shift enough that you wouldn't have > to put the quote marks around 'Hilbert transform' -- the length of the > filter you'd want to implement would start out small (1 sample?) and > increase as the frequency uncertainty grew and the need for phase > accuracy shrank. >
OK, I think I get the idea, You are basically measuring the phase of each individual signal relative to the reference. If you know these values, you can calculate the difference between the two signals. In this case, I think the sampling rate is an integer multiple of the signal of interest, so the hilbert transform could probably be just an N sample delay. Thank you for your help. -- Al Clark Danville Signal Processing, Inc. -------------------------------------------------------------------- Purveyors of Fine DSP Hardware and other Cool Stuff Available at http://www.danvillesignal.com
Reply by February 16, 20062006-02-16
Al Clark <dsp@danvillesignal.com> writes:

> One thought is just looking at the samples at both sides of the zero > crossings and interpolating the zero crossings from this data. The > measurements could be averaged over multiple zero crossings to improve the > accuracy. > > This seems a little crude. Does anyone have a simple more elegant solution? > Calculations are being performed in a SHARC so accuracy, MIPs, floating > point or fixed point issues are not of too much concern.
Estimate the time delay: http://cnx.rice.edu/content/m11243/latest/ and convert to a phase by knowing the frequency. :-) Ciao, Peter K. -- "And he sees the vision splendid of the sunlit plains extended And at night the wondrous glory of the everlasting stars."
Reply by Mike Yarwood February 16, 20062006-02-16
"Al Clark" <dsp@danvillesignal.com> wrote in message 
news:Xns976C7CD1C915Caclarkdanvillesignal@66.133.129.71...
>I have a customer that needs to measure the phase difference between two > signals. > > Here are some of the parameters: > > 1. The waveform is very oversampled. > 2. Each signal may have a different amplitude > 3. Averaging the result is allowable. > 4. The signal is relatively noise free. > > I know that there are FFT methods, but I think this may be more work than > necessary. > > One thought is just looking at the samples at both sides of the zero > crossings and interpolating the zero crossings from this data. The > measurements could be averaged over multiple zero crossings to improve the > accuracy. > > This seems a little crude. Does anyone have a simple more elegant > solution? > Calculations are being performed in a SHARC so accuracy, MIPs, floating > point or fixed point issues are not of too much concern. >
Could you identically LPF and decimate both signals? If you know what the period is then shift the oversampled input delay on one of the streams till you get a maximum on the product of the two filter o/ps integrated over the period. It doesn't sound terribly elegant though does it? Best of luck - Mike
Reply by Tim Wescott February 16, 20062006-02-16
Al Clark wrote:

> I have a customer that needs to measure the phase difference between two > signals. > > Here are some of the parameters: > > 1. The waveform is very oversampled. > 2. Each signal may have a different amplitude > 3. Averaging the result is allowable. > 4. The signal is relatively noise free. > > I know that there are FFT methods, but I think this may be more work than > necessary. > > One thought is just looking at the samples at both sides of the zero > crossings and interpolating the zero crossings from this data. The > measurements could be averaged over multiple zero crossings to improve the > accuracy. > > This seems a little crude. Does anyone have a simple more elegant solution? > Calculations are being performed in a SHARC so accuracy, MIPs, floating > point or fixed point issues are not of too much concern. > > > >
If the frequency is known exactly you can modulate each signal with quadrature sine waves at the frequency, average, & take the arc tangent. I use this sort of thing quite a lot for various tasks. Come to think of it, this may work even with some frequency variation -- finding the frequency variation vs. phase accuracy is left as an exercise to the reader (or call me off line and we'll arrange a contract). You may be able to do this just by delaying one signal (call it a 'narrow-band Hilbert transform') and using the undelayed + delayed signals for the I and Q, then just do two MAC operations instead of four. If the frequency _isn't_ exactly known you could extend the bandwidth of your 90 degree phase shift enough that you wouldn't have to put the quote marks around 'Hilbert transform' -- the length of the filter you'd want to implement would start out small (1 sample?) and increase as the frequency uncertainty grew and the need for phase accuracy shrank. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com Posting from Google? See http://cfaj.freeshell.org/google/
Reply by Al Clark February 16, 20062006-02-16
I have a customer that needs to measure the phase difference between two 
signals.

Here are some of the parameters:

1. The waveform is very oversampled.
2. Each signal may have a different amplitude
3. Averaging the result is allowable.
4. The signal is relatively noise free.

I know that there are FFT methods, but I think this may be more work than 
necessary.

One thought is just looking at the samples at both sides of the zero 
crossings and interpolating the zero crossings from this data. The 
measurements could be averaged over multiple zero crossings to improve the 
accuracy.

This seems a little crude. Does anyone have a simple more elegant solution? 
Calculations are being performed in a SHARC so accuracy, MIPs, floating 
point or fixed point issues are not of too much concern.   




-- 
Al Clark
Danville Signal Processing, Inc.
--------------------------------------------------------------------
Purveyors of Fine DSP Hardware and other Cool Stuff
Available at http://www.danvillesignal.com