I am measuring the wavelet transform coherence of two signals (x and y). I then am trying to take the average coherence within various frequency ranges. However, I only want to measure the coherence values within the cone of influence COI. How do I do this? Currently I have the two signals and then conduct the wtc. The signals are attached as files % define parameterts and signals ts = 0.1; % time step fs = 10; % frequency in Hz t = (0:length(x) - 1)/10; % time vector [wtc, f, coi] = wcoherence(x, y,fs); Next, I assume I would create the matrix that is the coherence values within the cone of influence. coiDatamatrix = ?? % a matrix of only the wtc values within the coi Finaly, I would take the average coherence within the frequency range 0.125-0.3 Hz freqRange = [0.125 0.3]; % % Find indices corresponding to the frequency range freqIndices = find(f >= freqRange(1) & f <= freqRange(2)); % Extract coherence values in the frequency range within the COI coherenceInRange = coiDatamatrix(freqIndices) % Calculate average coherence (ignoring NaNs) averageCoherence = mean(coherenceInRange);
Prashant Kumar answered .
2025-11-20
% specific code (to remove)
load('f.mat')
load('coi.mat')
load('wtc.mat')
n = numel(coi);
t = (0:n - 1)*ts; % time vector
% define parameterts and signals
fs = 10; % frequency in Hz
ts = 1/fs; % time step
% t = (0:length(x) - 1)*ts; % time vector
% [wtc, wcs, f, coi] = wcoherence(x, y,fs);
% create a mask (coi) so data below coi curve are zeroed
[m,n] = size(wtc);
mask = ones(m,n);
tmp = mask;
ind = round(m*coi/max(f));
for ci =1:n
mask(1:ind(ci),ci) = 0;
end
mask = flipud(mask);
% apply Coi mask
wtc = wtc.*mask;
% plot wtc within coi bounds
imagesc(t,f,abs(wtc));
set(gca,'YDir','normal');
title('X1');
xlabel('Time (samples)')
ylabel('Frequency (Hz)')
colormap('jet')
colorbar('vert')
hold on
plot(t,coi,'--w','linewidth',3);
% Finaly, I would take the average coherence within the frequency range 0.125-0.3 Hz
freqRange = [0.125 0.3];
% % Find indices corresponding to the frequency range
freqIndices = find(f >= freqRange(1) & f <= freqRange(2));
% Extract coherence values in the frequency range within the COI
coherenceInRange = abs(wtc(freqIndices,:));
% Calculate average coherence (ignoring NaNs)
averageCoherence = mean(coherenceInRange,'all','omitnan');
on your side you simply have to remove these lines
% specific code (to remove)
load('f.mat')
load('coi.mat')
load('wtc.mat')
n = numel(coi);
t = (0:n - 1)*ts; % time vector
and uncomment this one
% t = (0:length(x) - 1)*ts; % time vector % [wtc, wcs, f, coi] = wcoherence(x, y,fs);