基于MATLAB实现时间序列小波相干性分析

一、核心代码实现

matlab 复制代码
%% 1. 数据生成与预处理
rng(0); % 固定随机种子
t = 0:0.001:2; % 时间轴(0.001秒采样间隔)
% 生成含噪声的耦合信号
x = cos(2*pi*10*t).*(t>=0.5 & t<1.1) + ...
     cos(2*pi*50*t).*(t>=0.2 & t<1.4) + 0.25*randn(size(t));
y = sin(2*pi*10*t).*(t>=0.6 & t<1.2) + ...
     sin(2*pi*50*t).*(t>=0.4 & t<1.6) + 0.35*randn(size(t));

%% 2. 小波相干性分析
[coherence, period, scale, coi, sig95] = wcoherence(x, y, seconds(0.001));

%% 3. 可视化参数设置
figure;
hold on;
h = pcolor(t, log2(period), coherence);
h.EdgeColor = 'none';
ax = gca;
ax.YTick = log2([0.01,0.1,1,10]); % 关键周期刻度
ax.YTickLabel = {'0.01','0.1','1','10'};
xlabel('时间 (秒)');
ylabel('周期 (秒)');
title('小波相干性分析图谱');
colorbar;
caxis([0.2 1]); % 设置颜色映射范围

%% 4. 显著性检验与边界效应
plot(ax, t, log2(coi), 'w--', 'LineWidth', 1.5); % 影响锥边界
% 添加显著性阈值线
[~,h_sig] = contour(ax, t, log2(period), sig95, [0.95 0.95], ...
    'r', 'LineWidth', 1.2);
set(h_sig, 'LineStyle', '--');

%% 5. 相位关系分析(可选)
[~, phase] = angle(coherence); % 获取相位信息
figure;
quiver(t(1:10:end), log2(period(1:10:end)), ...
    cos(phase(1:10:end)), sin(phase(1:10:end)), 'b');
hold on;
plot(t, log2(coi), 'w--', 'LineWidth', 1.5);
xlabel('时间 (秒)');
ylabel('周期 (秒)');
title('相位关系矢量图');

二、关键参数解析

参数 含义 典型值
scale 小波尺度(与频率成反比) 2(-6)~26
period 对应频率的周期(秒) 0.01~10
coi 影响锥边界(Cone of Influence) 边界效应区
sig95 95%显著性水平阈值 动态计算值

三、结果解读要点

  1. 颜色映射:

    • 红色表示强相关(相干性>0.8)

    • 蓝色表示弱相关(相干性<0.3)

    • 白色为显著性边界(COI)

  2. 典型特征识别:

  • 高频同步(周期<1秒):可能反映瞬态事件耦合

  • 低频共振(周期>5秒):可能对应系统固有频率

  • 相位箭头:→表示同相位,←表示反相位,↑↓表示相位差±π/2


四、高级应用扩展

1. 多尺度显著性检验
matlab 复制代码
% 计算Monte Carlo显著性阈值
nMC = 1000; % 模拟次数
[~, sigMC] = wcoherence(x, y, seconds(0.001), 'NumMonteCarlo', nMC);
2. 时变频率分析
matlab 复制代码
% 使用连续小波变换
[cfs_x, f_x] = cwt(x, 'morl', 'SamplingPeriod', seconds(0.001));
[cfs_y, f_y] = cwt(y, 'morl', 'SamplingPeriod', seconds(0.001));
cross_spectrum = cfs_x .* conj(cfs_y);
3. 三维可视化
matlab 复制代码
% 生成三维相干曲面
[X, Y] = meshgrid(t, log2(period));
surf(X, Y, coherence', 'EdgeColor', 'none');
view(3);
shading interp;

参考代码 实现时间序列的小波相干性分析,并画出图谱 www.youwenfan.com/contentcsq/63834.html

五、工程注意事项

  1. 数据预处理:

    • 必须进行去趋势和标准化处理

    • 缺失值需用线性插值填补

  2. 参数选择:

    • 小波基推荐Morlet小波('morl')

    • 采样周期需与数据采样率匹配

  3. 计算优化:

  • 长序列建议分段处理(每段>1000点)

  • 使用GPU加速(需Parallel Computing Toolbox)


六、应用案例对比

数据集 主要周期成分 显著相位关系 物理意义
气象温度数据 24h, 12h 温度-湿度→相位相反 蒸发冷却效应
股票价格数据 周期性波动 收盘价-成交量→同相位 市场供需联动
生物医学信号 0.1-0.5Hz EEG-EOG→相位差稳定 神经-眼动协同机制
相关推荐
Pniubi7 小时前
Java为什么要分堆和栈
java·开发语言
小小晓.8 小时前
Qt 对话框、QLineEdit 与布局管理实战详解
开发语言·qt
炸薯条!9 小时前
博客系统测试报告
开发语言·lua
Evand J9 小时前
【MATLAB例程12】永磁同步电机基于增广无迹卡尔曼滤波的未知负载转矩在线观测
开发语言·matlab
时间的拾荒人10 小时前
CMake 实战指南:从基础语法到静态库/动态库制作与链接
开发语言·c++·面试
xyouyuweizhu10 小时前
Java InetAddress 详解:从 IP 地址表示到主机名解析
java·开发语言·python
布莱克60519 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
LabVIEW开发19 小时前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
benchmark_cc20 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
Zenova EdgeOS21 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang