基于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→相位差稳定 神经-眼动协同机制
相关推荐
island13143 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
曹牧7 分钟前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
浅念-10 分钟前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
WeiXiao_Hyy11 分钟前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
User_芊芊君子17 分钟前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
Max_uuc27 分钟前
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector
开发语言·jvm·c++
故事不长丨28 分钟前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
牵牛老人30 分钟前
【Qt 开发后台服务避坑指南:从库存管理系统开发出现的问题来看后台开发常见问题与解决方案】
开发语言·qt·系统架构
froginwe1139 分钟前
Python3与MySQL的连接:使用mysql-connector
开发语言
灵感菇_1 小时前
Java HashMap全面解析
java·开发语言