#### Do you have a question? Post it now! No Registration Necessary

**posted on**

- David L. Jones

November 30, 2005, 3:42 am

A rather unusual question...

I am looking for a way to calculate the coherence value of two signals

which are several cycles of a fixed frequency sinusoidal like waveform.

i.e. I need a single value in the range 0-1 for the coherence of the

two waveforms.

I have tried calculating the coherence using the standard formula:

|Sxy|^2 / (Sxx.Syy)

where Sxy is the Cross Power Spectrum and Sxx and Syy are the AutoPower

Spectrums

and then extracting the value of the single frequency I am interesed in

from the frequency domain response.

But the coherence specturm calcuation using this technique is only

valid with averaged data samples, and I only have

***one***set of sampled

data for each waveform, so I always get a result of 1.0 regardless of

the actual coherence between the two waveforms.

Does anyone know of a way to calculate coherence, or a "coherence like"

result for

***non-averaged***data that gives a result from 0 to 1 for two

similar sine waves?

Any help appreciated.

Thanks

Dave :)

Re: Coherence Calculation

Using coherence on pure (or close-to-pure) sinusoids is usually a bad

idea -- because, if the sinusoids are of the same frequency (i.e. are

phase or frequency locked), they'll be "completely coherent", and if

they're not they won't be.

I don't think it's because you only have one set of data, I think it's

because you're only looking at one frequency --- that of the sinusoids

of interest.

Start back at square one: tell us why you're really interested in the

sine waves! :-)

Do they have a phase-shift between them? -> Use correlation to find it.

Do they have a frequency-shift between them? -> Mix (multiply) them and

look at the beat frequency.

You'll need to supply the background before we can help further, I

think.

Ciao,

Peter K.

Re: Coherence Calculation

Yes, I am aware it's not the best of ideas, as coherence is usually

done and calculated over a frequency domain with broadband data.

The two waveforms will in practice not be pure sinusoids, but will have

minor noise and distortion components, so in theory a coherence

calculation is possible. In fact, the goal is to have them as

completely coherent as possible (as it is for most systems) i.e. no

noise or distortion is added to the system, and all of the output

signal is due entirely to the input signal.

No, it's the same over the entire frequency domain. The standard

coherence function as presented relies on averaging. If you have

calculate coherence with no averaging you get a result of 1.0 in every

frequency bin. This is why every dynamic signal analyser will not allow

you to display coherence without turning on averaging.

For mostly political reasons (don't ask!) I require a "coherence"

number of 0 to 1 to indicate the "quality" of one waveform compared to

a reference.

The standard way to do this is with a coherence function, but in this

case I do not have the averaged data sets available to do this usign

the standard technique.

In the end I may have to compare the signals in the time domain instead

of using the coherence function in the frequency domain. I have a way

to do this to give a 0 to 1 "coherence like" number, but I am wondering

if anyone knows how to do it in the frequency domain using a coherence

function?

I know there are many other ways to compare two waveforms, but I need a

0 to 1 "coherence" indication display.

Dave :)

Re: Coherence Calculation

OK.

So the outcome you'd like is for the "coherence" to be 1.

OK. That's a little strange, but perhaps you're right about the

averaging... though I'm not exactly sure what you mean.

Dumb question: why can't you just block the data you have into,

admittedly smaller, datasets so you

___can___use the averaging technique?

That's what matlab does: if I do this:

x = sin(0.090823

***[0:1023]+rand(1)***2*pi) + randn(1,1024);

y = sin(0.090823

***[0:1023]+rand(1)***2*pi) + randn(1,1024);

and then try

cohere(x,y,1024)

everything is 1, but if I go

cohere(x,y,128)

I don't get the frequency resolution, but I do get something that's 1

around the right frequency and not 1 outside of that.

Bear in mind that this example is very fake: even with random phases,

the freqyencies are effectively "locked".

OK. Ain't politics a killer? :-)

Total harmonic distortion (THD)? That'll start at zero and probably never

get close to 1. If you need "good" to be close to 1, how about: 1 - THD?

Thanks for taking the time to explain more about the problem.

Let us know if any of this is a help.

Ciao,

Peter K.

Re: Coherence Calculation

Yep. That is the desired outcome for any measurement system, which is

why coherence measurement is of such importance, especially in the

vibration and acoustics systems I am involved with.

Unfortunately I don't have the necessary math skills to explain it, but

the coherence function is inherently meaningless if you don't do it

over averaged data. Your Matlab example below shows that the result is

1 for all frequency bins, and that is exactly my problem too.

If you are interested, this might explain it a little better:

http://www.educatorscorner.com/media/Exp96.pdf

Yes, I thought about this, but I don't think I have sufficent data to

do this.

I'm already getting 10Hz frequency bins on the output of my FFT power

spectrum functions, and the signal I want to measure is 40Hz. Not

exactly crash-hot resolution :-(

Also, I might only have several cylces in total to work with (it is

user selected in software). In fact, in some cases I might only have 1

cycle to work with, so my coherence calculation function might have to

handle that eventuality too.

The #1 killer of every cool project!

Gave that a brief thought, but I suspect it may be be a bit "touchy"

and not robust enough. I would actually need a THD "envelope" pass/fail

band as my two signals may (or may not) have significant THD, but have

still perfect coherence.

Not sure how you would scale that to a 0-1 result either...

In any case, I've already got a time domain analysis method in mind

that will work, based on scaled means and error difference between the

two waveforms. I just have to go through the motions to eliminate the

possibility of any other frequency domain coherence method.

Thanks for your help Peter. It is good to know that Matlab gives the

same result I am getting in my LabWindows/CVI software.

Regards

Dave :)

Re: Coherence Calculation

Hi David,

It seems that it is unecessary to go to the frequency domain for this

problem, since all you want to do compare time-domain images of short

duration. As you probably discovered, you get impulses in the

frequency domain for signals of low spectral variance.

One way to calculate the "coherence" in the time domain for

short-duration signals is:

1. take the time-domain samples of two signals and treat them as

vectors in N-space.

2. Normalize each vector so as to kill any power advantage that one

might have over the other. They will retain their positive and

negative components.

3. Take the scalar product between X & Y to yield a value from -1 to

+1.

4. Shift the scalar product +1 to get value between 0 and 2.

5. Divide result by 2 to get value between 0 and 1.

If you prefer, you can avoid steps 4 and 5, so you could end up with

confidences of

+1 = strongly correlated

0 neutral

-1 strongly uncorrelated

Naturally, the hills and valeys will dominate the output of the

correlation if you use this, so if you are really interested in

phase/magnitude correlation, you can do something similar:

1. Normalize both signals (before or after DFT - after relieves any

cofactor fuzzies in FT)

2. Take DFT

3. Treating phase and magnitude separately, take scalar products to

yield -1 < x > +1.

But again, for signals that are both in phase with same spectral

content, you should not be surprised to get something very close to 1

on both accounts, as the frequency domain will contain weak noise

dominated by impulses convolved with sin(x)/x.

-Le Chaud Lapin-

#### Site Timeline

- » TV fault
- — Next thread in » Electronics Down Under

- » PCB layout person - part-time/short-term - Brisbane
- — Previous thread in » Electronics Down Under

- » Element14 Australia Post tracking numbers.
- — Newest thread in » Electronics Down Under

- » GaAs-Fets bei kleinen Frequenzen 10 kHz-x00 MHz
- — The site's Newest Thread. Posted in » Electronics (German)

- » Rules
- — The site's Last Updated Thread. Posted in » Microcontrollers (Russian)