I am missing something with magnitude Squared Coherence and/or its algorithm. If two signals are compared without or with little noise I get unexpected results. As an example taking from the ML help page: Fs = 1000; t = 0:1/Fs:1-1/Fs; x = cos(2*pi*100*t)+sin(2*pi*200*t)+0.5*randn(size(t)); y = 0.5*cos(2*pi*100*t-pi/4)+0.35*sin(2*pi*200*t-pi/2)+ ... 0.5*randn(size(t)); [Pxy,F] = mscohere(x,y,hamming(100),80,100,Fs); gives the expected two peak response. I would have thought that with no noise the mscohere would be similar and even stronger but it is not. Run the same code without the noise x = cos(2*pi*100*t)+sin(2*pi*200*t); y = 0.5*cos(2*pi*100*t-pi/4)+0.35*sin(2*pi*200*t-pi/2); [Pxy,F] = mscohere(x,y,hamming(100),80,100,Fs); and rather than getting two strong peaks and the rest near or at zero, you get unity for all frequencies. You don't need much noise, 0.5% or -46dB will do. Below this and the results get real funky. Furthermore, without some noise the algorithm sees harmonics very strongly even though they are not in both signals: x = cos(2*pi*100*t)+sin(2*pi*200*t)+0.5*randn(size(t)); y = 0.5*cos(2*pi*100*t-pi/4); still gives two strong peaks at 100 and 200 unless y has noise. Then all is as expected.
John Michell answered .
2025-11-20