So, I have two sets of data that I would like to calculate the cross-spectrum for and see the phase difference between them.
u1 and u2 datasets:
https://www.dropbox.com/s/shbvtsf92jg5fif/u1?dl=0\
https://www.dropbox.com/s/j1afbkffxkle08t/u2?dl=0
This is my code for calculating the spectrum smoothed by Kaiser Window (order 3-5).
ClearAll[specWindow];
Options[specWindow] = {"Spec" -> None};
specWindow[timeSeries_, samplFreq_, overlap_, window_,
windowLen_, \[Alpha]_, OptionsPattern[]] :=
Block[{ts, tslen, ovrlp, windowlst, power, power0, freq, freq0},
If[overlap > 1., Print["overlap must be <1"]];
ts = If[EvenQ[Length[timeSeries]], timeSeries, Most[timeSeries]];
tslen = Length@ts;
ovrlp = Round[windowLen overlap, 1];
windowlst = N@Array[window[#, \[Alpha]] &, windowLen, {-1/2, 1/2}];
Switch[OptionValue["Spec"],
"Windowed",
power =
PeriodogramArray[ts, windowLen, ovrlp, windowlst][[;;
windowLen/2]];
freq =
Table[(k samplFreq)/
tslen, {k,
Range[0., tslen/2., (tslen/2. - 0.)/(windowLen/2. - 1.)]}];
Transpose[{freq, power}]
,
"Raw",
power0 = PeriodogramArray[ts][[;; tslen/2]];
freq0 = Table[(k samplFreq)/tslen, {k, Range[0., tslen/2. - 1]}];
Transpose[{freq0, power0}]
,
"Both",
power =
PeriodogramArray[ts, windowLen, ovrlp, windowlst][[;;
windowLen/2]];
freq =
Table[(k samplFreq)/
tslen, {k,
Range[0., tslen/2., (tslen/2. - 0.)/(windowLen/2. - 1.)]}];
power0 = PeriodogramArray[ts][[;; tslen/2]];
freq0 = Table[(k samplFreq)/tslen, {k, Range[0., tslen/2. - 1]}];
{Transpose[{freq, power}], Transpose[{freq0, power0}]}
]
]
The variance preserving spectra for the two datasets:
windowLen = 3000;
specAll =
specWindow[u1, 1./\[Tau], 0.619, KaiserWindow, windowLen, 3,
"Spec" -> "Windowed"] /. {ff_, ss_} -> {3600 24. ff, ss ff};
ListLogLogPlot[specAll,
Joined -> True,
PlotRange -> {All, {10^-6, 0.2 10^-1}},
PlotStyle -> {Directive[Thickness[0.002], Darker@Blue], Red},
ImageSize -> 450, AspectRatio -> 0.5,
GridLines -> {{1.95, 5.8, 400.}, None},
FrameLabel -> {"f (CPD)",
"\!\(\*SubscriptBox[\(PSD\), SubscriptBox[\(u\), \
\(All\)]]\)(\!\(\*SuperscriptBox[\(m\), \(2\)]\)\!\(\*SuperscriptBox[\
\(s\), \(-2\)]\))"}]
Now, how can I calculate the cross-spectrum (coherence and phase) of these two?