小波相干性(Wavelet Coherence Analysis,WCA)是一种用于分析两个时间序列在不同时间和频率尺度上相互关系。它通过小波变换将时间序列转换到小波域,然后计算两个信号在小波域中的相干度,一次来揭示它们之间的频域联系和时域相关性。小波相干性分析能够提供比传统相关性分析更多的信息,尤其在分析非平稳信号和多尺度数据时。
使用的matlab自带的wcoherence函数:
关于此函数,matlab文档中有很多相关的介绍,也有一些示例,可根据自己需求进行选择;
matlab中函数的介绍:
%% 小波相干性计算
clc;clear;close all;
a = load('EEG01.mat'); % 加载数据,预处理后的数据
data = a.EEG.data; % 31x250x299,通道 x 采样点 x trial
data01 = reshape(data,31,[]); % 重构数据为31通道×采样点数
x = data01(3,:); % 取第3通道的所有数据
y = data01(25,:); % 取第25通道的所有数据
fs = 250; % 数据采样率
t = (0:(length(y)-1))/fs; % 时间
% 画小波相干性图
figure;
wcoherence(x, y, fs);
对于此图的解读,大家可以看matlab文档中的说明,感觉我说不太清楚
介绍相关的指标和使用
[WCOH, ~,F,coi] = wcoherence(x, y, fs);
% WCOH二维矩阵,行对应频率,列对应时间
% F:一个向量,表示与WCOH行对应的频率
% coi:小波相干性分析中的‘影响锥’的输出,它指示了相干性数据中边缘效应的位置
% 计算小波相干性均值
WCOH_meanF = mean(WCOH); %所有频率在时间上的均值
WCOH_meanT = mean(WCOH,2); %所有时间在频率上的均值
% 绘制小波相干性时间上均值
figure;
plot(t,WCOH_meanF);
xlabel('Time (s)');
ylabel('Mean Wavelet Coherence');
title('WCOH-mean-F');
% 画柱状图
WCOH_meanT= mean(WCOH,2); % 所有频率在时间上的均值
figure;
F1 = round(F',3); % 取三位小数
bar(WCOH_meanT);
set(gca,'XTick',1:160,'XTickLabel',F1); % 设置x轴标签,将F的频率数据画在x轴上
xlabel('频率Hz');
ylabel('Mean Wavelet Coherence');
title('WCOH-mean-T');
截取了其中一部分,是使用的计算出的F,也即是所有的频率进行的画图,当然,也可以选择自己所需要的频率画出;
这两个的区别就是,第一个是将所有频率进行叠加平均的,第二个是将所有时间进行叠加平均;
或者,也可以选择自己需要的频率,比如选择theta、alpha、beta:
theta = [find(F>=4 & F<8)]; %找4-8Hz的theta频率
alpha = [find(F>=8 & F<13)]; % 找8-13Hz的alpha频率
beta = [find(F>=13 & F<30)]; %找13-30Hz的beta频率
theta_t = mean(WCOH(theta,:)); % theta频率的相关性
alpha_t = mean(WCOH(alpha,:)); % alpha频率的相关性
beta_t = mean(WCOH(beta,:)); % beta频率的相关性
theta_m = mean(theta_t); % 所有的均值
alpha_m = mean(alpha_t);
beta_m = mean(beta_t);
Tatol_m = mean(meanWCOH_sum);
补充:此处介绍的wcoherence函数使用只是一个简单的计算,它可以计算出很多指标,可以根据自己的需求进行选择;