基于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→相位差稳定 神经-眼动协同机制
相关推荐
2603_965148116 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
知无不研8 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
cfm_29149 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
C++ 老炮儿的技术栈10 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_4480111610 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
小白学大数据10 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
zlinear数据采集卡11 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Poo_Chai11 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库
瑞码空间11 小时前
Java 图形界面(GUI)完整知识点手册
java·开发语言·图形界面·swing
小努蛋12 小时前
linux编译openresty异常问题,lua_cjson.c:706:5: 错误: ‘for‘ 循环初始化声明只在 C99 或 C++ 模式下允许
开发语言·lua·openresty