Matlab实现连续小波变换与时频图生成技术

发布时间:2026/9/14 3:56:34
Matlab实现连续小波变换与时频图生成技术 1. 连续小波变换(CWT)与时频图生成原理连续小波变换(Continuous Wavelet Transform, CWT)是信号处理中一种强大的时频分析工具它通过将信号与一系列缩放和平移的小波基函数进行卷积运算能够同时提供信号在时间和频率域上的局部特征信息。与短时傅里叶变换(STFT)相比CWT具有可变的时频分辨率在高频区域提供更好的时间分辨率在低频区域提供更好的频率分辨率。在Matlab中实现CWT时频图生成核心步骤包括小波基函数选择Matlab的Wavelet Toolbox提供了多种小波基函数如Morlet、Mexican hat、Daubechies等。对于时频分析Morlet小波因其良好的时频局部化特性常被选用。尺度参数设置尺度参数决定了小波的伸缩程度对应不同的频率成分。通过cwtfilterbank函数可以创建滤波器组fb cwtfilterbank(SignalLength1000, SamplingFrequency128, VoicesPerOctave12);时频系数计算使用wt方法计算小波系数[cfs,frq] wt(fb,signal);时频图可视化将小波系数的绝对值转换为时频图pcolor(t,frq,abs(cfs)); set(gca,yscale,log); shading interp;2. Matlab批量生成时频图的实现方案2.1 数据准备与参数配置批量处理前需统一数据格式和参数。假设有N个信号存储在ECGData结构体中% 统一参数设置 Fs 128; % 采样频率 signalLength 1000; % 信号长度 voicesPerOctave 12; % 每八度音阶的声数 % 创建滤波器组(提前创建以提高效率) fb cwtfilterbank(SignalLengthsignalLength,... SamplingFrequencyFs,... VoicesPerOctavevoicesPerOctave);2.2 批量处理核心代码使用循环结构实现批量处理并将结果保存为图像文件outputDir 时频图结果; if ~exist(outputDir, dir) mkdir(outputDir) end for i 1:size(ECGData.Data,1) % 获取当前信号 sig ECGData.Data(i,:); % 计算CWT系数 [cfs,frq] wt(fb,sig); % 创建时频图 fig figure(Visible,off); pcolor((0:signalLength-1)/Fs, frq, abs(cfs)); set(gca,yscale,log); shading interp; axis tight; xlabel(时间(s)); ylabel(频率(Hz)); title([时频图 - 信号,num2str(i)]); % 保存图像 saveas(fig, fullfile(outputDir, [时频图_,num2str(i),.png])); close(fig); end2.3 性能优化技巧并行计算加速对于大规模数据使用parfor替代for循环parfor i 1:N % 处理代码 end内存预分配提前分配存储空间cfs_all zeros(length(frq), signalLength, N);批量保存优化将多个图像存储在MAT文件中而非单独文件save(batch_results.mat,cfs_all,-v7.3);3. 时频图后处理与深度学习应用3.1 时频图标准化处理为适应深度学习模型输入要求需对时频图进行标准化% 将CWT系数转换为RGB图像 cfs_norm rescale(abs(cfs),0,1); rgb_img ind2rgb(round(cfs_norm*255), jet(256)); % 调整大小为224x224(适配常见CNN输入尺寸) rgb_img imresize(rgb_img, [224 224]); % 保存为JPEG格式 imwrite(rgb_img, tf_image.jpg);3.2 与深度学习模型集成时频图可作为CNN的输入特征以下示例展示如何与预训练网络结合% 加载预训练网络 net googlenet; % 修改网络最后一层 numClasses 3; % 分类类别数 lgraph layerGraph(net); newLayers [ dropoutLayer(0.6,Name,newDropout) fullyConnectedLayer(numClasses,Name,newFc) softmaxLayer(Name,newSoftmax) classificationLayer(Name,newOutput)]; lgraph replaceLayer(lgraph,pool5-drop_7x7_s1,newLayers(1)); lgraph replaceLayer(lgraph,loss3-classifier,newLayers(2)); lgraph replaceLayer(lgraph,prob,newLayers(3)); lgraph replaceLayer(lgraph,output,newLayers(4)); % 创建图像数据存储 imds imageDatastore(时频图结果,IncludeSubfolders,true,... LabelSource,foldernames);4. 实际应用中的关键问题与解决方案4.1 常见问题排查频率范围不合适症状时频图显示频率成分集中在狭窄范围解决方法调整cwtfilterbank的FrequencyLimits参数fb cwtfilterbank(...,FrequencyLimits,[0.5 64]);时间分辨率不足症状快速变化信号特征模糊优化方案增加VoicesPerOctave值fb cwtfilterbank(...,VoicesPerOctave,24);边界效应处理现象信号两端出现虚假频率成分解决方案使用SignalPadding参数fb cwtfilterbank(...,SignalPadding,1000);4.2 高级应用技巧多信号对比分析% 计算多信号平均时频特征 avg_cfs mean(abs(cfs_all),3); figure; imagesc(avg_cfs);动态范围调整% 使用对数缩放增强弱信号可视化 log_cfs log10(abs(cfs)eps);三维时频可视化surf(t,frq,abs(cfs),EdgeColor,none); view(0,90); axis tight;5. 完整项目结构建议规范的目录结构有助于批量处理项目根目录/ ├── input_data/ # 原始信号数据 │ ├── signal1.mat │ └── signal2.mat ├── src/ # 源代码 │ ├── batch_cwt.m # 批量处理主脚本 │ └── utils/ # 工具函数 ├── output/ # 输出结果 │ ├── time_freq_images/ # 时频图 │ └── features/ # 提取的特征 └── docs/ # 文档典型批处理脚本框架% 初始化环境 clear; clc; close all; addpath(genpath(src/utils)); % 加载数据 dataDir input_data; files dir(fullfile(dataDir,*.mat)); % 创建滤波器组 fb cwtfilterbank(...); % 并行处理 parfor i 1:length(files) % 加载信号 data load(fullfile(files(i).folder,files(i).name)); sig preprocess(data.raw); % 预处理 % 生成时频图 [cfs,~] wt(fb,sig); saveTfImage(cfs, files(i).name); % 提取特征 features extractFeatures(cfs); saveFeatures(features, files(i).name); end % 后处理 mergeFeatures(output/features);